diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 02214b3c7..5f4d069da 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -324,7 +324,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mBinding.flag.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @Override public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) { - if (mFlagAdapter.size() > 0) setFlagActivated((Flag) mFlagAdapter.get(position), false); + if (mFlagAdapter.size() > 0) setFlagActivated((Flag) mFlagAdapter.get(position)); } }); mBinding.array.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @@ -338,7 +338,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void setRecyclerView() { mBinding.flag.setHorizontalSpacing(ResUtil.dp2px(8)); mBinding.flag.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - mBinding.flag.setAdapter(new ItemBridgeAdapter(mFlagAdapter = new ArrayObjectAdapter(mFlagPresenter = new FlagPresenter(item -> setFlagActivated(item, false))))); + mBinding.flag.setAdapter(new ItemBridgeAdapter(mFlagAdapter = new ArrayObjectAdapter(mFlagPresenter = new FlagPresenter(this::setFlagActivated)))); 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)))); @@ -518,14 +518,14 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List view.setTag(text); } - private void setFlagActivated(Flag item, boolean force) { + private void setFlagActivated(Flag item) { if (mFlagAdapter.size() == 0 || item.isActivated()) return; for (int i = 0; i < mFlagAdapter.size(); i++) ((Flag) mFlagAdapter.get(i)).setActivated(item); mBinding.flag.setSelectedPosition(mFlagAdapter.indexOf(item)); notifyItemChanged(mBinding.flag, mFlagAdapter); setEpisodeAdapter(item.getEpisodes()); setQualityVisible(false); - seamless(item, force); + seamless(item); } private void setEpisodeAdapter(List items) { @@ -535,14 +535,20 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List updateFocus(); } - private void seamless(Flag flag, boolean force) { - if (Setting.getFlag() == 1 && (mHistory.isNew() || !force)) return; + private void seamless(Flag flag) { Episode episode = flag.find(mHistory.getVodRemarks(), getMark().isEmpty()); setQualityVisible(episode != null && episode.isActivated() && mQualityAdapter.getItemCount() > 1); if (episode == null || episode.isActivated()) return; - mHistory.setVodRemarks(episode.getName()); - setEpisodeActivated(episode); - hidePreview(); + if (Setting.getFlag() == 1) { + episode.setActivated(true); + mBinding.episode.requestFocus(); + mBinding.episode.setSelectedPosition(getEpisodePosition()); + episode.setActivated(false); + } else { + mHistory.setVodRemarks(episode.getName()); + setEpisodeActivated(episode); + hidePreview(); + } } private void setEpisodeActivated(Episode item) { @@ -839,7 +845,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void onToggle() { if (isVisible(mBinding.control.getRoot())) hideControl(); - else showControl(mFocus2 == null ? mBinding.control.next : mFocus2); + else showControl(getFocus2()); } private void showProgress() { @@ -961,7 +967,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (empty) { ErrorEvent.episode(); } else { - setFlagActivated(mHistory.getFlag(), true); + setFlagActivated(mHistory.getFlag()); if (mHistory.isRevSort()) reverseEpisode(true); } } @@ -1215,7 +1221,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void nextFlag(int position) { Flag flag = (Flag) mFlagAdapter.get(position + 1); Notify.show(getString(R.string.play_switch_flag, flag.getFlag())); - setFlagActivated(flag, true); + setFlagActivated(flag); } private void nextSite() { @@ -1297,6 +1303,10 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List this.toggleCount = 0; } + private View getFocus2() { + return mFocus2 == null || mFocus2 == mBinding.control.opening || mFocus2 == mBinding.control.ending ? mBinding.control.next : mFocus2; + } + @Override public boolean dispatchKeyEvent(KeyEvent event) { if (isFullscreen() && Utils.isMenuKey(event)) onToggle(); @@ -1375,7 +1385,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Override public void onKeyDown() { - showControl(mFocus2 == null ? mBinding.control.next : mFocus2); + showControl(getFocus2()); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 6bc1db682..81a062e29 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -201,7 +201,7 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL if (empty) { ErrorEvent.episode(); } else { - onItemClick(mHistory.getFlag(), true); + onItemClick(mHistory.getFlag()); if (mHistory.isRevSort()) reverseEpisode(true); } } @@ -222,7 +222,7 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL } @Override - public void onItemClick(Flag item, boolean force) { + public void onItemClick(Flag item) { if (item.isActivated()) return; mFlagAdapter.setActivated(item); mBinding.flag.scrollToPosition(mFlagAdapter.getPosition()); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 359cf81c3..79700b30e 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -537,13 +537,13 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } @Override - public void onItemClick(Flag item, boolean force) { + public void onItemClick(Flag item) { if (item.isActivated()) return; mFlagAdapter.setActivated(item); mBinding.flag.scrollToPosition(mFlagAdapter.getPosition()); setEpisodeAdapter(item.getEpisodes()); setQualityVisible(false); - seamless(item, force); + seamless(item); } @Override @@ -588,14 +588,19 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mEpisodeAdapter.addAll(items); } - private void seamless(Flag flag, boolean force) { - if (Setting.getFlag() == 1 && (mHistory.isNew() || !force)) return; + private void seamless(Flag flag) { Episode episode = flag.find(mHistory.getVodRemarks(), getMark().isEmpty()); setQualityVisible(episode != null && episode.isActivated() && mQualityAdapter.getItemCount() > 1); if (episode == null || episode.isActivated()) return; - mHistory.setVodRemarks(episode.getName()); - onItemClick(episode); - hidePreview(); + if (Setting.getFlag() == 1) { + episode.setActivated(true); + mBinding.episode.scrollToPosition(mEpisodeAdapter.getPosition()); + episode.setActivated(false); + } else { + mHistory.setVodRemarks(episode.getName()); + onItemClick(episode); + hidePreview(); + } } private void setQualityVisible(boolean visible) { @@ -998,7 +1003,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo if (empty) { ErrorEvent.episode(); } else { - onItemClick(mHistory.getFlag(), true); + onItemClick(mHistory.getFlag()); if (mHistory.isRevSort()) reverseEpisode(true); } } @@ -1299,7 +1304,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private void nextFlag(int position) { Flag flag = mFlagAdapter.get(position + 1); Notify.show(getString(R.string.play_switch_flag, flag.getFlag())); - onItemClick(flag, true); + onItemClick(flag); } private void nextSite() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java index f5efb921a..6107fc7b9 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java @@ -26,7 +26,7 @@ public class FlagAdapter extends RecyclerView.Adapter { public interface OnClickListener { - void onItemClick(Flag item, boolean force); + void onItemClick(Flag item); } public void addAll(List items) { @@ -81,7 +81,7 @@ public class FlagAdapter extends RecyclerView.Adapter { Flag item = mItems.get(position); holder.binding.text.setText(item.getShow()); holder.binding.text.setActivated(item.isActivated()); - holder.binding.text.setOnClickListener(v -> mListener.onItemClick(item, false)); + holder.binding.text.setOnClickListener(v -> mListener.onItemClick(item)); } static class ViewHolder extends RecyclerView.ViewHolder {