From ab8efd5a041aba71a21223fe6ca95865c3e85db6 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 4 Feb 2023 00:23:04 +0800 Subject: [PATCH] [mobile] support filter - part 2 --- .../android/tv/ui/custom/CustomScroller.java | 13 +++-- .../android/tv/ui/adapter/TypeAdapter.java | 2 +- .../android/tv/ui/adapter/ValueAdapter.java | 8 +++- .../android/tv/ui/adapter/VodAdapter.java | 2 +- .../tv/ui/fragment/child/TypeFragment.java | 47 ++++++++----------- app/src/mobile/res/layout/fragment_type.xml | 1 + 6 files changed, 40 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java index cdfc6f252..dfabfc7c8 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java @@ -1,9 +1,10 @@ package com.fongmi.android.tv.ui.custom; import androidx.annotation.NonNull; +import androidx.core.widget.NestedScrollView; import androidx.recyclerview.widget.RecyclerView; -public class CustomScroller extends RecyclerView.OnScrollListener { +public class CustomScroller extends RecyclerView.OnScrollListener implements NestedScrollView.OnScrollChangeListener { private final Callback callback; private boolean loading; @@ -17,8 +18,14 @@ public class CustomScroller extends RecyclerView.OnScrollListener { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - if (isLoading() || recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) return; - if (!recyclerView.canScrollVertically(1) && dy > 0 && callback != null) callback.onLoadMore(String.valueOf(++page)); + if (isLoading() || recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE || callback == null) return; + if (!recyclerView.canScrollVertically(1) && dy > 0) callback.onLoadMore(String.valueOf(++page)); + } + + @Override + public void onScrollChange(@NonNull NestedScrollView nestedScrollView, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { + if (isLoading() || callback == null) return; + if (!nestedScrollView.canScrollVertically(1) && scrollY - oldScrollY > 0) callback.onLoadMore(String.valueOf(++page)); } public void reset() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java index 171c2012f..260b32075 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java @@ -99,6 +99,6 @@ public class TypeAdapter extends RecyclerView.Adapter { holder.binding.text.setActivated(item.isActivated()); holder.binding.text.setCompoundDrawablePadding(ResUtil.dp2px(4)); holder.binding.text.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, item.getIcon(), 0); - holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(position, item)); + holder.binding.getRoot().setOnClickListener(view -> mListener.onItemClick(position, item)); } } \ No newline at end of file diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/ValueAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/ValueAdapter.java index 017a330f0..5199eeae4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/ValueAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/ValueAdapter.java @@ -53,6 +53,12 @@ public class ValueAdapter extends RecyclerView.Adapter Filter.Value item = mItems.get(position); holder.binding.text.setText(item.getN()); holder.binding.text.setActivated(item.isActivated()); - holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(mKey, item)); + holder.binding.getRoot().setOnClickListener(view -> onItemClick(item)); + } + + private void onItemClick(Filter.Value value) { + for (Filter.Value item : mItems) item.setActivated(value); + notifyItemRangeChanged(0, getItemCount()); + mListener.onItemClick(mKey, value); } } \ No newline at end of file diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java index a845452c8..a6e3cafb2 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java @@ -84,7 +84,7 @@ public class VodAdapter extends RecyclerView.Adapter { holder.binding.site.setVisibility(item.getSiteVisible()); holder.binding.year.setVisibility(item.getYearVisible()); holder.binding.remark.setVisibility(item.getRemarkVisible()); - holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(item)); + holder.binding.getRoot().setOnClickListener(view -> mListener.onItemClick(item)); holder.binding.getRoot().setOnLongClickListener(v -> mListener.onLongClick(item)); ImgUtil.load(item.getVodPic(), holder.binding.image); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java index de996c5a4..f4990a12b 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java @@ -28,7 +28,7 @@ import java.util.List; public class TypeFragment extends BaseFragment implements CustomScroller.Callback, ValueAdapter.OnClickListener, VodAdapter.OnClickListener { - private HashMap mExtend; + private HashMap mExtends; private FragmentTypeBinding mBinding; private FilterAdapter mFilterAdapter; private CustomScroller mScroller; @@ -68,7 +68,8 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac @Override protected void initView() { mTypeIds = new ArrayList<>(); - mExtend = new HashMap<>(); + mExtends = new HashMap<>(); + mScroller = new CustomScroller(this); mFilters = Filter.arrayFrom(getFilter()); mBinding.progressLayout.showProgress(); setRecyclerView(); @@ -76,12 +77,16 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac getVideo(); } + @Override + protected void initEvent() { + mBinding.scroller.setOnScrollChangeListener(mScroller); + } + private void setRecyclerView() { mBinding.filter.setHasFixedSize(true); mBinding.filter.setAdapter(mFilterAdapter = new FilterAdapter(this)); mBinding.recycler.setHasFixedSize(true); mBinding.recycler.setAdapter(mVodAdapter = new VodAdapter(this)); - mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this)); mBinding.recycler.setLayoutManager(new GridLayoutManager(getContext(), 3)); mBinding.recycler.addItemDecoration(new SpaceItemDecoration(3, 16)); } @@ -110,24 +115,23 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac if (isFolder()) mTypeIds.add(typeId); if (isFolder() && !mOpen) mBinding.recycler.scrollToPosition(0); if (page.equals("1")) mVodAdapter.clear(); - mViewModel.categoryContent(ApiConfig.get().getHome().getKey(), typeId, page, true, mExtend); + mViewModel.categoryContent(ApiConfig.get().getHome().getKey(), typeId, page, true, mExtends); } - private void addFilter() { + private void showFilter() { + mBinding.scroller.smoothScrollTo(0, 0); mFilterAdapter.addAll(mFilters); } - private void clearFilter() { + private void hideFilter() { mFilterAdapter.clear(); } - /*private void setClick(ArrayObjectAdapter adapter, String key, Filter.Value item) { - for (int i = 0; i < adapter.size(); i++) ((Filter.Value) adapter.get(i)).setActivated(item); - adapter.notifyArrayItemRangeChanged(0, adapter.size()); - mExtend.put(key, item.getV()); - if (isFolder()) refresh(1); - else getVideo(); - }*/ + public void toggleFilter(boolean open) { + if (open) showFilter(); + else hideFilter(); + mOpen = open; + } private void refresh(int num) { String typeId = mTypeIds.get(mTypeIds.size() - num); @@ -135,20 +139,6 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac getVideo(typeId, "1"); } - public void toggleFilter(boolean open) { - if (open) addFilter(); - else clearFilter(); - mOpen = open; - } - - public boolean canGoBack() { - return mTypeIds.size() > 1; - } - - public void goBack() { - refresh(2); - } - @Override public void onLoadMore(String page) { if (isFolder()) return; @@ -158,6 +148,9 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac @Override public void onItemClick(String key, Filter.Value item) { + mExtends.put(key, item.getV()); + if (isFolder()) refresh(1); + else getVideo(); } @Override diff --git a/app/src/mobile/res/layout/fragment_type.xml b/app/src/mobile/res/layout/fragment_type.xml index cb1ca6c6d..2c947e8e6 100644 --- a/app/src/mobile/res/layout/fragment_type.xml +++ b/app/src/mobile/res/layout/fragment_type.xml @@ -6,6 +6,7 @@ android:layout_height="match_parent">