From 7a90d9560768b0a798f2e1b72dec2adcc6d6a06a Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 27 May 2023 18:21:53 +0800 Subject: [PATCH] [leanback] support oped fine-tuning --- .../tv/ui/activity/DetailActivity.java | 42 ++++++++++--- .../android/tv/ui/custom/CustomOpEdView.java | 59 +++++++++++++++++++ .../leanback/res/layout/view_control_vod.xml | 4 +- 3 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomOpEdView.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 91efad141..6fb566e79 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -230,6 +230,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.text.setOnClickListener(this::onTrack); mBinding.control.audio.setOnClickListener(this::onTrack); mBinding.control.video.setOnClickListener(this::onTrack); + mBinding.control.ending.setAddListener(this::onEndingAdd); + mBinding.control.ending.setSubListener(this::onEndingSub); + mBinding.control.opening.setAddListener(this::onOpeningAdd); + mBinding.control.opening.setSubListener(this::onOpeningSub); mBinding.control.loop.setOnClickListener(view -> onLoop()); mBinding.control.next.setOnClickListener(view -> checkNext()); mBinding.control.prev.setOnClickListener(view -> checkPrev()); @@ -591,30 +595,52 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis long current = mPlayers.getPosition(); long duration = mPlayers.getDuration(); if (current < 0 || current > duration / 2) return; - mHistory.setOpening(current); - mBinding.control.opening.setText(mPlayers.stringToTime(mHistory.getOpening())); + setOpening(current); + } + + private void onOpeningAdd() { + setOpening(Math.min(mHistory.getOpening() + 1000, mPlayers.getDuration() / 2)); + } + + private void onOpeningSub() { + setOpening(Math.max(0, mHistory.getOpening() - 1000)); } private boolean onOpeningReset() { - mHistory.setOpening(0); - mBinding.control.opening.setText(R.string.play_op); + setOpening(0); return true; } + private void setOpening(long opening) { + mHistory.setOpening(opening); + mBinding.control.opening.setText(opening == 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening())); + } + private void onEnding() { long current = mPlayers.getPosition(); long duration = mPlayers.getDuration(); if (current < 0 || current < duration / 2) return; - mHistory.setEnding(duration - current); - mBinding.control.ending.setText(mPlayers.stringToTime(mHistory.getEnding())); + setEnding(duration - current); + } + + private void onEndingAdd() { + setEnding(Math.min(mPlayers.getDuration() / 2, mHistory.getEnding() + 1000)); + } + + private void onEndingSub() { + setEnding(Math.max(0, mHistory.getEnding() - 1000)); } private boolean onEndingReset() { - mHistory.setEnding(0); - mBinding.control.ending.setText(R.string.play_ed); + setEnding(0); return true; } + private void setEnding(long ending) { + mHistory.setEnding(ending); + mBinding.control.ending.setText(ending == 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding())); + } + private void onPlayer() { mPlayers.togglePlayer(); Prefers.putPlayer(mPlayers.getPlayer()); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomOpEdView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomOpEdView.java new file mode 100644 index 000000000..f5a92f9ce --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomOpEdView.java @@ -0,0 +1,59 @@ +package com.fongmi.android.tv.ui.custom; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.fongmi.android.tv.utils.Utils; + +public class CustomOpEdView extends AppCompatTextView { + + private AddListener addListener; + private SubListener subListener; + + public CustomOpEdView(@NonNull Context context) { + super(context); + } + + public CustomOpEdView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public void setAddListener(AddListener addListener) { + this.addListener = addListener; + } + + public void setSubListener(SubListener subListener) { + this.subListener = subListener; + } + + private boolean hasEvent(KeyEvent event) { + return event.getAction() == KeyEvent.ACTION_DOWN && (Utils.isUpKey(event) || Utils.isDownKey(event)); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (hasEvent(event)) return onKeyDown(event); + else return super.dispatchKeyEvent(event); + } + + private boolean onKeyDown(KeyEvent event) { + if (Utils.isUpKey(event)) addListener.onAdd(); + if (Utils.isDownKey(event)) subListener.onSud(); + return true; + } + + public interface AddListener { + + void onAdd(); + } + + public interface SubListener { + + void onSud(); + } +} diff --git a/app/src/leanback/res/layout/view_control_vod.xml b/app/src/leanback/res/layout/view_control_vod.xml index a5dbc7d52..00e448088 100644 --- a/app/src/leanback/res/layout/view_control_vod.xml +++ b/app/src/leanback/res/layout/view_control_vod.xml @@ -174,7 +174,7 @@ android:visibility="gone" tools:visibility="visible" /> - -