From 337ad28dfec4de383baa900a036168d83d671f4e Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 23 Aug 2023 22:45:41 +0800 Subject: [PATCH] [leanback] fix focus --- .../fongmi/android/tv/ui/activity/DetailActivity.java | 10 +++++++--- .../fongmi/android/tv/ui/presenter/ArrayPresenter.java | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 09a93080d..832625a0e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -106,6 +106,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private ArrayObjectAdapter mPartAdapter; private ActivityDetailBinding mBinding; private QualityAdapter mQualityAdapter; + private ArrayPresenter mArrayPresenter; private PartPresenter mPartPresenter; private CustomKeyDownVod mKeyDown; private ExecutorService mExecutor; @@ -325,7 +326,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.quality.setAdapter(mQualityAdapter = new QualityAdapter(this::setQualityActivated)); mBinding.array.setHorizontalSpacing(ResUtil.dp2px(8)); mBinding.array.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - mBinding.array.setAdapter(new ItemBridgeAdapter(mArrayAdapter = new ArrayObjectAdapter(new ArrayPresenter(this)))); + mBinding.array.setAdapter(new ItemBridgeAdapter(mArrayAdapter = new ArrayObjectAdapter(mArrayPresenter = new ArrayPresenter(this)))); mBinding.part.setHorizontalSpacing(ResUtil.dp2px(8)); mBinding.part.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mBinding.part.setAdapter(new ItemBridgeAdapter(mPartAdapter = new ArrayObjectAdapter(mPartPresenter = new PartPresenter(item -> initSearch(item, false))))); @@ -486,7 +487,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.episode.setVisibility(items.isEmpty() ? View.GONE : View.VISIBLE); mEpisodeAdapter.setItems(items, null); setArray(items.size()); - updateFocus(); } private void seamless(Flag flag, boolean force) { @@ -536,8 +536,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void updateFocus() { + mArrayPresenter.setNextFocusUp(isVisible(mBinding.quality) ? R.id.quality : R.id.episode); + mPartPresenter.setNextFocusUp(isVisible(mBinding.array) ? R.id.array : isVisible(mBinding.quality) ? R.id.quality : R.id.episode); mEpisodePresenter.setNextFocusDown(isVisible(mBinding.quality) ? R.id.quality : isVisible(mBinding.array) ? R.id.array : R.id.part); - mPartPresenter.setNextFocusUp(isVisible(mBinding.quality) ? R.id.quality : isVisible(mBinding.array) ? R.id.array : R.id.episode); + notifyItemChanged(mBinding.episode, mEpisodeAdapter); + notifyItemChanged(mBinding.array, mArrayAdapter); + notifyItemChanged(mBinding.part, mPartAdapter); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java index 86604c34e..f82277276 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java @@ -17,6 +17,7 @@ public class ArrayPresenter extends Presenter { private final String backward; private final String forward; private final String reverse; + private int nextFocus; public ArrayPresenter(OnClickListener listener) { this.mListener = listener; @@ -32,6 +33,10 @@ public class ArrayPresenter extends Presenter { void onRevPlay(TextView view); } + public void setNextFocusUp(int nextFocus) { + this.nextFocus = nextFocus; + } + @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { return new ViewHolder(AdapterArrayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); @@ -42,6 +47,7 @@ public class ArrayPresenter extends Presenter { ViewHolder holder = (ViewHolder) viewHolder; String text = object.toString(); holder.binding.text.setText(text); + holder.binding.text.setNextFocusUpId(nextFocus); if (text.equals(reverse)) setOnClickListener(holder, view -> mListener.onRevSort()); else if (text.equals(backward) || text.equals(forward)) setOnClickListener(holder, view -> mListener.onRevPlay(holder.binding.text)); else setOnClickListener(holder, null);