diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java index 02aec8690..e5ba1a083 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.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) { 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 3776fc317..a3d1aa5b5 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 @@ -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; diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/EpisodeDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/EpisodeDialog.java index 8cd558c3e..f16ffa1d3 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/EpisodeDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/EpisodeDialog.java @@ -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); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java index d32808fc9..0c29a2da3 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java @@ -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; }