From 42a0a78910ef26cf06ed793af41f9d2ad9fb860a Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 18 Sep 2022 00:17:29 +0800 Subject: [PATCH] Fix filter bug --- .../tv/ui/activity/CollectActivity.java | 1 - .../ui/custom/CustomHorizontalGridView.java | 15 ++-------- .../tv/ui/custom/CustomRowPresenter.java | 9 +++++- .../android/tv/ui/custom/CustomViewPager.java | 29 ++++++------------- .../android/tv/ui/fragment/VodFragment.java | 6 +++- .../tv/ui/presenter/HistoryPresenter.java | 2 -- .../android/tv/ui/presenter/VodPresenter.java | 4 --- .../android/tv/ui/custom/CustomScroller.java | 14 +-------- 8 files changed, 26 insertions(+), 54 deletions(-) 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 b4355002a..23229f2bd 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 @@ -72,7 +72,6 @@ public class CollectActivity extends BaseActivity { @Override protected void initEvent() { - mBinding.recycler.addOnScrollListener(new CustomScroller()); mBinding.pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomHorizontalGridView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomHorizontalGridView.java index 716c573f5..2d691cf0e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomHorizontalGridView.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomHorizontalGridView.java @@ -60,18 +60,9 @@ public class CustomHorizontalGridView extends HorizontalGridView { } public boolean executeKeyEvent(@NonNull KeyEvent event) { - boolean handled = false; - if (event.getAction() == KeyEvent.ACTION_DOWN) { - switch (event.getKeyCode()) { - case KeyEvent.KEYCODE_DPAD_LEFT: - handled = arrowScroll(FOCUS_LEFT); - break; - case KeyEvent.KEYCODE_DPAD_RIGHT: - handled = arrowScroll(FOCUS_RIGHT); - break; - } - } - return handled; + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) return arrowScroll(FOCUS_LEFT); + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) return arrowScroll(FOCUS_RIGHT); + return false; } public boolean arrowScroll(int direction) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomRowPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomRowPresenter.java index d8c48a54e..89cc52e67 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomRowPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomRowPresenter.java @@ -12,14 +12,21 @@ import com.fongmi.android.tv.utils.ResUtil; public class CustomRowPresenter extends ListRowPresenter { private final int spacing; + private final int strategy; public CustomRowPresenter(int spacing) { this(spacing, FocusHighlight.ZOOM_FACTOR_MEDIUM); } + @SuppressLint("RestrictedApi") public CustomRowPresenter(int spacing, int focusZoomFactor) { + this(spacing, focusZoomFactor, HorizontalGridView.FOCUS_SCROLL_ITEM); + } + + public CustomRowPresenter(int spacing, int focusZoomFactor, int strategy) { super(focusZoomFactor); this.spacing = spacing; + this.strategy = strategy; setShadowEnabled(false); setSelectEffectEnabled(false); setKeepChildForeground(false); @@ -30,7 +37,7 @@ public class CustomRowPresenter extends ListRowPresenter { protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) { super.initializeRowViewHolder(holder); ViewHolder vh = (ViewHolder) holder; + vh.getGridView().setFocusScrollStrategy(strategy); vh.getGridView().setHorizontalSpacing(ResUtil.dp2px(spacing)); - vh.getGridView().setFocusScrollStrategy(HorizontalGridView.FOCUS_SCROLL_ITEM); } } \ No newline at end of file diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomViewPager.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomViewPager.java index 4fdabc5bd..d14b586c8 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomViewPager.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomViewPager.java @@ -44,25 +44,14 @@ public class CustomViewPager extends ViewPager { } @Override - public boolean dispatchKeyEvent(KeyEvent event) { - return super.dispatchKeyEvent(event) || executeKeyEvent(event); - } - public boolean executeKeyEvent(@NonNull KeyEvent event) { - boolean handled = false; - if (event.getAction() == KeyEvent.ACTION_DOWN) { - switch (event.getKeyCode()) { - case KeyEvent.KEYCODE_DPAD_LEFT: - handled = arrowScroll(FOCUS_LEFT); - break; - case KeyEvent.KEYCODE_DPAD_RIGHT: - handled = arrowScroll(FOCUS_RIGHT); - break; - } - } - return handled; + if (findFocus() instanceof TextView) return false; + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) return arrowScroll(FOCUS_LEFT); + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) return arrowScroll(FOCUS_RIGHT); + return false; } + @Override public boolean arrowScroll(int direction) { boolean handled = false; View currentFocused = findFocus(); @@ -100,14 +89,14 @@ public class CustomViewPager extends ViewPager { } } } else if (direction == FOCUS_LEFT) { - if (getCurrentItem() == 0 || currentFocused instanceof TextView) { + if (getCurrentItem() == 0) { shake(currentFocused); handled = true; } else { handled = pageLeft(); } } else if (direction == FOCUS_RIGHT) { - if (getAdapter() != null && getCurrentItem() == getAdapter().getCount() - 1 || currentFocused instanceof TextView) { + if (getAdapter() != null && getCurrentItem() == getAdapter().getCount() - 1) { shake(currentFocused); handled = true; } else { @@ -144,7 +133,7 @@ public class CustomViewPager extends ViewPager { return outRect; } - boolean pageLeft() { + private boolean pageLeft() { if (getCurrentItem() > 0) { setCurrentItem(getCurrentItem() - 1, false); return true; @@ -152,7 +141,7 @@ public class CustomViewPager extends ViewPager { return false; } - boolean pageRight() { + private boolean pageRight() { if (getAdapter() != null && getCurrentItem() < getAdapter().getCount() - 1) { setCurrentItem(getCurrentItem() + 1, false); return true; diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 0336df843..3c98c23cf 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -1,5 +1,6 @@ package com.fongmi.android.tv.ui.fragment; +import android.annotation.SuppressLint; import android.os.Bundle; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -7,6 +8,8 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.leanback.widget.ArrayObjectAdapter; +import androidx.leanback.widget.FocusHighlight; +import androidx.leanback.widget.HorizontalGridView; import androidx.leanback.widget.ItemBridgeAdapter; import androidx.leanback.widget.ListRow; import androidx.lifecycle.ViewModelProvider; @@ -82,10 +85,11 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback getVideo(); } + @SuppressLint("RestrictedApi") private void setRecyclerView() { CustomSelector selector = new CustomSelector(); selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class); - selector.addPresenter(ListRow.class, new CustomRowPresenter(8), FilterPresenter.class); + selector.addPresenter(ListRow.class, new CustomRowPresenter(8, FocusHighlight.ZOOM_FACTOR_NONE, HorizontalGridView.FOCUS_SCROLL_ALIGNED), FilterPresenter.class); mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this)); mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector))); mBinding.recycler.setHeader(getActivity().findViewById(R.id.recycler)); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java index 98ba93e62..6f4f2a864 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java @@ -83,8 +83,6 @@ public class HistoryPresenter extends Presenter { @Override public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { - ViewHolder holder = (ViewHolder) viewHolder; - Glide.with(App.get()).clear(holder.binding.image); } public static class ViewHolder extends Presenter.ViewHolder { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java index b5f927cc0..e6907df33 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java @@ -6,8 +6,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.leanback.widget.Presenter; -import com.bumptech.glide.Glide; -import com.fongmi.android.tv.App; import com.fongmi.android.tv.bean.Vod; import com.fongmi.android.tv.databinding.AdapterVodBinding; import com.fongmi.android.tv.utils.ImgUtil; @@ -64,8 +62,6 @@ public class VodPresenter extends Presenter { @Override public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { - ViewHolder holder = (ViewHolder) viewHolder; - Glide.with(App.get()).clear(holder.binding.image); } public static class ViewHolder extends Presenter.ViewHolder { 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 9d3fcc676..6c6c3cc72 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 @@ -3,29 +3,17 @@ package com.fongmi.android.tv.ui.custom; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import com.bumptech.glide.Glide; -import com.fongmi.android.tv.App; - public class CustomScroller extends RecyclerView.OnScrollListener { - private Callback callback; + private final Callback callback; private boolean loading; private int page; - public CustomScroller() { - } - public CustomScroller(Callback callback) { this.callback = callback; this.page = 1; } - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE) Glide.with(App.get()).resumeRequests(); - else Glide.with(App.get()).pauseRequests(); - } - @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { if (isLoading() || recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) return;