diff options
| author | 2023-01-29 19:28:06 +0000 | |
|---|---|---|
| committer | 2023-01-29 19:28:06 +0000 | |
| commit | c1cb41e9f7be008106c833cafe6029b1345aedc5 (patch) | |
| tree | 3f65327d5f355db776a7d7d87e5731d78e3fc265 | |
| parent | ad84af50f647dcb3910b8f853d6e034e13b60d70 (diff) | |
| parent | 7130f9eebcd3bc417bb868de0f5c76ae1030dd9e (diff) | |
Merge "Fallback to orientation read from the sysprop instead of ROTATION_0." into tm-qpr-dev
3 files changed, 38 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index 6f7ff5c21d94..3404279d2c59 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -249,11 +249,13 @@ public class DisplayRotation { mDeskDockRotation = readRotation(R.integer.config_deskDockRotation); mUndockedHdmiRotation = readRotation(R.integer.config_undockedHdmiRotation); - mRotation = readDefaultDisplayRotation(displayAddress); + int defaultRotation = readDefaultDisplayRotation(displayAddress); + mRotation = defaultRotation; if (isDefaultDisplay) { final Handler uiHandler = UiThread.getHandler(); - mOrientationListener = new OrientationListener(mContext, uiHandler); + mOrientationListener = + new OrientationListener(mContext, uiHandler, defaultRotation); mOrientationListener.setCurrentRotation(mRotation); mSettingsObserver = new SettingsObserver(uiHandler); mSettingsObserver.observe(); @@ -1735,8 +1737,9 @@ public class DisplayRotation { private class OrientationListener extends WindowOrientationListener implements Runnable { transient boolean mEnabled; - OrientationListener(Context context, Handler handler) { - super(context, handler); + OrientationListener(Context context, Handler handler, + @Surface.Rotation int defaultRotation) { + super(context, handler, defaultRotation); } @Override diff --git a/services/core/java/com/android/server/wm/WindowOrientationListener.java b/services/core/java/com/android/server/wm/WindowOrientationListener.java index 3e165e442d79..14c816db0dbb 100644 --- a/services/core/java/com/android/server/wm/WindowOrientationListener.java +++ b/services/core/java/com/android/server/wm/WindowOrientationListener.java @@ -88,14 +88,19 @@ public abstract class WindowOrientationListener { private final Object mLock = new Object(); + @Surface.Rotation + private final int mDefaultRotation; + /** * Creates a new WindowOrientationListener. * * @param context for the WindowOrientationListener. * @param handler Provides the Looper for receiving sensor updates. + * @param defaultRotation Default rotation of the display. */ - public WindowOrientationListener(Context context, Handler handler) { - this(context, handler, SensorManager.SENSOR_DELAY_UI); + public WindowOrientationListener(Context context, Handler handler, + @Surface.Rotation int defaultRotation) { + this(context, handler, defaultRotation, SensorManager.SENSOR_DELAY_UI); } /** @@ -103,7 +108,7 @@ public abstract class WindowOrientationListener { * * @param context for the WindowOrientationListener. * @param handler Provides the Looper for receiving sensor updates. - * @param wmService WindowManagerService to read the device config from. + * @param defaultRotation Default rotation of the display. * @param rate at which sensor events are processed (see also * {@link android.hardware.SensorManager SensorManager}). Use the default * value of {@link android.hardware.SensorManager#SENSOR_DELAY_NORMAL @@ -111,10 +116,11 @@ public abstract class WindowOrientationListener { * * This constructor is private since no one uses it. */ - private WindowOrientationListener( - Context context, Handler handler, int rate) { + private WindowOrientationListener(Context context, Handler handler, + @Surface.Rotation int defaultRotation, int rate) { mContext = context; mHandler = handler; + mDefaultRotation = defaultRotation; mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); mRate = rate; List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_DEVICE_ORIENTATION); @@ -1159,7 +1165,7 @@ public abstract class WindowOrientationListener { "Reusing the last rotation resolution: " + mLastRotationResolution); finalizeRotation(mLastRotationResolution); } else { - finalizeRotation(Surface.ROTATION_0); + finalizeRotation(mDefaultRotation); } return; } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java index 3de65c19a1a4..1b3a19954d7f 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java @@ -132,6 +132,19 @@ public class WindowOrientationListenerTest { assertThat(mFinalizedRotation).isEqualTo(DEFAULT_SENSOR_ROTATION); } + @Test + public void testOnSensorChanged_screenLocked_doNotCallRotationResolverReturnDefaultRotation() { + mWindowOrientationListener = new TestableWindowOrientationListener(mMockContext, + mHandler, /* defaultRotation */ Surface.ROTATION_180); + mWindowOrientationListener.mRotationResolverService = mFakeRotationResolverInternal; + mWindowOrientationListener.mIsScreenLocked = true; + + mWindowOrientationListener.mOrientationJudge.onSensorChanged(mFakeSensorEvent); + + assertThat(mWindowOrientationListener.mIsOnProposedRotationChangedCalled).isFalse(); + assertThat(mFinalizedRotation).isEqualTo(Surface.ROTATION_180); + } + static final class TestableRotationResolver extends RotationResolverInternal { @Surface.Rotation RotationResolverCallbackInternal mCallback; @@ -166,21 +179,17 @@ public class WindowOrientationListenerTest { } } - @Test - public void testOnSensorChanged_inLockScreen_doNotCallRotationResolver() { - mWindowOrientationListener.mIsScreenLocked = true; - - mWindowOrientationListener.mOrientationJudge.onSensorChanged(mFakeSensorEvent); - - assertThat(mWindowOrientationListener.mIsOnProposedRotationChangedCalled).isFalse(); - } - final class TestableWindowOrientationListener extends WindowOrientationListener { private boolean mIsOnProposedRotationChangedCalled = false; private boolean mIsScreenLocked; TestableWindowOrientationListener(Context context, Handler handler) { - super(context, handler); + this(context, handler, Surface.ROTATION_0); + } + + TestableWindowOrientationListener(Context context, Handler handler, + @Surface.Rotation int defaultRotation) { + super(context, handler, defaultRotation); this.mOrientationJudge = new OrientationSensorJudge(); } |