diff options
author | ByteHamster <info@bytehamster.com> | 2018-04-09 19:43:50 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2018-04-09 19:43:50 +0200 |
commit | 64221f7f56a422406c2a664e18ad8593e6825ef2 (patch) | |
tree | d200760ad52e8a9e5b358fa06af98b646254e01f | |
parent | 1831430a6e47be1e34d2e8a4b977e79289ca7b2b (diff) | |
download | AntennaPod-64221f7f56a422406c2a664e18ad8593e6825ef2.zip |
Allow to enter PiP automatically
6 files changed, 56 insertions, 10 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index b51f45d93..8431e7b2e 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -226,7 +226,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements @Override protected void onPause() { - if (!supportsAndisInPictureInPictureMode()) { + if (!compatIsInPictureInPictureMode()) { if (controller != null) { controller.reinitServiceIfPaused(); controller.pause(); @@ -917,7 +917,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements } } - /* package */ boolean supportsAndisInPictureInPictureMode() { + /* package */ boolean compatIsInPictureInPictureMode() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && supportsPictureInPicture()) { return isInPictureInPictureMode(); } else { diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java index 4ab934cc2..83635853a 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java @@ -24,6 +24,7 @@ import android.widget.ProgressBar; import android.widget.SeekBar; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.util.playback.ExternalMedia; @@ -101,14 +102,22 @@ public class VideoplayerActivity extends MediaplayerActivity { @Override protected void onStop() { super.onStop(); - if (!supportsAndisInPictureInPictureMode()) { + if (!compatIsInPictureInPictureMode()) { videoControlsHider.stop(); } } @Override + public void onUserLeaveHint () { + if (!compatIsInPictureInPictureMode() && UserPreferences.getVideoBackgroundBehavior() + == UserPreferences.VideoBackgroundBehavior.PICTURE_IN_PICTURE) { + compatEnterPictureInPicture(); + } + } + + @Override protected void onPause() { - if (!supportsAndisInPictureInPictureMode()) { + if (!compatIsInPictureInPictureMode()) { if (controller != null && controller.getStatus() == PlayerStatus.PLAYING) { controller.pause(); } @@ -191,7 +200,7 @@ public class VideoplayerActivity extends MediaplayerActivity { private final View.OnTouchListener onVideoviewTouched = (v, event) -> { if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (supportsAndisInPictureInPictureMode()) { + if (compatIsInPictureInPictureMode()) { return true; } videoControlsHider.stop(); @@ -390,16 +399,20 @@ public class VideoplayerActivity extends MediaplayerActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.player_go_to_picture_in_picture) { - if (supportsPictureInPicture() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - getSupportActionBar().hide(); - hideVideoControls(false); - enterPictureInPictureMode(); - } + compatEnterPictureInPicture(); return true; } return super.onOptionsItemSelected(item); } + private void compatEnterPictureInPicture() { + if (supportsPictureInPicture() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + getSupportActionBar().hide(); + hideVideoControls(false); + enterPictureInPictureMode(); + } + } + private static class VideoControlsHider extends Handler { private static final int DELAY = 2500; diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index ba389fc3c..622fef05b 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -171,6 +171,14 @@ android:key="prefResumeAfterCall" android:summary="@string/pref_resumeAfterCall_sum" android:title="@string/pref_resumeAfterCall_title"/> + <com.afollestad.materialdialogs.prefs.MaterialListPreference + android:defaultValue="stop" + android:entries="@array/video_background_behavior_options" + android:entryValues="@array/video_background_behavior_values" + android:key="prefVideoBehavior" + android:summary="@string/pref_videoBehavior_sum" + android:title="@string/pref_videoBehavior_title" + app:useStockLayout="true"/> </PreferenceCategory> <PreferenceCategory android:title="@string/network_pref"> diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 743ee135d..4a6003af4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -74,6 +74,7 @@ public class UserPreferences { private static final String PREF_PLAYBACK_SPEED_ARRAY = "prefPlaybackSpeedArray"; private static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss"; private static final String PREF_RESUME_AFTER_CALL = "prefResumeAfterCall"; + private static final String PREF_VIDEO_BEHAVIOR = "prefVideoBehavior"; // Network private static final String PREF_ENQUEUE_DOWNLOADED = "prefEnqueueDownloaded"; @@ -661,6 +662,13 @@ public class UserPreferences { .apply(); } + public static VideoBackgroundBehavior getVideoBackgroundBehavior() { + switch (prefs.getString(PREF_VIDEO_BEHAVIOR, "stop")) { + case "stop": return VideoBackgroundBehavior.STOP; + case "pip": return VideoBackgroundBehavior.PICTURE_IN_PICTURE; + default: return VideoBackgroundBehavior.STOP; + } + } public static EpisodeCleanupAlgorithm getEpisodeCleanupAlgorithm() { int cleanupValue = Integer.parseInt(prefs.getString(PREF_EPISODE_CLEANUP, "-1")); @@ -839,4 +847,8 @@ public class UserPreferences { public static boolean isCastEnabled() { return prefs.getBoolean(PREF_CAST_ENABLED, false); } + + public enum VideoBackgroundBehavior { + STOP, PICTURE_IN_PICTURE + } } diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index 45650495c..beb52282b 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -224,4 +224,14 @@ <item>@string/fast_forward_label</item> <item>@string/skip_episode_label</item> </string-array> + + <string-array name="video_background_behavior_options"> + <item>@string/stop_playback</item> + <item>@string/player_go_to_picture_in_picture</item> + </string-array> + + <string-array name="video_background_behavior_values"> + <item>stop</item> + <item>pip</item> + </string-array> </resources> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 5558b97b3..b8286cbd0 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -440,6 +440,9 @@ <string name="pref_cast_message_free_flavor">Chromecast requires third party proprietary libraries that are disabled in this version of AntennaPod</string> <string name="pref_enqueue_downloaded_title">Enqueue Downloaded</string> <string name="pref_enqueue_downloaded_summary">Add downloaded episodes to the queue</string> + <string name="pref_videoBehavior_title">Video behavior</string> + <string name="pref_videoBehavior_sum">Behavior when leaving video playback</string> + <string name="stop_playback">Stop playback</string> <!-- Auto-Flattr dialog --> <string name="auto_flattr_enable">Enable automatic flattring</string> |