[mobile] support episodes

pull/123/head
FongMi 3 years ago
parent 23ee9e9283
commit 3402edee79
  1. 10
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeGridDialog.java
  3. 79
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/EpisodeListDialog.java
  4. 0
      app/src/mobile/res/layout/dialog_episode_grid.xml
  5. 17
      app/src/mobile/res/layout/dialog_episode_list.xml
  6. 5
      app/src/mobile/res/layout/view_control_vod_action.xml

@ -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;

@ -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<Vod.Flag.Episode> episodes;
private DialogEpisodeBinding binding;
private final List<String> titles;
private DialogEpisodeGridBinding binding;
private List<Vod.Flag.Episode> 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<Vod.Flag.Episode> episodes) {
public EpisodeGridDialog episodes(List<Vod.Flag.Episode> 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

@ -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<Vod.Flag.Episode> 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<Vod.Flag.Episode> 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();
}
}

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="10"
tools:listitem="@layout/adapter_episode_grid" />
</FrameLayout>

@ -34,6 +34,11 @@
style="@style/Control.Action"
tools:text="縮放" />
<TextView
android:id="@+id/episodes"
style="@style/Control.Action"
android:text="@string/detail_episode" />
<View
android:layout_width="0dp"
android:layout_height="0dp"

Loading…
Cancel
Save