Fix focus bug

pull/137/head
FongMi 3 years ago
parent 50dd5b36b2
commit f3cc54fbcf
  1. 51
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FlagPresenter.java
  3. 1
      app/src/leanback/res/layout/adapter_flag.xml

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

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

@ -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="泥巴" />
Loading…
Cancel
Save