From 7606c168b2fedbed28b969fcec2d26230c3af2dd Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 10 Feb 2023 18:10:03 +0800 Subject: [PATCH] [leanback] optimize auto switch --- .../tv/ui/activity/DetailActivity.java | 55 +++++++------------ .../com/fongmi/android/tv/api/ApiConfig.java | 13 +++-- app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 5 files changed, 26 insertions(+), 45 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 942c3b511..e1838a45c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -147,11 +147,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis return 0; } - private int getParsePosition() { - for (int i = 0; i < mParseAdapter.size(); i++) if (((Parse) mParseAdapter.get(i)).isActivated()) return i; - return 0; - } - private int getPlayerType() { return mHistory != null && mHistory.getPlayer() != -1 ? mHistory.getPlayer() : getSite().getPlayerType() != -1 ? getSite().getPlayerType() : Prefers.getPlayer(); } @@ -176,6 +171,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis return Prefers.getReset() == 1; } + private boolean isFromCollect() { + return getCallingActivity().getShortClassName().contains(CollectActivity.class.getSimpleName()); + } + @Override protected ViewBinding getBinding() { return mBinding = ActivityDetailBinding.inflate(getLayoutInflater()); @@ -278,13 +277,15 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[scale]); } + boolean test = false; private void setViewModel() { mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mViewModel.search.observe(this, result -> setSearch(result.getList())); mViewModel.player.observe(this, result -> { boolean useParse = (result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1; mBinding.control.parseLayout.setVisibility(mParseAdapter.size() > 0 && useParse ? View.VISIBLE : View.GONE); - mPlayers.start(result, useParse, getSite().isSwitchable() ? Constant.TIMEOUT_PLAY : -1); + int timeout = getSite().isSwitchable() ? Constant.TIMEOUT_PLAY : -1; + mPlayers.start(result, useParse, timeout); resetFocus(); }); mViewModel.result.observe(this, result -> { @@ -327,11 +328,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void setEmpty() { - if (getName().isEmpty()) { + if (isFromCollect()) { + finish(); + } else if (getName().isEmpty()) { mBinding.progressLayout.showEmpty(); } else { - CollectActivity.start(this, getName(), true); - finish(); + checkSearch(); } } @@ -800,32 +802,15 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void statFlow() { - if (isVisible(mBinding.control.parseLayout)) checkParse(); - else checkFlag(); - } - - private void checkParse() { - int position = getParsePosition(); - if (position == mParseAdapter.size() - 1) initParse(); - if (position == mParseAdapter.size() - 1) checkFlag(); - else nextParse(position); - } - - private void checkFlag() { + if (!getSite().isSwitchable()) return; int position = mBinding.flag.getSelectedPosition(); - if (position == mFlagAdapter.size() - 1 || !getSite().isSwitchable()) checkSearch(); + if (position == mFlagAdapter.size() - 1) checkSearch(); else nextFlag(position); } private void checkSearch() { if (isAutoMode() && mSearchAdapter.size() > 0) nextSite(); - else initSearch(getName(), getSite().isSwitchable()); - } - - private void initParse() { - if (mParseAdapter.size() == 0) return; - ApiConfig.get().setParse((Parse) mParseAdapter.get(0)); - notifyItemChanged(mBinding.control.parse, mParseAdapter); + else initSearch(getName(), true); } private void initSearch(String keyword, boolean auto) { @@ -839,7 +824,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void startSearch(String keyword) { mSearchAdapter.clear(); mExecutor = Executors.newFixedThreadPool(Constant.THREAD_POOL); - for (Site site : ApiConfig.get().getSites()) if (site.isSearchable() && !site.getKey().equals(getKey())) mExecutor.execute(() -> search(site, keyword)); + for (Site site : ApiConfig.get().getSites()) { + if (site.getKey().equals(getKey())) continue; + if (isAutoMode() && !site.isSwitchable()) continue; + if (site.isSearchable()) mExecutor.execute(() -> search(site, keyword)); + } } private void stopSearch() { @@ -867,12 +856,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis else return !item.getVodName().contains(keyword); } - private void nextParse(int position) { - Parse parse = (Parse) mParseAdapter.get(position + 1); - Notify.show(getString(R.string.play_switch_parse, parse.getName())); - setParseActivated(parse); - } - private void nextFlag(int position) { Vod.Flag flag = (Vod.Flag) mFlagAdapter.get(position + 1); Notify.show(getString(R.string.play_switch_flag, flag.getFlag())); diff --git a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java index e65459e71..46469f605 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java @@ -27,17 +27,17 @@ import java.util.Map; public class ApiConfig { - private List flags; - private List parses; private List sites; + private List parses; + private List flags; private JarLoader jarLoader; private PyLoader pyLoader; private JsLoader jsLoader; private Config config; private Parse parse; - private Site home; private String wall; private String ads; + private Site home; private static class Loader { static volatile ApiConfig INSTANCE = new ApiConfig(); @@ -65,8 +65,9 @@ public class ApiConfig { public ApiConfig init() { this.ads = null; - this.home = null; this.wall = null; + this.home = null; + this.parse = null; this.config = Config.vod(); this.sites = new ArrayList<>(); this.flags = new ArrayList<>(); @@ -84,8 +85,9 @@ public class ApiConfig { public ApiConfig clear() { this.ads = null; - this.home = null; this.wall = null; + this.home = null; + this.parse = null; this.sites.clear(); this.flags.clear(); this.parses.clear(); @@ -145,7 +147,6 @@ public class ApiConfig { } for (JsonElement element : Json.safeListElement(object, "parses")) { Parse parse = Parse.objectFrom(element); - if (parse.getName().equals(config.getParse())) setParse(parse); if (!parses.contains(parse)) parses.add(parse); } if (home == null) setHome(sites.isEmpty() ? new Site() : sites.get(0)); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d2f196118..cc5874488 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -49,7 +49,6 @@ 已切换正序播放 已切换倒序播放 - 正在切换解析至「%s 正在切换线路至「%s 正在切换站源至「%s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c15178d76..495714230 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -49,7 +49,6 @@ 已切換正序播放 已切換倒序播放 - 正在切换解析至「%s 正在切換線路至「%s 正在切換站源至「%s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cf94a147b..e48c06b1d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,7 +49,6 @@ Normal play switched Reverse play switched - Switching parse to %s Switching flag to %s Switching site to %s