Support quick search - part 2

pull/123/head
FongMi 3 years ago
parent 24cda8aee2
commit a113cfa960
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java
  2. 30
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  3. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SearchPresenter.java
  4. 2
      app/src/leanback/res/layout/activity_detail.xml
  5. 0
      app/src/leanback/res/layout/adapter_search.xml
  6. 4
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.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();

@ -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<Vod> items) {
private void setSearch(List<Vod> items) {
String keyword = mBinding.part.getTag().toString();
Iterator<Vod> 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

@ -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;
}

@ -273,7 +273,7 @@
android:paddingBottom="8dp" />
<androidx.leanback.widget.HorizontalGridView
android:id="@+id/suggest"
android:id="@+id/search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"

@ -30,11 +30,13 @@ public class SiteViewModel extends ViewModel {
public MutableLiveData<Result> result;
public MutableLiveData<Result> player;
public MutableLiveData<Result> search;
public ExecutorService executor;
public SiteViewModel() {
this.result = new MutableLiveData<>();
this.player = new MutableLiveData<>();
this.search = new MutableLiveData<>();
}
public MutableLiveData<Result> 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> result, Callable<Result> callable) {

Loading…
Cancel
Save