diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomVerticalGridView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomVerticalGridView.java index f6ca6fd0b..577ab0c1f 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomVerticalGridView.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomVerticalGridView.java @@ -19,6 +19,8 @@ import java.util.List; public class CustomVerticalGridView extends VerticalGridView { private List views; + private boolean pressDown; + private boolean pressUp; private boolean moveTop; public CustomVerticalGridView(@NonNull Context context) { @@ -40,11 +42,8 @@ public class CustomVerticalGridView extends VerticalGridView { setOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @Override public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable ViewHolder child, int position, int subposition) { - if (position == 0) { - for (View view : views) view.setVisibility(View.VISIBLE); - } else if (position > 0) { - for (View view : views) view.setVisibility(View.GONE); - } + if (pressDown && position == 1) hideHeader(); + if (pressUp && position == 0) showHeader(); } }); } @@ -57,18 +56,28 @@ public class CustomVerticalGridView extends VerticalGridView { this.moveTop = moveTop; } + public void hideHeader() { + if (views != null) for (View view : views) view.setVisibility(View.GONE); + } + + public void showHeader() { + if (views != null) for (View view : views) view.setVisibility(View.VISIBLE); + } + @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() != KeyEvent.ACTION_DOWN) return super.dispatchKeyEvent(event); - if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && moveTop) return moveToTop(); + if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) return moveTop && moveToTop(); + pressUp = event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP; + pressDown = event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN; return super.dispatchKeyEvent(event); } public boolean moveToTop() { if (views == null || getSelectedPosition() == 0 || getAdapter() == null || getAdapter().getItemCount() == 0) return false; for (View view : views) if (view.getId() == R.id.recycler) view.requestFocus(); - for (View view : views) view.setVisibility(View.VISIBLE); - setSelectedPosition(0); + scrollToPosition(0); + showHeader(); 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 ab804e95d..d5a1e6082 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 @@ -140,6 +140,8 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback } private void checkPosition() { + if (mPage != null && mPage.getPosition() > 0) mBinding.recycler.hideHeader(); + if (mPage != null && mPage.getPosition() < 1) mBinding.recycler.showHeader(); if (mPage != null) mBinding.recycler.setSelectedPosition(mPage.getPosition()); else if (isFolder() && !mOpen) mBinding.recycler.moveToTop(); mPage = null;