From 5e166a6384993aae271993c3d983673b9a1c9dd7 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Thu, 24 Sep 2020 02:28:06 +0300 Subject: [PATCH] add more pip options --- .../controller/PlaybackEngineController.java | 2 ++ .../playback/managers/PlayerUiManager.java | 31 +++++++++++++++---- .../app/models/playback/ui/UiOptionItem.java | 4 +-- common/src/main/res/values-ru/strings.xml | 5 ++- common/src/main/res/values/strings.xml | 5 ++- .../tv/ui/playback/PlaybackActivity.java | 3 +- .../tv/ui/playback/PlaybackFragment.java | 16 ++++++++-- 7 files changed, 52 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java index 9b768356a..d80cccd18 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java @@ -23,4 +23,6 @@ public interface PlaybackEngineController { */ void blockEngine(boolean block); boolean isEngineBlocked(); + void enablePIP(boolean enable); + boolean isPIPEnabled(); } diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java index 788f9e4e1..0df74c51e 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java @@ -31,6 +31,7 @@ public class PlayerUiManager extends PlayerEventListenerHelper { private final Map> mRadioCategories = new HashMap<>(); private final Map mSingleOptions = new HashMap<>(); private boolean mBlockEngine; + private boolean mEnablePIP; public PlayerUiManager() { mHandler = new Handler(Looper.getMainLooper()); @@ -101,7 +102,7 @@ public class PlayerUiManager extends PlayerEventListenerHelper { @Override public void onHighQualityClicked() { addQualityCategories(); - addBackgroundPlaybackOption(); + addBackgroundPlaybackCategory(); disableUiAutoHideTimeout(); @@ -166,15 +167,33 @@ public class PlayerUiManager extends PlayerEventListenerHelper { } mController.blockEngine(mBlockEngine); + mController.enablePIP(mEnablePIP); } - private void addBackgroundPlaybackOption() { - addSingleOption(UiOptionItem.from( - mActivity.getString(R.string.dialog_background_playback), + private void addBackgroundPlaybackCategory() { + String categoryTitle = mActivity.getString(R.string.category_background_playback); + + List options = new ArrayList<>(); + options.add(UiOptionItem.from(mActivity.getString(R.string.option_background_playback_off), optionItem -> { - mBlockEngine = optionItem.isSelected(); + mBlockEngine = false; + mEnablePIP = false; updateBackgroundPlayback(); - }, mBlockEngine)); + }, !mBlockEngine && !mEnablePIP)); + options.add(UiOptionItem.from(mActivity.getString(R.string.option_background_playback_all), + optionItem -> { + mBlockEngine = true; + mEnablePIP = true; + updateBackgroundPlayback(); + }, mEnablePIP && mBlockEngine)); + options.add(UiOptionItem.from(mActivity.getString(R.string.option_background_playback_only_audio), + optionItem -> { + mBlockEngine = true; + mEnablePIP = false; + updateBackgroundPlayback(); + }, mBlockEngine && !mEnablePIP)); + + addRadioCategory(categoryTitle, options); } public void addSingleOption(OptionItem option) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/ui/UiOptionItem.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/ui/UiOptionItem.java index 3901134ba..6af365712 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/ui/UiOptionItem.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/ui/UiOptionItem.java @@ -50,11 +50,11 @@ public class UiOptionItem implements OptionItem { return uiOptionItem; } - public static OptionItem from(String title, OptionCallback callback, boolean defaultValue) { + public static OptionItem from(String title, OptionCallback callback, boolean isChecked) { UiOptionItem uiOptionItem = new UiOptionItem(); uiOptionItem.mTitle = title; - uiOptionItem.mIsSelected = defaultValue; + uiOptionItem.mIsSelected = isChecked; uiOptionItem.mCallback = callback; return uiOptionItem; diff --git a/common/src/main/res/values-ru/strings.xml b/common/src/main/res/values-ru/strings.xml index 92476faf8..27535eb70 100644 --- a/common/src/main/res/values-ru/strings.xml +++ b/common/src/main/res/values-ru/strings.xml @@ -21,6 +21,9 @@ Субтитры отключены Автофреймрейт Исправлять fps: %s - Фоновое воспроизведение + Фоновое воспроизведение Пока не готово + Отключен + Видео и аудио + Только аудио \ No newline at end of file diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index a1340f177..5ebca4f14 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -21,6 +21,9 @@ Disable subtitles Auto frame rate Fix fps: %s - Background playback + Background playback Not implemented + Disabled + Video and audio + Only audio \ No newline at end of file diff --git a/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackActivity.java b/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackActivity.java index ad9d6fc5a..4941de7e6 100644 --- a/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackActivity.java +++ b/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackActivity.java @@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment; import android.view.KeyEvent; import android.view.MotionEvent; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.controller.PlaybackEngineController; import com.liskovsoft.smartyoutubetv2.common.app.views.ViewManager; import com.liskovsoft.smartyoutubetv2.tv.R; import com.liskovsoft.smartyoutubetv2.tv.ui.browse.BrowseActivity; @@ -113,7 +114,7 @@ public class PlaybackActivity extends LeanbackActivity { protected void onStop() { super.onStop(); - if (mPlaybackFragment.isEngineBlocked()) { + if (mPlaybackFragment.isEngineBlocked() && mPlaybackFragment.isPIPEnabled()) { enterPIPMode(); if (mBackPressed) { diff --git a/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackFragment.java b/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackFragment.java index 2b21462ad..fea8f6ff8 100644 --- a/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackFragment.java +++ b/smartyoutubetv2/src/main/java/com/liskovsoft/smartyoutubetv2/tv/ui/playback/PlaybackFragment.java @@ -23,13 +23,12 @@ import com.google.android.exoplayer2.ext.leanback.LeanbackPlayerAdapter; import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelection; -import com.google.android.exoplayer2.upstream.BandwidthMeter; -import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.util.Util; import com.liskovsoft.sharedutils.mylogger.Log; import com.liskovsoft.smartyoutubetv2.common.app.models.data.Video; import com.liskovsoft.smartyoutubetv2.common.app.models.data.VideoGroup; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.controller.PlaybackController; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.controller.PlaybackEngineController; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.listener.PlayerEventListener; import com.liskovsoft.smartyoutubetv2.common.app.presenters.PlaybackPresenter; import com.liskovsoft.smartyoutubetv2.common.app.views.PlaybackView; @@ -68,6 +67,7 @@ public class PlaybackFragment extends VideoSupportFragment implements PlaybackVi private final boolean mEnableAnimation = true; private RowsSupportFragment mRowsSupportFragment; private boolean mBlockEngine; + private boolean mEnablePIP; @Override public void onCreate(Bundle savedInstanceState) { @@ -154,7 +154,7 @@ public class PlaybackFragment extends VideoSupportFragment implements PlaybackVi } private void releasePlayer() { - if (mBlockEngine) { + if (isEngineBlocked()) { Log.d(TAG, "releasePlayer: Engine release is blocked. Exiting..."); return; } @@ -415,6 +415,16 @@ public class PlaybackFragment extends VideoSupportFragment implements PlaybackVi return mBlockEngine; } + @Override + public void enablePIP(boolean enable) { + mEnablePIP = enable; + } + + @Override + public boolean isPIPEnabled() { + return mEnablePIP; + } + // End Engine Events @Override