From 3402edee798b8d720c003bfcc934e7e4f50f01ae Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 11 Apr 2023 17:16:00 +0800 Subject: [PATCH] [mobile] support episodes --- .../tv/ui/activity/DetailActivity.java | 10 ++- ...sodeDialog.java => EpisodeGridDialog.java} | 20 ++--- .../ui/custom/dialog/EpisodeListDialog.java | 79 +++++++++++++++++++ ...og_episode.xml => dialog_episode_grid.xml} | 0 .../mobile/res/layout/dialog_episode_list.xml | 17 ++++ .../res/layout/view_control_vod_action.xml | 5 ++ 6 files changed, 119 insertions(+), 12 deletions(-) rename app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/{EpisodeDialog.java => EpisodeGridDialog.java} (85%) create mode 100644 app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeListDialog.java rename app/src/mobile/res/layout/{dialog_episode.xml => dialog_episode_grid.xml} (100%) create mode 100644 app/src/mobile/res/layout/dialog_episode_list.xml diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 1f9075717..1f185e010 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -57,7 +57,8 @@ import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; import com.fongmi.android.tv.ui.custom.ViewType; import com.fongmi.android.tv.ui.custom.dialog.CastDialog; import com.fongmi.android.tv.ui.custom.dialog.ControlDialog; -import com.fongmi.android.tv.ui.custom.dialog.EpisodeDialog; +import com.fongmi.android.tv.ui.custom.dialog.EpisodeGridDialog; +import com.fongmi.android.tv.ui.custom.dialog.EpisodeListDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.Notify; @@ -245,6 +246,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.action.decode.setOnClickListener(view -> onDecode()); mBinding.control.action.ending.setOnClickListener(view -> onEnding()); mBinding.control.action.opening.setOnClickListener(view -> onOpening()); + mBinding.control.action.episodes.setOnClickListener(view -> onEpisodes()); mBinding.control.action.speed.setOnLongClickListener(view -> onSpeedLong()); mBinding.control.action.ending.setOnLongClickListener(view -> onEndingReset()); mBinding.control.action.opening.setOnLongClickListener(view -> onOpeningReset()); @@ -434,7 +436,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void onMore() { for (Fragment fragment : getSupportFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return; - EpisodeDialog.create().reverse(mHistory.isRevSort()).episodes(mEpisodeAdapter.getItems()).show(getSupportFragmentManager(), null); + EpisodeGridDialog.create().reverse(mHistory.isRevSort()).episodes(mEpisodeAdapter.getItems()).show(getSupportFragmentManager(), null); } private void onActor() { @@ -607,6 +609,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis return true; } + private void onEpisodes() { + EpisodeListDialog.create(this).episodes(mEpisodeAdapter.getItems()).show(); + } + private boolean onActionTouch(View v, MotionEvent e) { setR1Callback(); return false; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeGridDialog.java similarity index 85% rename from app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeDialog.java rename to app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeGridDialog.java index a072a6751..2daccb840 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeGridDialog.java @@ -11,44 +11,44 @@ import androidx.viewbinding.ViewBinding; import androidx.viewpager2.adapter.FragmentStateAdapter; import com.fongmi.android.tv.bean.Vod; -import com.fongmi.android.tv.databinding.DialogEpisodeBinding; +import com.fongmi.android.tv.databinding.DialogEpisodeGridBinding; import com.fongmi.android.tv.ui.fragment.EpisodeFragment; import com.google.android.material.tabs.TabLayoutMediator; import java.util.ArrayList; import java.util.List; -public class EpisodeDialog extends BaseDialog { +public class EpisodeGridDialog extends BaseDialog { - private List episodes; - private DialogEpisodeBinding binding; private final List titles; + private DialogEpisodeGridBinding binding; + private List episodes; private boolean reverse; private int spanCount; private int itemCount; - public static EpisodeDialog create() { - return new EpisodeDialog(); + public static EpisodeGridDialog create() { + return new EpisodeGridDialog(); } - public EpisodeDialog() { + public EpisodeGridDialog() { this.titles = new ArrayList<>(); this.spanCount = 5; } - public EpisodeDialog reverse(boolean reverse) { + public EpisodeGridDialog reverse(boolean reverse) { this.reverse = reverse; return this; } - public EpisodeDialog episodes(List episodes) { + public EpisodeGridDialog episodes(List episodes) { this.episodes = episodes; return this; } @Override protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { - return binding = DialogEpisodeBinding.inflate(inflater, container, false); + return binding = DialogEpisodeGridBinding.inflate(inflater, container, false); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeListDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeListDialog.java new file mode 100644 index 000000000..f55ceda55 --- /dev/null +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeListDialog.java @@ -0,0 +1,79 @@ +package com.fongmi.android.tv.ui.custom.dialog; + +import android.view.LayoutInflater; + +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.ViewModelProvider; + +import com.fongmi.android.tv.bean.Vod; +import com.fongmi.android.tv.databinding.DialogEpisodeListBinding; +import com.fongmi.android.tv.model.SiteViewModel; +import com.fongmi.android.tv.ui.adapter.EpisodeAdapter; +import com.fongmi.android.tv.ui.custom.ViewType; +import com.fongmi.android.tv.utils.Utils; +import com.google.android.material.sidesheet.SideSheetDialog; + +import java.util.List; + +public class EpisodeListDialog implements EpisodeAdapter.OnClickListener { + + private final FragmentActivity activity; + private DialogEpisodeListBinding binding; + private List episodes; + private SiteViewModel viewModel; + private EpisodeAdapter adapter; + private SideSheetDialog dialog; + + public static EpisodeListDialog create(FragmentActivity activity) { + return new EpisodeListDialog(activity); + } + + public EpisodeListDialog(FragmentActivity activity) { + this.activity = activity; + } + + public EpisodeListDialog episodes(List episodes) { + this.episodes = episodes; + return this; + } + + public void show() { + initDialog(); + initView(); + } + + private void initDialog() { + binding = DialogEpisodeListBinding.inflate(LayoutInflater.from(activity)); + dialog = new SideSheetDialog(activity); + dialog.setContentView(binding.getRoot()); + dialog.show(); + } + + private void initView() { + Utils.hideSystemUI(dialog.getWindow()); + setRecyclerView(); + setViewModel(); + setEpisode(); + } + + private void setRecyclerView() { + binding.recycler.setHasFixedSize(true); + binding.recycler.setItemAnimator(null); + binding.recycler.setAdapter(adapter = new EpisodeAdapter(this, ViewType.GRID)); + } + + private void setViewModel() { + viewModel = new ViewModelProvider(activity).get(SiteViewModel.class); + } + + private void setEpisode() { + adapter.addAll(episodes); + binding.recycler.scrollToPosition(adapter.getPosition()); + } + + @Override + public void onItemClick(Vod.Flag.Episode item) { + viewModel.setEpisode(item); + dialog.dismiss(); + } +} diff --git a/app/src/mobile/res/layout/dialog_episode.xml b/app/src/mobile/res/layout/dialog_episode_grid.xml similarity index 100% rename from app/src/mobile/res/layout/dialog_episode.xml rename to app/src/mobile/res/layout/dialog_episode_grid.xml diff --git a/app/src/mobile/res/layout/dialog_episode_list.xml b/app/src/mobile/res/layout/dialog_episode_list.xml new file mode 100644 index 000000000..360344ba8 --- /dev/null +++ b/app/src/mobile/res/layout/dialog_episode_list.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/mobile/res/layout/view_control_vod_action.xml b/app/src/mobile/res/layout/view_control_vod_action.xml index f93afb4bb..e35e23674 100644 --- a/app/src/mobile/res/layout/view_control_vod_action.xml +++ b/app/src/mobile/res/layout/view_control_vod_action.xml @@ -34,6 +34,11 @@ style="@style/Control.Action" tools:text="縮放" /> + +