Fix focus and real manual play

pull/149/head
FongMi 3 years ago
parent dd2e272c46
commit 6cf9f4b9b0
  1. 36
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  2. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  3. 23
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.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<Episode> 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

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

@ -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() {

@ -26,7 +26,7 @@ public class FlagAdapter extends RecyclerView.Adapter<FlagAdapter.ViewHolder> {
public interface OnClickListener {
void onItemClick(Flag item, boolean force);
void onItemClick(Flag item);
}
public void addAll(List<Flag> items) {
@ -81,7 +81,7 @@ public class FlagAdapter extends RecyclerView.Adapter<FlagAdapter.ViewHolder> {
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 {

Loading…
Cancel
Save