From 6493bdf4833f523c4bfda4aeac2e886311acc18f Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 5 Jan 2026 00:18:34 +0800 Subject: [PATCH] Add control api --- .../android/tv/ui/activity/VideoActivity.java | 4 +++ .../fongmi/android/tv/event/ActionEvent.java | 28 +++++++++++++++---- .../android/tv/impl/SessionCallback.java | 10 +++---- .../android/tv/server/process/Action.java | 13 +++++++++ .../android/tv/ui/activity/VideoActivity.java | 4 +++ 5 files changed, 49 insertions(+), 10 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 599f994d9..4a4b7d3fc 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 @@ -1048,6 +1048,10 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mBinding.control.next.performClick(); } else if (ActionEvent.PREV.equals(event.getAction())) { mBinding.control.prev.performClick(); + } else if (ActionEvent.LOOP.equals(event.getAction())) { + mBinding.control.loop.performClick(); + } else if (ActionEvent.REPLAY.equals(event.getAction())) { + onReset(true); } else if (ActionEvent.STOP.equals(event.getAction())) { finish(); } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java index 24b80bad9..4ce13525f 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java @@ -9,33 +9,51 @@ public class ActionEvent { public static String STOP = BuildConfig.APPLICATION_ID.concat(".stop"); public static String PREV = BuildConfig.APPLICATION_ID.concat(".prev"); public static String NEXT = BuildConfig.APPLICATION_ID.concat(".next"); + public static String LOOP = BuildConfig.APPLICATION_ID.concat(".loop"); public static String PLAY = BuildConfig.APPLICATION_ID.concat(".play"); public static String PAUSE = BuildConfig.APPLICATION_ID.concat(".pause"); public static String AUDIO = BuildConfig.APPLICATION_ID.concat(".audio"); + public static String REPLAY = BuildConfig.APPLICATION_ID.concat(".replay"); public static String UPDATE = BuildConfig.APPLICATION_ID.concat(".update"); private final String action; - public static void send(String action) { + private static void send(String action) { EventBus.getDefault().post(new ActionEvent(action)); } - public static void update() { - send(UPDATE); + public static void stop() { + send(STOP); + } + + public static void prev() { + send(PREV); } public static void next() { send(NEXT); } - public static void prev() { - send(PREV); + public static void loop() { + send(LOOP); + } + + public static void play() { + send(PLAY); } public static void pause() { send(PAUSE); } + public static void replay() { + send(REPLAY); + } + + public static void update() { + send(UPDATE); + } + public ActionEvent(String action) { this.action = action; } diff --git a/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java b/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java index f24f8d303..0bb8c3d38 100644 --- a/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java +++ b/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java @@ -24,26 +24,26 @@ public class SessionCallback extends MediaSessionCompat.Callback { @Override public void onPlay() { - ActionEvent.send(ActionEvent.PLAY); + ActionEvent.play(); } @Override public void onPause() { - ActionEvent.send(ActionEvent.PAUSE); + ActionEvent.pause(); } @Override public void onSkipToPrevious() { - ActionEvent.send(ActionEvent.PREV); + ActionEvent.prev(); } @Override public void onSkipToNext() { - ActionEvent.send(ActionEvent.NEXT); + ActionEvent.next(); } @Override public void onStop() { - ActionEvent.send(ActionEvent.STOP); + ActionEvent.stop(); } } diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java index 9b5cd2362..6c2e95685 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java @@ -9,6 +9,7 @@ import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Device; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Keep; +import com.fongmi.android.tv.event.ActionEvent; import com.fongmi.android.tv.event.CastEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.event.ServerEvent; @@ -46,6 +47,7 @@ public class Action implements Process { else if ("search".equals(param)) onSearch(params); else if ("setting".equals(param)) onSetting(params); else if ("refresh".equals(param)) onRefresh(params); + else if ("control".equals(param)) onControl(params); return Nano.ok(); } @@ -86,6 +88,17 @@ public class Action implements Process { else if ("subtitle".equals(type)) RefreshEvent.subtitle(path); } + private void onControl(Map params) { + String type = params.get("type"); + if ("stop".equals(type)) ActionEvent.stop(); + else if ("prev".equals(type)) ActionEvent.prev(); + else if ("next".equals(type)) ActionEvent.next(); + else if ("loop".equals(type)) ActionEvent.loop(); + else if ("play".equals(type)) ActionEvent.play(); + else if ("pause".equals(type)) ActionEvent.pause(); + else if ("replay".equals(type)) ActionEvent.replay(); + } + private void onCast(Map params) { Config config = Config.objectFrom(params.get("config")); Device device = Device.objectFrom(params.get("device")); 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 f0a514d9d..345b5e0b9 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 @@ -1149,6 +1149,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mBinding.control.next.performClick(); } else if (ActionEvent.PREV.equals(event.getAction())) { mBinding.control.prev.performClick(); + } else if (ActionEvent.LOOP.equals(event.getAction())) { + mBinding.control.action.loop.performClick(); + } else if (ActionEvent.REPLAY.equals(event.getAction())) { + onReset(true); } else if (ActionEvent.AUDIO.equals(event.getAction())) { moveTaskToBack(true); setAudioOnly(true);