From f3cc54fbcfd6e7e55a685b2c07f2273f68f720ea Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 27 Aug 2023 13:25:01 +0800 Subject: [PATCH] Fix focus bug --- .../tv/ui/activity/DetailActivity.java | 51 ++++++++++--------- .../tv/ui/presenter/FlagPresenter.java | 6 +++ app/src/leanback/res/layout/adapter_flag.xml | 1 + 3 files changed, 34 insertions(+), 24 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 213c6557c..844476279 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 FlagPresenter mFlagPresenter; private PartPresenter mPartPresenter; private CustomKeyDownVod mKeyDown; private ExecutorService mExecutor; @@ -320,7 +321,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void setRecyclerView() { mBinding.flag.setHorizontalSpacing(ResUtil.dp2px(8)); mBinding.flag.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - mBinding.flag.setAdapter(new ItemBridgeAdapter(mFlagAdapter = new ArrayObjectAdapter(new FlagPresenter(item -> setFlagActivated(item, false))))); + mBinding.flag.setAdapter(new ItemBridgeAdapter(mFlagAdapter = new ArrayObjectAdapter(mFlagPresenter = new FlagPresenter(item -> setFlagActivated(item, false))))); mBinding.episode.setHorizontalSpacing(ResUtil.dp2px(8)); mBinding.episode.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mBinding.episode.setAdapter(new ItemBridgeAdapter(mEpisodeAdapter = new ArrayObjectAdapter(mEpisodePresenter = new EpisodePresenter(this::setEpisodeActivated)))); @@ -342,18 +343,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mParseAdapter.setItems(ApiConfig.get().getParses(), null); } - private void setPlayerView() { - getIjk().setPlayer(mPlayers.getPlayer()); - mBinding.control.player.setText(mPlayers.getPlayerText()); - getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE); - getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE); - mBinding.control.reset.setText(ResUtil.getStringArray(R.array.select_reset)[Setting.getReset()]); - } - - private void setDecodeView() { - mBinding.control.decode.setText(mPlayers.getDecodeText()); - } - private void setVideoView() { mPlayers.set(getExo(), getIjk()); getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); @@ -361,17 +350,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis setSubtitle(16); } - private void setSubtitle(int size) { - getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size); - getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); - } - - private void setScale(int scale) { - getExo().setResizeMode(scale); - getIjk().setResizeMode(scale); - mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[scale]); - } - private void setViewModel() { mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mViewModel.result.observe(this, this::setDetail); @@ -390,6 +368,29 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis else getDetail(); } + private void setPlayerView() { + getIjk().setPlayer(mPlayers.getPlayer()); + mBinding.control.player.setText(mPlayers.getPlayerText()); + getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE); + getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE); + mBinding.control.reset.setText(ResUtil.getStringArray(R.array.select_reset)[Setting.getReset()]); + } + + private void setDecodeView() { + mBinding.control.decode.setText(mPlayers.getDecodeText()); + } + + private void setSubtitle(int size) { + getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size); + getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); + } + + private void setScale(int scale) { + getExo().setResizeMode(scale); + getIjk().setResizeMode(scale); + mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[scale]); + } + private void getDetail() { mViewModel.detailContent(getKey(), getId()); } @@ -423,10 +424,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis result.getUrl().set(mQualityAdapter.getPosition()); setUseParse(ApiConfig.hasParse() && ((result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1)); mPlayers.start(result, isUseParse(), getSite().isChangeable() ? getSite().getTimeout() : -1); + mFlagPresenter.setNextFocusDown(result.getUrl().isOnly() ? R.id.episode : R.id.quality); mEpisodePresenter.setNextFocusUp(result.getUrl().isOnly() ? R.id.flag : R.id.quality); mBinding.quality.setVisibility(result.getUrl().isOnly() ? View.GONE : View.VISIBLE); mBinding.control.parse.setVisibility(isUseParse() ? View.VISIBLE : View.GONE); notifyItemChanged(mBinding.episode, mEpisodeAdapter); + notifyItemChanged(mBinding.flag, mFlagAdapter); mQualityAdapter.addAll(result); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FlagPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FlagPresenter.java index 325b8465a..de5da7d80 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FlagPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FlagPresenter.java @@ -12,6 +12,7 @@ import com.fongmi.android.tv.databinding.AdapterFlagBinding; public class FlagPresenter extends Presenter { private final OnClickListener mListener; + private int nextFocusDown; public FlagPresenter(OnClickListener listener) { this.mListener = listener; @@ -21,6 +22,10 @@ public class FlagPresenter extends Presenter { void onItemClick(Flag item); } + public void setNextFocusDown(int nextFocusDown) { + this.nextFocusDown = nextFocusDown; + } + @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { return new ViewHolder(AdapterFlagBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); @@ -32,6 +37,7 @@ public class FlagPresenter extends Presenter { ViewHolder holder = (ViewHolder) viewHolder; holder.binding.text.setText(item.getShow()); holder.binding.text.setActivated(item.isActivated()); + holder.binding.text.setNextFocusDownId(nextFocusDown); setOnClickListener(holder, view -> mListener.onItemClick(item)); } diff --git a/app/src/leanback/res/layout/adapter_flag.xml b/app/src/leanback/res/layout/adapter_flag.xml index cc8698372..2efba1661 100644 --- a/app/src/leanback/res/layout/adapter_flag.xml +++ b/app/src/leanback/res/layout/adapter_flag.xml @@ -8,6 +8,7 @@ android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" + android:nextFocusDown="@id/episode" android:textColor="@color/text" android:textSize="16sp" tools:text="泥巴" /> \ No newline at end of file