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 b26790304..43637caff 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 @@ -1,5 +1,6 @@ package com.fongmi.android.tv.ui.dialog; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,7 +15,6 @@ import androidx.leanback.widget.ItemBridgeAdapter; import androidx.leanback.widget.OnChildViewHolderSelectedListener; import androidx.recyclerview.widget.RecyclerView; import androidx.viewbinding.ViewBinding; - import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.databinding.DialogEpisodeBinding; import com.fongmi.android.tv.ui.activity.VideoActivity; @@ -37,7 +37,7 @@ public class EpisodeDialog extends BaseDialog implements ArrayPresenter.OnClickL private ArrayObjectAdapter mArrayAdapter; private ArrayPresenter mArrayPresenter; private int groupSize; - + public static EpisodeDialog create() { return new EpisodeDialog(); } @@ -84,7 +84,23 @@ public class EpisodeDialog extends BaseDialog implements ArrayPresenter.OnClickL this.binding.episodeVert.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @Override 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; + } + }); + } } }); } @@ -149,7 +165,11 @@ public class EpisodeDialog extends BaseDialog implements ArrayPresenter.OnClickL this.binding.episodeVert.setColumnWidth((width - ((numColumns - 1) * ResUtil.dp2px(8))) / numColumns); this.binding.episodeVert.setWindowAlignmentOffsetPercent(10f); ViewGroup.LayoutParams params = this.binding.getRoot().getLayoutParams(); - params.height = ResUtil.getScreenHeight() * 3 / 4; + int height = ResUtil.getScreenHeight(); + if (rowNum > 6) height = ResUtil.getScreenHeight() * 3 / 4; + else if (rowNum > 2) height = ResUtil.getScreenHeight() * 1 / 2; + else if (rowNum > 0) height = ResUtil.getScreenHeight() * 1 / 3; + params.height = height; this.binding.getRoot().setLayoutParams(params); mEpisodePresenter.setNumColumns(numColumns); mEpisodePresenter.setNumRows(rowNum); 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 763fc35f0..d32808fc9 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 @@ -34,6 +34,10 @@ public class EpisodePresenter extends Presenter { this.nextFocusUp = nextFocus; } + public int getNumColumns() { + return this.numColumns; + } + public void setNumColumns(int numColumns) { this.numColumns = numColumns; } diff --git a/app/src/leanback/res/layout/activity_video.xml b/app/src/leanback/res/layout/activity_video.xml index d6b77fbc9..da9e23e16 100644 --- a/app/src/leanback/res/layout/activity_video.xml +++ b/app/src/leanback/res/layout/activity_video.xml @@ -264,7 +264,6 @@ android:clipChildren="false" android:clipToPadding="false" android:layout_marginTop="12dp" - android:layout_marginBottom="12dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:visibility="gone" /> @@ -287,7 +286,7 @@ android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" - android:layout_marginBottom="12dp" + android:layout_marginTop="12dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:visibility="gone" /> @@ -298,7 +297,7 @@ android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" - android:layout_marginBottom="12dp" + android:layout_marginTop="12dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:focusable="false" @@ -312,7 +311,7 @@ android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" - android:layout_marginBottom="12dp" + android:layout_marginTop="12dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:visibility="gone" /> @@ -323,7 +322,7 @@ android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" - android:layout_marginBottom="12dp" + android:layout_marginTop="12dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:focusable="false" @@ -337,7 +336,7 @@ android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" - android:layout_marginBottom="12dp" + android:layout_marginTop="12dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:visibility="gone" /> @@ -346,7 +345,7 @@ android:id="@+id/quick" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="12dp" + android:layout_marginTop="12dp" android:clipChildren="false" android:clipToPadding="false" android:paddingStart="24dp"