[leanback] optimize folder ux

pull/137/head
FongMi 3 years ago
parent ae7d9831a6
commit e89216d709
  1. 25
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomVerticalGridView.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java

@ -19,6 +19,8 @@ import java.util.List;
public class CustomVerticalGridView extends VerticalGridView {
private List<View> 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;
}
}

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

Loading…
Cancel
Save