okjack
FongMi 2 years ago
parent dace95cc20
commit 198dd0c838
  1. 20
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  2. 10
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/QualityAdapter.java
  3. 10
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java
  4. 19
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java
  5. 8
      app/src/leanback/res/layout/activity_video.xml
  6. 18
      app/src/main/java/com/fongmi/android/tv/bean/Episode.java

@ -126,8 +126,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private ArrayObjectAdapter mPartAdapter;
private QualityAdapter mQualityAdapter;
private DanmakuContext mDanmakuContext;
private FlagPresenter mFlagPresenter;
private ArrayPresenter mArrayPresenter;
private FlagPresenter mFlagPresenter;
private PartPresenter mPartPresenter;
private CustomKeyDownVod mKeyDown;
private ExecutorService mExecutor;
@ -370,8 +370,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mBinding.flag.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.flag.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.flag.setAdapter(new ItemBridgeAdapter(mFlagAdapter = new ArrayObjectAdapter(mFlagPresenter = new FlagPresenter(this::setFlagActivated))));
mBinding.episode.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.episode.setVerticalSpacing(ResUtil.dp2px(8));
mBinding.episode.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.episode.setAdapter(new ItemBridgeAdapter(mEpisodeAdapter = new ArrayObjectAdapter(mEpisodePresenter = new EpisodePresenter(this::setEpisodeActivated))));
mBinding.quality.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.quality.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
@ -590,7 +590,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void setEpisodeAdapter(List<Episode> items) {
int size = items.size();
for(int i = 0; i < size; i ++) { items.get(i).setIndex(i); }
for (int i = 0; i < size; i++) items.get(i).setIndex(i);
int episodeNameLength = items.isEmpty() ? 0 : items.get(0).getName().length();
int numColumns = 10;
if (episodeNameLength > 40) numColumns = 2;
@ -598,7 +598,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
else if (episodeNameLength > 5) numColumns = 6;
else if (episodeNameLength > 2) numColumns = 8;
if (size < numColumns) numColumns = size;
int rowNum = (int)Math.ceil((double) size/ (double) numColumns);
int rowNum = (int) Math.ceil((double) size / (double) numColumns);
int width = ResUtil.getScreenWidth() - ResUtil.dp2px(48);
mBinding.episode.setNumColumns(numColumns);
mBinding.episode.setColumnWidth((width - ((numColumns - 1) * ResUtil.dp2px(8))) / numColumns);
@ -642,13 +642,13 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void setQualityVisible(boolean visible) {
mArrayPresenter.setNextFocusDown(isVisible(mBinding.episode) ? R.id.episode : R.id.part);
mFlagPresenter.setNextFocusDown(visible ? R.id.quality : R.id.array);
mBinding.quality.setVisibility(visible ? View.VISIBLE : View.GONE);
mArrayPresenter.setNextFocusUp(visible ? R.id.quality : R.id.flag);
mArrayPresenter.setNextFocusDown(isVisible(mBinding.episode) ? R.id.episode : R.id.part);
mEpisodePresenter.setNextFocusUp(R.id.array);
mQualityAdapter.setNextFocusUp(R.id.flag);
mQualityAdapter.setNextFocusDown(R.id.array);
mBinding.quality.setVisibility(visible ? View.VISIBLE : View.GONE);
mQualityAdapter.setNextFocusUp(R.id.flag);
notifyItemChanged(mBinding.episode, mEpisodeAdapter);
notifyItemChanged(mBinding.array, mArrayAdapter);
notifyItemChanged(mBinding.flag, mFlagAdapter);
@ -688,8 +688,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void updateFocus() {
mEpisodePresenter.setNextFocusDown(isVisible(mBinding.part) ? R.id.part : R.id.flag);
mPartPresenter.setNextFocusUp(isVisible(mBinding.episode) ? R.id.episode : R.id.array);
mEpisodePresenter.setNextFocusDown(isVisible(mBinding.part) ? R.id.part : R.id.flag);
notifyItemChanged(mBinding.episode, mEpisodeAdapter);
notifyItemChanged(mBinding.part, mPartAdapter);
}
@ -1055,9 +1055,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
List<String> items = Part.get(response.body().string());
if (!items.contains(source)) items.add(0, source);
App.post(() -> mPartAdapter.setItems(items, null));
App.post(() -> {
mBinding.part.setVisibility(View.VISIBLE);
mPartAdapter.setItems(items, null);
updateFocus();
});
}
@ -1065,9 +1065,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
List<String> items = List.of(source);
App.post(() -> mPartAdapter.setItems(items, null));
App.post(() -> {
mBinding.part.setVisibility(View.VISIBLE);
mPartAdapter.setItems(items, null);
updateFocus();
});
}

@ -27,6 +27,10 @@ public class QualityAdapter extends RecyclerView.Adapter<QualityAdapter.ViewHold
void onItemClick(Result result);
}
public int getPosition() {
return position;
}
public void setNextFocusUp(int nextFocusUp) {
this.nextFocusUp = nextFocusUp;
}
@ -40,10 +44,6 @@ public class QualityAdapter extends RecyclerView.Adapter<QualityAdapter.ViewHold
notifyDataSetChanged();
}
public int getPosition() {
return position;
}
@Override
public int getItemCount() {
return mResult.getUrl().getValues().size();
@ -57,9 +57,9 @@ public class QualityAdapter extends RecyclerView.Adapter<QualityAdapter.ViewHold
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.binding.text.setText(mResult.getUrl().n(position));
holder.binding.text.setNextFocusUpId(nextFocusUp);
holder.binding.text.setNextFocusDownId(nextFocusDown);
holder.binding.text.setText(mResult.getUrl().n(position));
holder.binding.text.setOnClickListener(v -> onItemClick(position));
holder.binding.text.setActivated(mResult.getUrl().getPosition() == position);
}

@ -17,8 +17,8 @@ public class ArrayPresenter extends Presenter {
private final String backward;
private final String forward;
private final String reverse;
private int nextFocusUp;
private int nextFocusDown;
private int nextFocusUp;
public ArrayPresenter(OnClickListener listener) {
this.mListener = listener;
@ -34,14 +34,14 @@ public class ArrayPresenter extends Presenter {
void onRevPlay(TextView view);
}
public void setNextFocusUp(int nextFocusUp) {
this.nextFocusUp = nextFocusUp;
}
public void setNextFocusDown(int nextFocusDown) {
this.nextFocusDown = nextFocusDown;
}
public void setNextFocusUp(int nextFocusUp) {
this.nextFocusUp = nextFocusUp;
}
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterArrayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));

@ -13,10 +13,10 @@ import com.fongmi.android.tv.databinding.AdapterEpisodeBinding;
public class EpisodePresenter extends Presenter {
private final OnClickListener mListener;
private int nextFocusDown;
private int nextFocusUp;
private int numColumns;
private int numRows;
private int nextFocusUp;
private int nextFocusDown;
public EpisodePresenter(OnClickListener listener) {
this.mListener = listener;
@ -26,14 +26,14 @@ public class EpisodePresenter extends Presenter {
void onItemClick(Episode item);
}
public void setNextFocusUp(int nextFocus) {
this.nextFocusUp = nextFocus;
}
public void setNextFocusDown(int nextFocus) {
this.nextFocusDown = nextFocus;
}
public void setNextFocusUp(int nextFocus) {
this.nextFocusUp = nextFocus;
}
public void setNumColumns(int numColumns) {
this.numColumns = numColumns;
}
@ -41,6 +41,7 @@ public class EpisodePresenter extends Presenter {
public void setNumRows(int numRows) {
this.numRows = numRows;
}
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterEpisodeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
@ -50,13 +51,11 @@ public class EpisodePresenter extends Presenter {
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) {
Episode item = (Episode) object;
ViewHolder holder = (ViewHolder) viewHolder;
if (item.getIndex() < numColumns) holder.binding.text.setNextFocusUpId(nextFocusUp);
else holder.binding.text.setNextFocusUpId(0);
if (item.getIndex() >= (numRows - 1) * numColumns) holder.binding.text.setNextFocusDownId(nextFocusDown);
else holder.binding.text.setNextFocusDownId(0);
holder.binding.text.setMaxEms(Product.getEms());
holder.binding.text.setActivated(item.isActivated());
holder.binding.text.setText(item.getDesc().concat(item.getName()));
holder.binding.text.setNextFocusUpId(item.getIndex() < numColumns ? nextFocusUp : 0);
holder.binding.text.setNextFocusDownId(item.getIndex() >= (numRows - 1) * numColumns ? nextFocusDown : 0);
setOnClickListener(holder, view -> mListener.onItemClick(item));
}

@ -255,7 +255,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/video"
android:layout_marginTop="12dp"
android:layout_marginTop="16dp"
android:overScrollMode="never">
<LinearLayout
@ -270,7 +270,7 @@
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"
android:paddingTop="12dp"
android:paddingTop="8dp"
android:paddingEnd="24dp"
android:paddingBottom="8dp"
android:visibility="gone" />
@ -301,8 +301,8 @@
<androidx.leanback.widget.VerticalGridView
android:id="@+id/episode"
android:layout_width="1024dp"
android:layout_height="300dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"

@ -17,10 +17,10 @@ public class Episode implements Parcelable {
@SerializedName("url")
private String url;
private int index;
private int number;
private boolean activated;
private boolean selected;
private int index;
public static Episode create(String name, String url) {
return new Episode(name, "", url);
@ -60,14 +60,18 @@ public class Episode implements Parcelable {
return url;
}
public int getNumber() {
return number;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getNumber() {
return number;
}
public boolean isActivated() {
return activated;
}
@ -89,10 +93,6 @@ public class Episode implements Parcelable {
this.selected = selected;
}
public void setIndex(int index) {
this.index = index;
}
public boolean rule1(String name) {
return getName().equalsIgnoreCase(name);
}

Loading…
Cancel
Save