From b0369c2dee9c89c41d8e0b0bbbc579e2980d9638 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 12 Aug 2022 15:09:57 +0800 Subject: [PATCH] Improve filter UX --- .../android/tv/ui/activity/VodActivity.java | 31 +++++++++++++------ .../android/tv/ui/custom/ConfigDialog.java | 6 ++++ .../ui/custom/CustomHorizontalGridView.java | 11 +------ app/src/leanback/res/layout/dialog_config.xml | 24 +++++++++----- .../com/fongmi/android/tv/bean/Class.java | 5 +++ 5 files changed, 51 insertions(+), 26 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java index e03fd7962..74c6e36e3 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.activity; import android.app.Activity; import android.content.Intent; +import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; @@ -65,6 +66,7 @@ public class VodActivity extends BaseActivity { @Override protected void initEvent() { + mTypePresenter.setOnClickListener(this::updateFilter); mBinding.pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { @@ -81,12 +83,6 @@ public class VodActivity extends BaseActivity { mOldView.setActivated(true); } }); - mTypePresenter.setOnClickListener(item -> { - int index = mResult.getTypes().indexOf(item); - if (index != mBinding.pager.getCurrentItem()) mBinding.pager.setCurrentItem(index); - else item.setFilter(item.getFilter() == null ? null : !item.getFilter()); - if (item.getFilter() != null) updateFilter(item.getFilter()); - }); } private void setRecyclerView() { @@ -107,9 +103,26 @@ public class VodActivity extends BaseActivity { mBinding.pager.setAdapter(mPageAdapter = new PageAdapter(getSupportFragmentManager())); } - private void updateFilter(boolean filter) { - mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size()); - getVodFragment().toggleFilter(filter); + private void updateFilter(Class item) { + if (item.getFilter() != null) { + item.toggleFilter(); + getVodFragment().toggleFilter(item.getFilter()); + mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size()); + } + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + boolean isMenuUp = event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == KeyEvent.KEYCODE_MENU; + if (isMenuUp) updateFilter(mResult.getTypes().get(mBinding.pager.getCurrentItem())); + return super.dispatchKeyEvent(event); + } + + @Override + public void onBackPressed() { + Class item = mResult.getTypes().get(mBinding.pager.getCurrentItem()); + if (item.getFilter()) updateFilter(item); + else super.onBackPressed(); } private VodFragment getVodFragment() { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/ConfigDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/ConfigDialog.java index 2e4a167b7..a7516737a 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/ConfigDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/ConfigDialog.java @@ -12,6 +12,7 @@ import androidx.appcompat.app.AlertDialog; import com.fongmi.android.tv.databinding.DialogConfigBinding; import com.fongmi.android.tv.event.ServerEvent; import com.fongmi.android.tv.server.Server; +import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.QRCode; import com.fongmi.android.tv.utils.ResUtil; @@ -57,6 +58,7 @@ public class ConfigDialog implements DialogInterface.OnDismissListener { } private void initEvent() { + binding.history.setOnClickListener(this::onHistory); binding.positive.setOnClickListener(this::onPositive); binding.negative.setOnClickListener(this::onNegative); binding.text.setOnEditorActionListener((textView, actionId, event) -> { @@ -75,6 +77,10 @@ public class ConfigDialog implements DialogInterface.OnDismissListener { dialog.dismiss(); } + private void onHistory(View view) { + Notify.show("尚未開發"); + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onServerEvent(ServerEvent event) { if (event.getType() != ServerEvent.Type.API) return; 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 793c998ee..266a6f777 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 @@ -55,16 +55,7 @@ public class CustomHorizontalGridView extends HorizontalGridView { } @Override - public boolean dispatchKeyEvent(KeyEvent event) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { - if (getSelectedPosition() != 0) { - if (getVisibility() != View.VISIBLE) setVisibility(View.VISIBLE); - setSelectedPositionSmooth(0); - return true; - } - } - } + public boolean dispatchKeyEvent(@NonNull KeyEvent event) { return super.dispatchKeyEvent(event) || executeKeyEvent(event); } diff --git a/app/src/leanback/res/layout/dialog_config.xml b/app/src/leanback/res/layout/dialog_config.xml index 411b533cf..51a954463 100644 --- a/app/src/leanback/res/layout/dialog_config.xml +++ b/app/src/leanback/res/layout/dialog_config.xml @@ -29,36 +29,46 @@ android:layout_alignStart="@+id/text" android:layout_alignBottom="@+id/code" android:layout_marginTop="16dp" + android:gravity="end" android:orientation="horizontal"> -