From a113cfa960eb88faf997611fee5761584ee7ea0f Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 4 Dec 2022 15:24:57 +0800 Subject: [PATCH] Support quick search - part 2 --- .../tv/ui/activity/CollectActivity.java | 2 +- .../tv/ui/activity/DetailActivity.java | 30 +++++++++++-------- ...estPresenter.java => SearchPresenter.java} | 12 ++++---- .../leanback/res/layout/activity_detail.xml | 2 +- ...adapter_suggest.xml => adapter_search.xml} | 0 .../android/tv/model/SiteViewModel.java | 4 ++- 6 files changed, 29 insertions(+), 21 deletions(-) rename app/src/leanback/java/com/fongmi/android/tv/ui/presenter/{SuggestPresenter.java => SearchPresenter.java} (78%) rename app/src/leanback/res/layout/{adapter_suggest.xml => adapter_search.xml} (100%) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java index e601cb95d..c1c717537 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java @@ -97,7 +97,7 @@ public class CollectActivity extends BaseActivity { private void setViewModel() { mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); - mViewModel.result.observe(this, result -> { + mViewModel.search.observe(this, result -> { mAdapter.add(Collect.create(result.getList())); getFragment().addVideo(result.getList()); mPageAdapter.notifyDataSetChanged(); 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 35494e224..c98b44bd7 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 @@ -45,7 +45,7 @@ import com.fongmi.android.tv.ui.presenter.EpisodePresenter; import com.fongmi.android.tv.ui.presenter.FlagPresenter; import com.fongmi.android.tv.ui.presenter.ParsePresenter; import com.fongmi.android.tv.ui.presenter.PartPresenter; -import com.fongmi.android.tv.ui.presenter.SuggestPresenter; +import com.fongmi.android.tv.ui.presenter.SearchPresenter; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; @@ -79,7 +79,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private ArrayObjectAdapter mEpisodeAdapter; private ArrayObjectAdapter mParseAdapter; private ArrayObjectAdapter mPartAdapter; - private ArrayObjectAdapter mSuggestAdapter; + private ArrayObjectAdapter mSearchAdapter; private EpisodePresenter mEpisodePresenter; private PartPresenter mPartPresenter; private CustomKeyDownVod mKeyDown; @@ -218,12 +218,15 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.part.setHorizontalSpacing(ResUtil.dp2px(8)); mBinding.part.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mBinding.part.setAdapter(new ItemBridgeAdapter(mPartAdapter = new ArrayObjectAdapter(mPartPresenter = new PartPresenter(this::initSearch)))); - mBinding.suggest.setHorizontalSpacing(ResUtil.dp2px(8)); - mBinding.suggest.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - mBinding.suggest.setAdapter(new ItemBridgeAdapter(mSuggestAdapter = new ArrayObjectAdapter(new SuggestPresenter(new SuggestPresenter.OnClickListener() { + mBinding.search.setHorizontalSpacing(ResUtil.dp2px(8)); + mBinding.search.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + mBinding.search.setAdapter(new ItemBridgeAdapter(mSearchAdapter = new ArrayObjectAdapter(new SearchPresenter(new SearchPresenter.OnClickListener() { @Override public void onItemClick(Vod item) { - + getIntent().putExtra("key", item.getSite().getKey()); + getIntent().putExtra("id", item.getVodId()); + Clock.get().setCallback(null); + getDetail(); } })))); mBinding.control.parse.setHorizontalSpacing(ResUtil.dp2px(8)); @@ -265,10 +268,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis resetFocus(useParse); }); mViewModel.result.observe(this, result -> { - if (mExecutor != null) setSuggest(result.getList()); - else if (result.getList().isEmpty()) mBinding.progressLayout.showEmpty(); + if (result.getList().isEmpty()) mBinding.progressLayout.showEmpty(); else setDetail(result.getList().get(0)); }); + mViewModel.search.observe(this, result -> { + setSearch(result.getList()); + }); } private void resetFocus(boolean useParse) { @@ -385,6 +390,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void stopSearch() { if (mExecutor != null) mExecutor.shutdownNow(); + mSearchAdapter.clear(); } private void initSearch(String keyword) { @@ -405,12 +411,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } } - private void setSuggest(List items) { + private void setSearch(List items) { String keyword = mBinding.part.getTag().toString(); Iterator iterator = items.iterator(); - while (iterator.hasNext()) if (!iterator.next().getVodName().equals(keyword)) iterator.remove(); - mSuggestAdapter.addAll(mSuggestAdapter.size(), items); - mBinding.suggest.setVisibility(View.VISIBLE); + while (iterator.hasNext()) if (!iterator.next().getVodName().contains(keyword)) iterator.remove(); + mSearchAdapter.addAll(mSearchAdapter.size(), items); + mBinding.search.setVisibility(View.VISIBLE); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SuggestPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SearchPresenter.java similarity index 78% rename from app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SuggestPresenter.java rename to app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SearchPresenter.java index 9ec560eaa..62c9e903f 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SuggestPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SearchPresenter.java @@ -7,15 +7,15 @@ import androidx.annotation.NonNull; import androidx.leanback.widget.Presenter; import com.fongmi.android.tv.bean.Vod; -import com.fongmi.android.tv.databinding.AdapterSuggestBinding; +import com.fongmi.android.tv.databinding.AdapterSearchBinding; import com.fongmi.android.tv.utils.ResUtil; -public class SuggestPresenter extends Presenter { +public class SearchPresenter extends Presenter { private final OnClickListener mListener; private int width; - public SuggestPresenter(OnClickListener listener) { + public SearchPresenter(OnClickListener listener) { this.mListener = listener; setLayoutSize(); } @@ -33,7 +33,7 @@ public class SuggestPresenter extends Presenter { @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { - ViewHolder holder = new ViewHolder(AdapterSuggestBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + ViewHolder holder = new ViewHolder(AdapterSearchBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); holder.binding.getRoot().getLayoutParams().width = width; return holder; } @@ -54,9 +54,9 @@ public class SuggestPresenter extends Presenter { public static class ViewHolder extends Presenter.ViewHolder { - private final AdapterSuggestBinding binding; + private final AdapterSearchBinding binding; - public ViewHolder(@NonNull AdapterSuggestBinding binding) { + public ViewHolder(@NonNull AdapterSearchBinding binding) { super(binding.getRoot()); this.binding = binding; } diff --git a/app/src/leanback/res/layout/activity_detail.xml b/app/src/leanback/res/layout/activity_detail.xml index f026a10b6..911cbc14b 100644 --- a/app/src/leanback/res/layout/activity_detail.xml +++ b/app/src/leanback/res/layout/activity_detail.xml @@ -273,7 +273,7 @@ android:paddingBottom="8dp" /> result; public MutableLiveData player; + public MutableLiveData search; public ExecutorService executor; public SiteViewModel() { this.result = new MutableLiveData<>(); this.player = new MutableLiveData<>(); + this.search = new MutableLiveData<>(); } public MutableLiveData getResult() { @@ -179,7 +181,7 @@ public class SiteViewModel extends ViewModel { private void post(Site site, Result result) { if (result.getList().isEmpty()) return; for (Vod vod : result.getList()) vod.setSite(site); - this.result.postValue(result); + this.search.postValue(result); } private void execute(MutableLiveData result, Callable callable) {