From 0efc722a0e9306966720dabe0cecbf2ecf309982 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Mon, 8 Sep 2025 01:06:46 +0800 Subject: [PATCH] Add audio mode --- .../android/tv/ui/activity/CastActivity.java | 2 ++ .../android/tv/ui/activity/LiveActivity.java | 2 ++ .../android/tv/ui/activity/VideoActivity.java | 2 ++ app/src/main/AndroidManifest.xml | 1 + .../fongmi/android/tv/event/ActionEvent.java | 1 + .../android/tv/ui/activity/LiveActivity.java | 17 ++++++++++++++++- .../android/tv/ui/activity/VideoActivity.java | 19 +++++++++++++++++-- .../java/com/fongmi/android/tv/utils/PiP.java | 2 +- .../mobile/res/drawable/ic_action_audio.xml | 12 ++++++++++++ 9 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 app/src/mobile/res/drawable/ic_action_audio.xml diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index 72e95ddef..9c49dc6b7 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -512,6 +512,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownVod.Liste @Override protected void onStart() { super.onStart(); + mBinding.exo.setPlayer(mPlayers.get()); mClock.stop().start(); onPlay(); } @@ -534,6 +535,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownVod.Liste super.onStop(); if (Setting.isBackgroundOff()) onPaused(); if (Setting.isBackgroundOff()) mClock.stop(); + mBinding.exo.setPlayer(null); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 2b934c739..29372f016 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -961,6 +961,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override protected void onStart() { super.onStart(); + mBinding.exo.setPlayer(mPlayers.get()); mClock.stop().start(); onPlay(); } @@ -983,6 +984,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick super.onStop(); if (Setting.isBackgroundOff()) onPaused(); if (Setting.isBackgroundOff()) mClock.stop(); + mBinding.exo.setPlayer(null); } @Override 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 3c002fde1..03e5f41cc 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 @@ -1396,6 +1396,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Override protected void onStart() { super.onStart(); + mBinding.exo.setPlayer(mPlayers.get()); mClock.stop().start(); onPlay(); } @@ -1418,6 +1419,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List super.onStop(); if (Setting.isBackgroundOff()) onPaused(); if (Setting.isBackgroundOff()) mClock.stop(); + mBinding.exo.setPlayer(null); } @Override diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8e652eeac..3dc6c72a6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -77,6 +77,7 @@ + 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 ed47b8ee1..24b80bad9 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 @@ -11,6 +11,7 @@ public class ActionEvent { public static String NEXT = BuildConfig.APPLICATION_ID.concat(".next"); 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 UPDATE = BuildConfig.APPLICATION_ID.concat(".update"); private final String action; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 1da0cebe0..c6e5a70c3 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -91,6 +91,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener private Runnable mR1; private Runnable mR2; private Runnable mR3; + private boolean audioOnly; private boolean redirect; private boolean rotate; private boolean stop; @@ -728,6 +729,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener nextChannel(); } else if (ActionEvent.PREV.equals(event.getAction())) { prevChannel(); + } else if (ActionEvent.AUDIO.equals(event.getAction())) { + moveTaskToBack(true); + setAudioOnly(true); } else if (ActionEvent.STOP.equals(event.getAction())) { finish(); } @@ -876,6 +880,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener checkPlayImg(); } + public boolean isAudioOnly() { + return audioOnly; + } + + public void setAudioOnly(boolean audioOnly) { + this.audioOnly = audioOnly; + } + public boolean isRedirect() { return redirect; } @@ -1046,6 +1058,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener @Override protected void onStart() { super.onStart(); + mBinding.exo.setPlayer(mPlayers.get()); + setAudioOnly(false); setStop(false); onPlay(); } @@ -1067,7 +1081,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener protected void onStop() { super.onStop(); if (Setting.isBackgroundOff()) onPaused(); - setStop(true); + if (!isAudioOnly()) setStop(true); + mBinding.exo.setPlayer(null); } @Override 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 db782e572..cf7dc0a6c 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 @@ -133,6 +133,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private History mHistory; private Players mPlayers; private boolean fullscreen; + private boolean audioOnly; private boolean initAuto; private boolean autoMode; private boolean useParse; @@ -1125,6 +1126,9 @@ 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.AUDIO.equals(event.getAction())) { + moveTaskToBack(true); + setAudioOnly(true); } else if (ActionEvent.STOP.equals(event.getAction())) { finish(); } @@ -1356,6 +1360,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo Util.toggleFullscreen(this, this.fullscreen = fullscreen); } + public boolean isAudioOnly() { + return audioOnly; + } + + public void setAudioOnly(boolean audioOnly) { + this.audioOnly = audioOnly; + } + private boolean isInitAuto() { return initAuto; } @@ -1581,7 +1593,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Override protected void onStart() { super.onStart(); + mBinding.exo.setPlayer(mPlayers.get()); mClock.stop().start(); + setAudioOnly(false); setStop(false); onPlay(); } @@ -1602,9 +1616,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Override protected void onStop() { super.onStop(); - if (Setting.isBackgroundOff()) onPaused(); if (Setting.isBackgroundOff()) mClock.stop(); - setStop(true); + if (Setting.isBackgroundOff()) onPaused(); + if (!isAudioOnly()) setStop(true); + mBinding.exo.setPlayer(null); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java b/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java index 869512365..0e0a766d8 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java +++ b/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java @@ -65,7 +65,7 @@ public class PiP { public void update(Activity activity, boolean play) { if (noPiP()) return; List actions = new ArrayList<>(); - actions.add(buildRemoteAction(activity, R.drawable.exo_icon_previous, R.string.exo_controls_previous_description, ActionEvent.PREV)); + actions.add(buildRemoteAction(activity, com.fongmi.android.tv.R.drawable.ic_action_audio, R.string.exo_controls_hide, ActionEvent.AUDIO)); actions.add(getPlayPauseAction(activity, play)); actions.add(buildRemoteAction(activity, R.drawable.exo_icon_next, R.string.exo_controls_next_description, ActionEvent.NEXT)); try { diff --git a/app/src/mobile/res/drawable/ic_action_audio.xml b/app/src/mobile/res/drawable/ic_action_audio.xml new file mode 100644 index 000000000..454f8f9ed --- /dev/null +++ b/app/src/mobile/res/drawable/ic_action_audio.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file