diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Collect.java b/app/src/main/java/com/fongmi/android/tv/bean/Collect.java index 0a09307bb..b8db64d34 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Collect.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Collect.java @@ -65,7 +65,7 @@ public class Collect implements Parcelable, Diffable { public boolean equals(@Nullable Object obj) { if (this == obj) return true; if (!(obj instanceof Collect it)) return false; - return getSite().equals(it.getSite()) && activated == it.activated; + return getSite().equals(it.getSite()); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index dc8c33cf6..6a0d52cec 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -49,11 +49,20 @@ public class SiteViewModel extends ViewModel { private ExecutorService executor; public SiteViewModel() { - this.episode = new MutableLiveData<>(); - this.result = new MutableLiveData<>(); - this.player = new MutableLiveData<>(); - this.search = new MutableLiveData<>(); - this.action = new MutableLiveData<>(); + episode = new MutableLiveData<>(); + result = new MutableLiveData<>(); + player = new MutableLiveData<>(); + search = new MutableLiveData<>(); + action = new MutableLiveData<>(); + } + + public SiteViewModel init() { + search.setValue(null); + result.setValue(null); + player.setValue(null); + action.setValue(null); + episode.setValue(null); + return this; } public void setEpisode(Episode value) { @@ -271,7 +280,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.search.postValue(result); + search.postValue(result); } private void execute(MutableLiveData result, Callable callable) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java index 5745fd013..1f894ffc9 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java @@ -91,18 +91,9 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle } private void setViewModel() { - mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); - mViewModel.search.observe(this, result -> { - if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addItems(result.getList()); - mCollectAdapter.addItem(Collect.create(result.getList())); - mCollectAdapter.add(result.getList()); - }); - mViewModel.result.observe(this, result -> { - boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite()); - if (same) mCollectAdapter.getActivated().getList().addAll(result.getList()); - if (same) mSearchAdapter.addItems(result.getList()); - mScroller.endLoading(result); - }); + mViewModel = new ViewModelProvider(this).get(SiteViewModel.class).init(); + mViewModel.search.observe(this, this::setCollect); + mViewModel.result.observe(this, this::setSearch); } private List getSites() { @@ -112,9 +103,11 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle } private void search() { + if (mExecutor != null) mExecutor.shutdownNow(); mExecutor = new PauseExecutor(20); - mCollectAdapter.setItems(List.of(Collect.all())); - for (Site site : getSites()) mExecutor.execute(() -> search(site, getKeyword())); + mCollectAdapter.setItems(List.of(Collect.all()), () -> { + for (Site site : getSites()) mExecutor.execute(() -> search(site, getKeyword())); + }); } private void search(Site site, String keyword) { @@ -124,6 +117,21 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle } } + private void setCollect(Result result) { + if (result == null) return; + if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addItems(result.getList()); + mCollectAdapter.addItem(Collect.create(result.getList())); + mCollectAdapter.add(result.getList()); + } + + private void setSearch(Result result) { + if (result == null) return; + boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite()); + if (same) mCollectAdapter.getActivated().getList().addAll(result.getList()); + if (same) mSearchAdapter.addItems(result.getList()); + mScroller.endLoading(result); + } + @Override public void onItemClick(int position, Collect item) { mSearchAdapter.setItems(item.getList(), () -> mBinding.recycler.scrollToPosition(0));