diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/PhoneWindowManager.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 1d064ded4292..9127d0a3908e 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -184,6 +184,7 @@ import android.provider.Settings; import android.service.dreams.DreamManagerInternal; import android.service.dreams.DreamService; import android.service.dreams.IDreamManager; +import android.service.vr.IPersistentVrStateCallbacks; import android.speech.RecognizerIntent; import android.telecom.TelecomManager; import android.util.DisplayMetrics; @@ -512,6 +513,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { volatile boolean mGoingToSleep; volatile boolean mRecentsVisible; volatile boolean mPictureInPictureVisible; + // Written by vr manager thread, only read in this class. + volatile private boolean mPersistentVrModeEnabled; volatile private boolean mDismissImeOnBackKeyPressed; // Used to hold the last user key used to wake the device. This helps us prevent up events @@ -1002,6 +1005,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { } MyOrientationListener mOrientationListener; + final IPersistentVrStateCallbacks mPersistentVrModeListener = + new IPersistentVrStateCallbacks.Stub() { + @Override + public void onPersistentVrStateChanged(boolean enabled) { + mPersistentVrModeEnabled = enabled; + } + }; + private final StatusBarController mStatusBarController = new StatusBarController(); private final BarController mNavigationBarController = new BarController("NavigationBar", @@ -6909,7 +6920,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { || mAllowAllRotations == 1 || orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR || orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_USER) { - preferredRotation = sensorRotation; + // In VrMode, we report the sensor as always being in default orientation so: + // 1) The orientation doesn't change as the user moves their head. + // 2) 2D apps within VR show in the device's default orientation. + // This only overwrites the sensor-provided orientation and does not affect any + // explicit orientation preferences specified by any activities. + preferredRotation = + mPersistentVrModeEnabled ? Surface.ROTATION_0 : sensorRotation; } else { preferredRotation = lastRotation; } @@ -7083,6 +7100,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mKeyguardDelegate.onSystemReady(); mVrManagerInternal = LocalServices.getService(VrManagerInternal.class); + if (mVrManagerInternal != null) { + mVrManagerInternal.addPersistentVrModeStateListener(mPersistentVrModeListener); + } readCameraLensCoverState(); updateUiMode(); |