From 8c4f347a2d0e78087d1124470aea7aa537d88040 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 14 Jan 2023 22:56:20 +0800 Subject: [PATCH] Optimize auto search --- .../tv/ui/activity/DetailActivity.java | 108 ++++++++++-------- 1 file changed, 58 insertions(+), 50 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 c7e2c0f1b..b2c4d8fa4 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 @@ -92,8 +92,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private SiteViewModel mViewModel; private boolean mFullscreen; private boolean mInitTrack; + private boolean mInitAuto; private boolean mAutoMode; - private boolean mAccurate; private History mHistory; private Players mPlayers; private int mCurrent; @@ -423,45 +423,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mArrayAdapter.setItems(items, null); } - private void stopSearch() { - if (mExecutor != null) mExecutor.shutdownNow(); - mSearchAdapter.clear(); - } - - private void initSearch(String keyword, boolean accurate) { - stopSearch(); - startSearch(keyword); - setAccurate(accurate); - setAutoMode(accurate); - mBinding.part.setTag(keyword); - } - - private void startSearch(String keyword) { - mExecutor = Executors.newFixedThreadPool(5); - for (Site site : ApiConfig.get().getSites()) if (site.isSearchable() && !site.getKey().equals(getKey())) mExecutor.execute(() -> search(site, keyword)); - } - - private void search(Site site, String keyword) { - try { - mViewModel.searchContent(site, keyword); - } catch (Throwable ignored) { - } - } - - private void setSearch(List items) { - Iterator iterator = items.iterator(); - while (iterator.hasNext()) if (mismatch(iterator.next())) iterator.remove(); - mSearchAdapter.addAll(mSearchAdapter.size(), items); - mBinding.search.setVisibility(View.VISIBLE); - if (isAutoMode()) nextSite(); - } - - private boolean mismatch(Vod item) { - String keyword = mBinding.part.getTag().toString(); - if (isAccurate()) return !item.getVodName().equals(keyword); - else return !item.getVodName().contains(keyword); - } - @Override public void onRevSort() { mHistory.setRevSort(!mHistory.isRevSort()); @@ -822,11 +783,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void onError(String msg) { int position = mBinding.flag.getSelectedPosition(); if (position == mFlagAdapter.size() - 1) { - initSearch(mBinding.name.getText().toString(), true); mBinding.widget.text.setText(msg); Clock.get().setCallback(null); mPlayers.stop(); hideProgress(); + checkSearch(); showError(); } else { mPlayers.reset(); @@ -834,6 +795,53 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } } + private void checkSearch() { + if (mSearchAdapter.size() > 0 && isAutoMode()) { + nextSite(); + } else { + initSearch(getName(), true); + } + } + + private void initSearch(String keyword, boolean auto) { + stopSearch(); + setAutoMode(auto); + setInitAuto(auto); + startSearch(keyword); + mBinding.part.setTag(keyword); + } + + private void startSearch(String keyword) { + mExecutor = Executors.newSingleThreadExecutor(); + for (Site site : ApiConfig.get().getSites()) if (site.isSearchable() && !site.getKey().equals(getKey())) mExecutor.execute(() -> search(site, keyword)); + } + + private void stopSearch() { + if (mExecutor != null) mExecutor.shutdownNow(); + mSearchAdapter.clear(); + } + + private void search(Site site, String keyword) { + try { + mViewModel.searchContent(site, keyword); + } catch (Throwable ignored) { + } + } + + private void setSearch(List items) { + Iterator iterator = items.iterator(); + while (iterator.hasNext()) if (mismatch(iterator.next())) iterator.remove(); + mSearchAdapter.addAll(mSearchAdapter.size(), items); + mBinding.search.setVisibility(View.VISIBLE); + if (isInitAuto()) nextSite(); + } + + private boolean mismatch(Vod item) { + String keyword = mBinding.part.getTag().toString(); + if (isAutoMode()) return !item.getVodName().equals(keyword); + else return !item.getVodName().contains(keyword); + } + private void nextFlag(int position) { Vod.Flag flag = (Vod.Flag) mFlagAdapter.get(position + 1); Notify.show(ResUtil.getString(R.string.play_switch_flag, flag.getFlag())); @@ -845,7 +853,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis Vod vod = (Vod) mSearchAdapter.get(0); Notify.show(ResUtil.getString(R.string.play_switch_site, vod.getSiteName())); mSearchAdapter.removeItems(0, 1); - setAutoMode(false); + setInitAuto(false); getDetail(vod); } @@ -878,20 +886,20 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis this.mInitTrack = initTrack; } - private boolean isAutoMode() { - return mAutoMode; + public boolean isInitAuto() { + return mInitAuto; } - private void setAutoMode(boolean autoMode) { - this.mAutoMode = autoMode; + public void setInitAuto(boolean initAuto) { + this.mInitAuto = initAuto; } - private boolean isAccurate() { - return mAccurate; + private boolean isAutoMode() { + return mAutoMode; } - private void setAccurate(boolean accurate) { - this.mAccurate = accurate; + private void setAutoMode(boolean autoMode) { + this.mAutoMode = autoMode; } @Override