diff --git a/app/src/leanback/AndroidManifest.xml b/app/src/leanback/AndroidManifest.xml
index 199f39357..c99239b68 100644
--- a/app/src/leanback/AndroidManifest.xml
+++ b/app/src/leanback/AndroidManifest.xml
@@ -54,7 +54,6 @@
CollectActivity.start(this, item)))));
mControl.parse.setHorizontalSpacing(ResUtil.dp2px(8));
mControl.parse.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mControl.parse.setAdapter(new ItemBridgeAdapter(mParseAdapter = new ArrayObjectAdapter(new ParsePresenter(this::setParseActivated))));
@@ -237,6 +244,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
setText(mBinding.director, R.string.detail_director, Html.fromHtml(item.getVodDirector()).toString());
mFlagAdapter.setItems(item.getVodFlags(), null);
mBinding.video.requestFocus();
+ getPart(item.getVodName());
checkHistory();
}
@@ -288,6 +296,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
items.add(getString(mHistory.getRevPlayText()));
int itemSize = (int) Math.ceil(size / 20.0f);
if (itemSize > 1) for (int i = 0; i < itemSize; i++) items.add(String.valueOf(i * 20 + 1));
+ mEpisodePresenter.setNextFocusDown(size > 1 ? R.id.group : R.id.part);
+ mPartPresenter.setNextFocusUp(size > 1 ? R.id.group : R.id.episode);
mBinding.group.setVisibility(size > 1 ? View.VISIBLE : View.GONE);
mGroupAdapter.setItems(items, null);
}
@@ -412,6 +422,17 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
mHistory.update();
}
+ private void getPart(String source) {
+ OKHttp.newCall("http://api.pullword.com/get.php?source=" + URLEncoder.encode(source) + "¶m1=0¶m2=0&json=1").enqueue(new Callback() {
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
+ List items = Part.get(response.body().string());
+ if (!items.contains(source)) items.add(source);
+ mHandler.post(() -> mPartAdapter.setItems(items, null));
+ }
+ });
+ }
+
private void checkHistory() {
mHistory = History.find(getHistoryKey());
if (mFlagAdapter.size() == 0) {
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 35ec9e587..0766a7971 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
@@ -13,6 +13,7 @@ import com.fongmi.android.tv.utils.ResUtil;
public class EpisodePresenter extends Presenter {
private final OnClickListener mListener;
+ private int nextFocus;
public EpisodePresenter(OnClickListener listener) {
this.mListener = listener;
@@ -22,6 +23,10 @@ public class EpisodePresenter extends Presenter {
void onItemClick(Vod.Flag.Episode item);
}
+ public void setNextFocusDown(int nextFocus) {
+ this.nextFocus = nextFocus;
+ }
+
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterEpisodeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
@@ -33,6 +38,7 @@ public class EpisodePresenter extends Presenter {
ViewHolder holder = (ViewHolder) viewHolder;
holder.binding.text.setText(item.getName());
holder.binding.text.setMaxEms(ResUtil.getEms());
+ holder.binding.text.setNextFocusDownId(nextFocus);
holder.binding.text.setActivated(item.isActivated());
setOnClickListener(holder, view -> mListener.onItemClick(item));
}
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/PartPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/PartPresenter.java
new file mode 100644
index 000000000..0c6b5a660
--- /dev/null
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/PartPresenter.java
@@ -0,0 +1,55 @@
+package com.fongmi.android.tv.ui.presenter;
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.leanback.widget.Presenter;
+
+import com.fongmi.android.tv.databinding.AdapterPartBinding;
+
+public class PartPresenter extends Presenter {
+
+ private final OnClickListener mListener;
+ private int nextFocus;
+
+ public PartPresenter(OnClickListener listener) {
+ this.mListener = listener;
+ }
+
+ public interface OnClickListener {
+ void onItemClick(String item);
+ }
+
+ public void setNextFocusUp(int nextFocus) {
+ this.nextFocus = nextFocus;
+ }
+
+ @Override
+ public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
+ return new ViewHolder(AdapterPartBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) {
+ String text = object.toString();
+ ViewHolder holder = (ViewHolder) viewHolder;
+ holder.binding.text.setText(text);
+ holder.binding.text.setNextFocusUpId(nextFocus);
+ setOnClickListener(holder, view -> mListener.onItemClick(text));
+ }
+
+ @Override
+ public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
+ }
+
+ public static class ViewHolder extends Presenter.ViewHolder {
+
+ private final AdapterPartBinding binding;
+
+ public ViewHolder(@NonNull AdapterPartBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/activity_detail.xml b/app/src/leanback/res/layout/activity_detail.xml
index 31bcf9665..2bc22556f 100644
--- a/app/src/leanback/res/layout/activity_detail.xml
+++ b/app/src/leanback/res/layout/activity_detail.xml
@@ -1,216 +1,235 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:textSize="24sp"
+ android:textStyle="bold"
+ tools:text="慶餘年第二季" />
+
+
+
+
+
+
+
+
+
+
+
+
+ tools:text="導演:FongMi" />
+ tools:text="演員:FongMi" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+ tools:text="簡介:" />
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/adapter_group.xml b/app/src/leanback/res/layout/adapter_group.xml
index ff2c47715..94840e351 100644
--- a/app/src/leanback/res/layout/adapter_group.xml
+++ b/app/src/leanback/res/layout/adapter_group.xml
@@ -9,6 +9,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:nextFocusUp="@id/episode"
+ android:nextFocusDown="@id/part"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="11" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/adapter_part.xml b/app/src/leanback/res/layout/adapter_part.xml
new file mode 100644
index 000000000..ff072bbda
--- /dev/null
+++ b/app/src/leanback/res/layout/adapter_part.xml
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Part.java b/app/src/main/java/com/fongmi/android/tv/bean/Part.java
new file mode 100644
index 000000000..5ea12052d
--- /dev/null
+++ b/app/src/main/java/com/fongmi/android/tv/bean/Part.java
@@ -0,0 +1,30 @@
+package com.fongmi.android.tv.bean;
+
+import com.google.gson.Gson;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Part {
+
+ @SerializedName("t")
+ private String t;
+
+ private static List arrayFrom(String str) {
+ Type listType = new TypeToken>() {}.getType();
+ return new Gson().fromJson(str, listType);
+ }
+
+ public static List get(String str) {
+ List items = new ArrayList<>();
+ for (Part item : arrayFrom(str)) items.add(item.getT());
+ return items;
+ }
+
+ public String getT() {
+ return t;
+ }
+}
diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java
index e4f9fb933..53f96628b 100644
--- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java
+++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java
@@ -153,7 +153,7 @@ public class Vod {
}
public int getYearVisible() {
- return getVodYear().isEmpty() ? View.GONE : View.VISIBLE;
+ return getSite() != null || getVodYear().isEmpty() ? View.GONE : View.VISIBLE;
}
public int getRemarkVisible() {