diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java index 0dea47e56..8a4fb62da 100644 --- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java @@ -104,6 +104,7 @@ public final class MainVideoPlayer extends AppCompatActivity @Nullable private PlayerState playerState; private boolean isInMultiWindow; + private boolean isBackPressed; /*////////////////////////////////////////////////////////////////////////// // Activity LifeCycle @@ -191,6 +192,12 @@ public final class MainVideoPlayer extends AppCompatActivity } } + @Override + public void onBackPressed() { + super.onBackPressed(); + isBackPressed = true; + } + @Override protected void onSaveInstanceState(Bundle outState) { if (DEBUG) Log.d(TAG, "onSaveInstanceState() called"); @@ -208,10 +215,18 @@ public final class MainVideoPlayer extends AppCompatActivity protected void onStop() { if (DEBUG) Log.d(TAG, "onStop() called"); super.onStop(); - playerImpl.destroy(); - PlayerHelper.setScreenBrightness(getApplicationContext(), getWindow().getAttributes().screenBrightness); + + if (playerImpl == null) return; + if (isBackPressed) { + playerImpl.destroy(); + } else { + playerImpl.minimize(); + } + + isInMultiWindow = false; + isBackPressed = false; } /*////////////////////////////////////////////////////////////////////////// @@ -441,6 +456,20 @@ public final class MainVideoPlayer extends AppCompatActivity switchPopupButton.setOnClickListener(this); } + public void minimize() { + switch (PlayerHelper.getMinimizeOnExitAction(context)) { + case PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_BACKGROUND: + onPlayBackgroundButtonClicked(); + break; + case PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_POPUP: + onFullScreenButtonClicked(); + break; + case PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_NONE: + destroy(); + break; + } + } + /*////////////////////////////////////////////////////////////////////////// // ExoPlayer Video Listener //////////////////////////////////////////////////////////////////////////*/ diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index dbe0e9f46..f8d594114 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; +import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.accessibility.CaptioningManager; @@ -28,6 +29,7 @@ import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueueItem; import org.schabi.newpipe.player.playqueue.SinglePlayQueue; +import java.lang.annotation.Retention; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.ArrayList; @@ -42,6 +44,8 @@ import java.util.concurrent.TimeUnit; import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FILL; import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIT; import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_ZOOM; +import static java.lang.annotation.RetentionPolicy.SOURCE; +import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.*; public class PlayerHelper { private PlayerHelper() {} @@ -51,6 +55,14 @@ public class PlayerHelper { private static final NumberFormat speedFormatter = new DecimalFormat("0.##x"); private static final NumberFormat pitchFormatter = new DecimalFormat("##%"); + @Retention(SOURCE) + @IntDef({MINIMIZE_ON_EXIT_MODE_NONE, MINIMIZE_ON_EXIT_MODE_BACKGROUND, + MINIMIZE_ON_EXIT_MODE_POPUP}) + public @interface MinimizeMode { + int MINIMIZE_ON_EXIT_MODE_NONE = 0; + int MINIMIZE_ON_EXIT_MODE_BACKGROUND = 1; + int MINIMIZE_ON_EXIT_MODE_POPUP = 2; + } //////////////////////////////////////////////////////////////////////////// // Exposed helpers //////////////////////////////////////////////////////////////////////////// @@ -173,6 +185,22 @@ public class PlayerHelper { return isAutoQueueEnabled(context, false); } + @MinimizeMode + public static int getMinimizeOnExitAction(@NonNull final Context context) { + final String defaultAction = context.getString(R.string.minimize_on_exit_none_key); + final String popupAction = context.getString(R.string.minimize_on_exit_popup_key); + final String backgroundAction = context.getString(R.string.minimize_on_exit_background_key); + + final String action = getMinimizeOnExitAction(context, defaultAction); + if (action.equals(popupAction)) { + return MINIMIZE_ON_EXIT_MODE_POPUP; + } else if (action.equals(backgroundAction)) { + return MINIMIZE_ON_EXIT_MODE_BACKGROUND; + } else { + return MINIMIZE_ON_EXIT_MODE_NONE; + } + } + @NonNull public static SeekParameters getSeekParameters(@NonNull final Context context) { return isUsingInexactSeek(context, false) ? @@ -249,7 +277,6 @@ public class PlayerHelper { * System font scaling: * Very small - 0.25f, Small - 0.5f, Normal - 1.0f, Large - 1.5f, Very Large - 2.0f * */ - @NonNull public static float getCaptionScale(@NonNull final Context context) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return 1f; @@ -322,4 +349,10 @@ public class PlayerHelper { return sp.getFloat(context.getString(R.string.screen_brightness_key), screenBrightness); } } + + private static String getMinimizeOnExitAction(@NonNull final Context context, + final String key) { + return getPreferences(context).getString(context.getString(R.string.minimize_on_exit_key), + key); + } } diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index bd0f04e9f..3e73738ed 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -25,6 +25,22 @@ screen_brightness_key screen_brightness_timestamp_key + minimize_on_exit_key + @string/minimize_on_exit_none_key + minimize_on_exit_none_key + minimize_on_exit_background_key + minimize_on_exit_popup_key + + @string/minimize_on_exit_none_key + @string/minimize_on_exit_background_key + @string/minimize_on_exit_popup_key + + + @string/minimize_on_exit_none_description + @string/minimize_on_exit_background_description + @string/minimize_on_exit_popup_description + + default_resolution 360p show_higher_resolutions diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ee80536f..5ca88bd6f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -504,4 +504,11 @@ 144p + + Minimize on application switch + Action when switching to other application from main video player — %s + None + Minimize to background player + Minimize to popup player + diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml index 6ec0da215..a547ffaf2 100644 --- a/app/src/main/res/xml/video_audio_settings.xml +++ b/app/src/main/res/xml/video_audio_settings.xml @@ -90,6 +90,14 @@ android:summary="@string/preferred_open_action_settings_summary" android:title="@string/preferred_open_action_settings_title"/> + +