pull/320/head
okjack 2 years ago
parent 013886cae4
commit ee2f4750af
  1. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java
  2. 26
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 35
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/EpisodeDialog.java
  4. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java

@ -54,6 +54,7 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl
private void getHistory() {
mAdapter.addAll(History.get());
mBinding.delete.setVisibility(mAdapter.getItemCount() > 0 ? View.VISIBLE : View.GONE);
mBinding.recycler.requestFocus();
}
private void onDelete(View view) {

@ -156,6 +156,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private View mFocus1;
private View mFocus2;
private boolean hasKeyEvent;
private boolean firstTime;
public static void push(FragmentActivity activity, String text) {
if (FileChooser.isValid(activity, Uri.parse(text))) file(activity, FileChooser.getPathFromUri(activity, Uri.parse(text)));
@ -293,6 +294,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
getEpisodeView().postDelayed(() -> {
View selectedItem = getEpisodeView().getLayoutManager().findViewByPosition(position);
if (selectedItem != null) selectedItem.requestFocus();
if (firstTime) mBinding.video.requestFocus();
firstTime = false;
}, 300);
}
@ -321,6 +324,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mR2 = this::updateFocus;
mR3 = this::setTraffic;
mR4 = this::showEmpty;
firstTime = true;
setBackground(false);
setRecyclerView();
setEpisodeView();
@ -379,6 +383,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
@Override
public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) {
if (child != null) mFocus1 = child.itemView;
setEpisodeChildKeyListener(child, position);
}
});
mBinding.array.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
@ -389,6 +394,26 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
});
}
private void setEpisodeChildKeyListener(RecyclerView.ViewHolder child, int position) {
if (getEpisodeView() != mBinding.episodeVert) return;
int itemCount = getEpisodeView().getAdapter().getItemCount();
if (itemCount <= 0) return;
int columns = mEpisodePresenter.getNumColumns();
int numRows = mEpisodePresenter.getNumRows();
if (((int)Math.ceil((position + 1)/columns) + 1 == numRows) && (position + columns >= itemCount)) {
child.itemView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) {
View lastItem = getEpisodeView().getLayoutManager().findViewByPosition(itemCount - 1);
if (lastItem != null) lastItem.requestFocus();
}
return false;
}
});
}
}
private void setRecyclerView() {
mBinding.flag.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.flag.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
@ -641,6 +666,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
if (length > episodeNameLength) episodeNameLength = length;
}
int numColumns = 10;
if (episodeNameLength > 60) numColumns = 1;
if (episodeNameLength > 30) numColumns = 2;
else if (episodeNameLength > 15) numColumns = 3;
else if (episodeNameLength > 10) numColumns = 4;

@ -107,25 +107,30 @@ public class EpisodeDialog extends BaseDialog implements ArrayPresenter.OnClickL
public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) {
super.onChildViewHolderSelected(parent, child, position, subposition);
if (child != null ) mFocus1 = child.itemView;
int itemCount = binding.episodeVert.getAdapter().getItemCount();
if (itemCount <= 0) return;
int columns = mEpisodePresenter.getNumColumns();
if (position + columns >= itemCount && (position % columns) + 1 > itemCount % columns) {
child.itemView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) {
View lastItem = binding.episodeVert.getLayoutManager().findViewByPosition(itemCount - 1);
if (lastItem != null) lastItem.requestFocus();
}
return false;
}
});
}
setEpisodeChildKeyListener(child, position);
}
});
}
private void setEpisodeChildKeyListener(RecyclerView.ViewHolder child, int position) {
int itemCount = binding.episodeVert.getAdapter().getItemCount();
if (itemCount <= 0) return;
int columns = mEpisodePresenter.getNumColumns();
int numRows = mEpisodePresenter.getNumRows();
if (((int)Math.ceil((position + 1)/columns) + 1 == numRows) && (position + columns >= itemCount)) {
child.itemView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) {
View lastItem = binding.episodeVert.getLayoutManager().findViewByPosition(itemCount - 1);
if (lastItem != null) lastItem.requestFocus();
}
return false;
}
});
}
}
private void setEpisodeSelectedPosition(int position) {
this.binding.episodeVert.setSelectedPosition(position);
}

@ -42,6 +42,10 @@ public class EpisodePresenter extends Presenter {
this.numColumns = numColumns;
}
public int getNumRows() {
return this.numRows;
}
public void setNumRows(int numRows) {
this.numRows = numRows;
}

Loading…
Cancel
Save