From 7130f9eebcd3bc417bb868de0f5c76ae1030dd9e Mon Sep 17 00:00:00 2001 From: Mariia Sandrikova Date: Fri, 27 Jan 2023 01:29:45 +0000 Subject: Fallback to orientation read from the sysprop instead of ROTATION_0. Replacing fallback to ROTATION_0 added in Idb38d60092de0fa7046e7b68baef9288805cb590 to the default value specified in the sysprop ro.bootanim.set_orientation_ and read in DisplayRotation#readDefaultDisplayRotation. This ensures consistency of default rotation values used by the system in different scenarios. Fix: 265700023 Test: atest WindowOrientationListenerTest Change-Id: Ia8792c7e654fb42736d442d09585890db0d5631f --- .../com/android/server/wm/DisplayRotation.java | 11 +++++--- .../server/wm/WindowOrientationListener.java | 18 +++++++++----- .../server/wm/WindowOrientationListenerTest.java | 29 ++++++++++++++-------- 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 e6d8b3db4564..4ffd0b7ba1e8 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -243,11 +243,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(); @@ -1719,8 +1721,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 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(); } -- cgit v1.2.3-59-g8ed1b