From 982c1095f223e4bf96c3cf34823d1ed4a15ec532 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 16 Jan 2024 15:08:02 +0800 Subject: [PATCH 1/3] [mobile] add vod_id to info --- .../android/tv/ui/activity/VideoActivity.java | 2 +- .../android/tv/ui/dialog/InfoDialog.java | 20 +++++++++++++++---- app/src/mobile/res/layout/dialog_info.xml | 12 +++++++++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 1c23499c0..948d4729a 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -707,7 +707,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onInfo() { - InfoDialog.create(this).title(mBinding.control.title.getText()).headers(mPlayers.getHeaders()).url(mPlayers.getUrl()).show(); + InfoDialog.create(this).title(mBinding.control.title.getText()).headers(mPlayers.getHeaders()).vid(getId()).url(mPlayers.getUrl()).show(); } private void onFull() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java index 3009ac0d0..b24555468 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java @@ -1,6 +1,7 @@ package com.fongmi.android.tv.ui.dialog; import android.app.Activity; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -21,6 +22,7 @@ public class InfoDialog { private AlertDialog dialog; private CharSequence title; private String header; + private String vid; private String url; public static InfoDialog create(Activity activity) { @@ -44,6 +46,11 @@ public class InfoDialog { return this; } + public InfoDialog vid(String vid) { + this.vid = vid; + return this; + } + public InfoDialog url(String url) { this.url = url; return this; @@ -65,12 +72,17 @@ public class InfoDialog { binding.url.setText(url); binding.title.setText(title); binding.header.setText(header); - binding.header.setVisibility(header.isEmpty() ? View.GONE : View.VISIBLE); + binding.vid.setText("Vid : ".concat(vid)); + binding.vid.setVisibility(TextUtils.isEmpty(vid) ? View.GONE : View.VISIBLE); + binding.url.setVisibility(TextUtils.isEmpty(url) ? View.GONE : View.VISIBLE); + binding.header.setVisibility(TextUtils.isEmpty(header) ? View.GONE : View.VISIBLE); } private void initEvent() { binding.url.setOnClickListener(this::onShare); - binding.url.setOnLongClickListener(this::onCopy); + binding.vid.setOnLongClickListener(v -> onCopy(vid)); + binding.url.setOnLongClickListener(v -> onCopy(url)); + binding.header.setOnLongClickListener(v -> onCopy(header)); } private void onShare(View view) { @@ -78,9 +90,9 @@ public class InfoDialog { dialog.dismiss(); } - private boolean onCopy(View view) { + private boolean onCopy(String text) { Notify.show(R.string.copied); - Util.copy(url); + Util.copy(text); return true; } diff --git a/app/src/mobile/res/layout/dialog_info.xml b/app/src/mobile/res/layout/dialog_info.xml index 9bdcdacd0..2245559ea 100644 --- a/app/src/mobile/res/layout/dialog_info.xml +++ b/app/src/mobile/res/layout/dialog_info.xml @@ -14,22 +14,30 @@ android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginBottom="8dp" android:linksClickable="false" android:textColor="?android:attr/textColorPrimary" android:textSize="20sp" android:textStyle="bold" /> + + Date: Tue, 16 Jan 2024 15:10:02 +0800 Subject: [PATCH 2/3] Adjust info ui --- app/src/mobile/res/layout/dialog_info.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/mobile/res/layout/dialog_info.xml b/app/src/mobile/res/layout/dialog_info.xml index 2245559ea..82545a500 100644 --- a/app/src/mobile/res/layout/dialog_info.xml +++ b/app/src/mobile/res/layout/dialog_info.xml @@ -12,7 +12,7 @@ Date: Tue, 16 Jan 2024 16:52:14 +0800 Subject: [PATCH 3/3] Clean code --- .../android/tv/ui/activity/VideoActivity.java | 20 +++++++++---------- .../android/tv/ui/adapter/QualityAdapter.java | 10 +++++----- .../tv/ui/presenter/ArrayPresenter.java | 10 +++++----- .../tv/ui/presenter/EpisodePresenter.java | 19 +++++++++--------- .../leanback/res/layout/activity_video.xml | 8 ++++---- .../com/fongmi/android/tv/bean/Episode.java | 18 ++++++++--------- 6 files changed, 42 insertions(+), 43 deletions(-) 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 a10129a5d..3c90d9a80 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 @@ -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 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 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 items = List.of(source); - App.post(() -> mPartAdapter.setItems(items, null)); App.post(() -> { mBinding.part.setVisibility(View.VISIBLE); + mPartAdapter.setItems(items, null); updateFocus(); }); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/QualityAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/QualityAdapter.java index cc6b44dd0..0665c2fe8 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/QualityAdapter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/QualityAdapter.java @@ -27,6 +27,10 @@ public class QualityAdapter extends RecyclerView.Adapter onItemClick(position)); holder.binding.text.setActivated(mResult.getUrl().getPosition() == position); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java index bd574a0ab..d56dab770 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java @@ -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)); 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 1842fed99..14e97a400 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,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)); } diff --git a/app/src/leanback/res/layout/activity_video.xml b/app/src/leanback/res/layout/activity_video.xml index 57294d2f9..f14aaef02 100644 --- a/app/src/leanback/res/layout/activity_video.xml +++ b/app/src/leanback/res/layout/activity_video.xml @@ -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"> @@ -301,8 +301,8 @@