Optimize ux

fongmi
jhengazuki 1 month ago
parent e32275fe0e
commit 526b3daf25
  1. 30
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 9
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  4. 4
      app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java
  5. 1
      app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java
  6. 1
      app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java
  7. 3
      app/src/main/java/com/fongmi/android/tv/impl/Callback.java
  8. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  9. 9
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
  10. 27
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java

@ -3,6 +3,7 @@ package com.fongmi.android.tv.ui.activity;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
@ -69,7 +70,9 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Optional;
public class HomeActivity extends BaseActivity implements CustomTitleView.Listener, VodPresenter.OnClickListener, FuncPresenter.OnClickListener, HistoryPresenter.OnClickListener { public class HomeActivity extends BaseActivity implements CustomTitleView.Listener, VodPresenter.OnClickListener, FuncPresenter.OnClickListener, HistoryPresenter.OnClickListener {
@ -83,10 +86,14 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
private Result mResult; private Result mResult;
private Clock mClock; private Clock mClock;
private Site getHome() { private Site getSite() {
return VodConfig.get().getHome(); return VodConfig.get().getHome();
} }
private Config getConfig() {
return VodConfig.get().getConfig();
}
@Override @Override
protected ViewBinding getBinding() { protected ViewBinding getBinding() {
return mBinding = ActivityHomeBinding.inflate(getLayoutInflater()); return mBinding = ActivityHomeBinding.inflate(getLayoutInflater());
@ -106,6 +113,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override @Override
protected void initView() { protected void initView() {
mResult = Result.empty();
mClock = Clock.create(mBinding.clock); mClock = Clock.create(mBinding.clock);
mBinding.progressLayout.showProgress(); mBinding.progressLayout.showProgress();
Updater.create().start(this); Updater.create().start(this);
@ -114,6 +122,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
setViewModel(); setViewModel();
setAdapter(); setAdapter();
initConfig(); initConfig();
setTitle();
setLogo(); setLogo();
} }
@ -168,6 +177,12 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
mAdapter.add(R.string.home_recommend); mAdapter.add(R.string.home_recommend);
} }
private void setTitle() {
List<String> items = Arrays.asList(getSite().getName(), getConfig().getName(), getString(R.string.app_name));
Optional<String> optional = items.stream().filter(s -> !TextUtils.isEmpty(s)).findFirst();
optional.ifPresent(s -> mBinding.title.setText(s));
}
private void initConfig() { private void initConfig() {
if (isLoading()) return; if (isLoading()) return;
WallConfig.get().init(); WallConfig.get().init();
@ -222,18 +237,17 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
} }
private void getVideo() { private void getVideo() {
setTitle();
mResult = Result.empty(); mResult = Result.empty();
int index = getRecommendIndex(); int index = getRecommendIndex();
String title = getHome().getName();
mBinding.title.setText(title.isEmpty() ? getString(R.string.app_name) : title);
if (mAdapter.size() > index) mAdapter.removeItems(index, mAdapter.size() - index); if (mAdapter.size() > index) mAdapter.removeItems(index, mAdapter.size() - index);
if (getHome().getKey().isEmpty()) return; if (getSite().getKey().isEmpty()) return;
mViewModel.homeContent(); mViewModel.homeContent();
mAdapter.add("progress"); mAdapter.add("progress");
} }
private void addVideo(Result result) { private void addVideo(Result result) {
Style style = result.getStyle(getHome().getStyle()); Style style = result.getStyle(getSite().getStyle());
for (List<Vod> items : Lists.partition(result.getList(), Product.getColumn(style))) { for (List<Vod> items : Lists.partition(result.getList(), Product.getColumn(style))) {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter(this, style)); ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter(this, style));
adapter.setItems(items, new BaseDiffCallback<Vod>()); adapter.setItems(items, new BaseDiffCallback<Vod>());
@ -387,9 +401,9 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override @Override
public void onItemClick(Vod item) { public void onItemClick(Vod item) {
if (item.isAction()) mViewModel.action(getHome().getKey(), item.getAction()); if (item.isAction()) mViewModel.action(getSite().getKey(), item.getAction());
else if (getHome().isIndex()) CollectActivity.start(this, item.getVodName()); else if (getSite().isIndex()) CollectActivity.start(this, item.getVodName());
else VideoActivity.start(this, getHome().getKey(), item.getVodId(), item.getVodName(), item.getVodPic()); else VideoActivity.start(this, getSite().getKey(), item.getVodId(), item.getVodName(), item.getVodPic());
} }
@Override @Override

@ -690,11 +690,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
public void setConfig(Config config) { public void setConfig(Config config) {
Config current = LiveConfig.get().getConfig(); Config current = LiveConfig.get().getConfig();
LiveConfig.load(config, getCallback(current)); LiveConfig.load(config, getCallback(current));
showProgress();
} }
private Callback getCallback(Config config) { private Callback getCallback(Config config) {
return new Callback() { return new Callback() {
@Override
public void start() {
showProgress();
}
@Override @Override
public void success() { public void success() {
RefreshEvent.config(); RefreshEvent.config();

@ -133,7 +133,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
if (config.getUrl().startsWith("file")) { if (config.getUrl().startsWith("file")) {
PermissionUtil.requestFile(this, allGranted -> load(config)); PermissionUtil.requestFile(this, allGranted -> load(config));
} else { } else {
Notify.progress(this);
load(config); load(config);
} }
} }
@ -155,6 +154,11 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
private Callback getCallback(int type) { private Callback getCallback(int type) {
return new Callback() { return new Callback() {
@Override
public void start() {
Notify.progress(getActivity());
}
@Override @Override
public void success(String result) { public void success(String result) {
Notify.show(result); Notify.show(result);
@ -251,7 +255,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
private void setWallRefresh(View view) { private void setWallRefresh(View view) {
Setting.putWall(0); Setting.putWall(0);
Notify.progress(this);
WallConfig.get().load(getCallback(2)); WallConfig.get().load(getCallback(2));
} }
@ -278,7 +281,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
@Override @Override
public void setDoh(Doh doh) { public void setDoh(Doh doh) {
Notify.progress(this);
OkHttp.get().setDoh(doh); OkHttp.get().setDoh(doh);
Setting.putDoh(doh.toString()); Setting.putDoh(doh.toString());
mBinding.dohText.setText(doh.getName()); mBinding.dohText.setText(doh.getName());
@ -313,7 +315,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
@Override @Override
public void success() { public void success() {
Notify.show(R.string.restore_success); Notify.show(R.string.restore_success);
Notify.progress(getActivity());
setOtherText(); setOtherText();
initConfig(); initConfig();
} }

@ -30,7 +30,6 @@ import com.google.gson.JsonObject;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
@ -115,6 +114,7 @@ public class LiveConfig {
public void load(Callback callback) { public void load(Callback callback) {
if (future != null && !future.isDone()) future.cancel(true); if (future != null && !future.isDone()) future.cancel(true);
future = App.submit(() -> loadConfig(callback)); future = App.submit(() -> loadConfig(callback));
callback.start();
} }
private void loadConfig(Callback callback) { private void loadConfig(Callback callback) {
@ -131,8 +131,8 @@ public class LiveConfig {
private void parseText(String text, Callback callback) { private void parseText(String text, Callback callback) {
Live live = new Live(parseName(config.getUrl()), config.getUrl()).sync(); Live live = new Live(parseName(config.getUrl()), config.getUrl()).sync();
lives = new ArrayList<>(List.of(live));
LiveParser.text(live, text); LiveParser.text(live, text);
lives = Arrays.asList(live);
setHome(live, true); setHome(live, true);
App.post(callback::success); App.post(callback::success);
} }

@ -112,6 +112,7 @@ public class VodConfig {
public void load(Callback callback) { public void load(Callback callback) {
if (future != null && !future.isDone()) future.cancel(true); if (future != null && !future.isDone()) future.cancel(true);
future = App.submit(() -> loadConfig(callback)); future = App.submit(() -> loadConfig(callback));
callback.start();
} }
private void loadConfig(Callback callback) { private void loadConfig(Callback callback) {

@ -78,6 +78,7 @@ public class WallConfig {
public void load(Callback callback) { public void load(Callback callback) {
if (future != null && !future.isDone()) future.cancel(true); if (future != null && !future.isDone()) future.cancel(true);
future = App.submit(() -> loadConfig(callback)); future = App.submit(() -> loadConfig(callback));
callback.start();
} }
private void loadConfig(Callback callback) { private void loadConfig(Callback callback) {

@ -18,6 +18,9 @@ public class Callback implements okhttp3.Callback {
public void error() { public void error() {
} }
public void start() {
}
public void error(String msg) { public void error(String msg) {
} }

@ -724,11 +724,15 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener
public void setConfig(Config config) { public void setConfig(Config config) {
Config current = LiveConfig.get().getConfig(); Config current = LiveConfig.get().getConfig();
LiveConfig.load(config, getCallback(current)); LiveConfig.load(config, getCallback(current));
showProgress();
} }
private Callback getCallback(Config config) { private Callback getCallback(Config config) {
return new Callback() { return new Callback() {
@Override
public void start() {
showProgress();
}
@Override @Override
public void success() { public void success() {
RefreshEvent.config(); RefreshEvent.config();

@ -142,7 +142,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
if (config.getUrl().startsWith("file")) { if (config.getUrl().startsWith("file")) {
PermissionUtil.requestFile(this, allGranted -> load(config)); PermissionUtil.requestFile(this, allGranted -> load(config));
} else { } else {
Notify.progress(requireActivity());
load(config); load(config);
} }
} }
@ -164,6 +163,11 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
private Callback getCallback(int type) { private Callback getCallback(int type) {
return new Callback() { return new Callback() {
@Override
public void start() {
Notify.progress(requireActivity());
}
@Override @Override
public void success(String result) { public void success(String result) {
Notify.show(result); Notify.show(result);
@ -258,7 +262,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
private void setWallRefresh(View view) { private void setWallRefresh(View view) {
Setting.putWall(0); Setting.putWall(0);
Notify.progress(requireActivity());
WallConfig.get().load(getCallback(2)); WallConfig.get().load(getCallback(2));
} }
@ -290,7 +293,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
private void setDoh(Doh doh) { private void setDoh(Doh doh) {
OkHttp.get().setDoh(doh); OkHttp.get().setDoh(doh);
Notify.progress(requireActivity());
Setting.putDoh(doh.toString()); Setting.putDoh(doh.toString());
mBinding.dohText.setText(doh.getName()); mBinding.dohText.setText(doh.getName());
VodConfig.load(Config.vod(), getCallback(0)); VodConfig.load(Config.vod(), getCallback(0));
@ -324,7 +326,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
@Override @Override
public void success() { public void success() {
Notify.show(R.string.restore_success); Notify.show(R.string.restore_success);
Notify.progress(requireActivity());
setOtherText(); setOtherText();
initConfig(); initConfig();
} }

@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.fragment;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -55,7 +56,9 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Optional;
public class VodFragment extends BaseFragment implements ConfigCallback, SiteCallback, FilterCallback, TypeAdapter.OnClickListener { public class VodFragment extends BaseFragment implements ConfigCallback, SiteCallback, FilterCallback, TypeAdapter.OnClickListener {
@ -76,6 +79,10 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal
return VodConfig.get().getHome(); return VodConfig.get().getHome();
} }
private Config getConfig() {
return VodConfig.get().getConfig();
}
@Override @Override
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return mBinding = FragmentVodBinding.inflate(inflater, container, false); return mBinding = FragmentVodBinding.inflate(inflater, container, false);
@ -88,6 +95,7 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal
setRecyclerView(); setRecyclerView();
setViewModel(); setViewModel();
showProgress(); showProgress();
setTitle();
setLogo(); setLogo();
} }
@ -159,6 +167,12 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal
} }
} }
private void setTitle() {
List<String> items = Arrays.asList(getSite().getName(), getConfig().getName(), getString(R.string.app_name));
Optional<String> optional = items.stream().filter(s -> !TextUtils.isEmpty(s)).findFirst();
optional.ifPresent(s -> mBinding.title.setText(s));
}
private void onTop(View view) { private void onTop(View view) {
getFragment().scrollToTop(); getFragment().scrollToTop();
mBinding.top.setVisibility(View.INVISIBLE); mBinding.top.setVisibility(View.INVISIBLE);
@ -209,13 +223,12 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal
} }
private void homeContent() { private void homeContent() {
setTitle();
showProgress(); showProgress();
setFabVisible(0); setFabVisible(0);
mAdapter.clear(); mAdapter.clear();
mViewModel.homeContent(); mViewModel.homeContent();
String title = getSite().getName();
mBinding.pager.setAdapter(new PageAdapter(getChildFragmentManager())); mBinding.pager.setAdapter(new PageAdapter(getChildFragmentManager()));
mBinding.title.setText(title.isEmpty() ? getString(R.string.app_name) : title);
} }
public Result getResult() { public Result getResult() {
@ -258,9 +271,15 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal
@Override @Override
public void setConfig(Config config) { public void setConfig(Config config) {
hideContent();
showProgress();
VodConfig.load(config, new Callback() { VodConfig.load(config, new Callback() {
@Override
public void start() {
showProgress();
hideContent();
setTitle();
setLogo();
}
@Override @Override
public void success() { public void success() {
RefreshEvent.config(); RefreshEvent.config();

Loading…
Cancel
Save