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"/>
+
+