From 8059ac89d36e92b9f4c8c8dec4acd3c4ff07be5b Mon Sep 17 00:00:00 2001 From: Marcel Dopita Date: Thu, 4 Jul 2019 07:30:01 +0200 Subject: [PATCH] Handle (auto)rotation changes during activity lifecycle Fixes #1156 --- .../newpipe/player/MainVideoPlayer.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) 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 f48ad7019..1491a66aa 100644 --- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java @@ -24,11 +24,13 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.res.Configuration; +import android.database.ContentObserver; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.media.AudioManager; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.preference.PreferenceManager; import android.provider.Settings; import android.support.annotation.ColorInt; @@ -113,6 +115,8 @@ public final class MainVideoPlayer extends AppCompatActivity private boolean isInMultiWindow; private boolean isBackPressed; + private ContentObserver rotationObserver; + /*////////////////////////////////////////////////////////////////////////// // Activity LifeCycle //////////////////////////////////////////////////////////////////////////*/ @@ -147,6 +151,23 @@ public final class MainVideoPlayer extends AppCompatActivity Toast.makeText(this, R.string.general_error, Toast.LENGTH_SHORT).show(); finish(); } + + rotationObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + super.onChange(selfChange); + if (globalScreenOrientationLocked()) { + final boolean lastOrientationWasLandscape = defaultPreferences.getBoolean( + getString(R.string.last_orientation_landscape_key), false); + setLandscape(lastOrientationWasLandscape); + } else { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); + } + } + }; + getContentResolver().registerContentObserver( + Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), + false, rotationObserver); } @Override @@ -239,6 +260,9 @@ public final class MainVideoPlayer extends AppCompatActivity playerState = createPlayerState(); playerImpl.destroy(); + if (rotationObserver != null) + getContentResolver().unregisterContentObserver(rotationObserver); + isInMultiWindow = false; isBackPressed = false; }