Merge "Fallback to orientation read from the sysprop instead of ROTATION_0." into tm-qpr-dev am: c1cb41e9f7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21117400

Change-Id: Ice7b7ffc82c248757c199d38adad2a05404924d7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mariia Sandrikova
2023-01-29 20:57:26 +00:00
committed by Automerger Merge Worker
3 changed files with 38 additions and 20 deletions

View File

@@ -249,11 +249,13 @@ public class DisplayRotation {
mDeskDockRotation = readRotation(R.integer.config_deskDockRotation); mDeskDockRotation = readRotation(R.integer.config_deskDockRotation);
mUndockedHdmiRotation = readRotation(R.integer.config_undockedHdmiRotation); mUndockedHdmiRotation = readRotation(R.integer.config_undockedHdmiRotation);
mRotation = readDefaultDisplayRotation(displayAddress); int defaultRotation = readDefaultDisplayRotation(displayAddress);
mRotation = defaultRotation;
if (isDefaultDisplay) { if (isDefaultDisplay) {
final Handler uiHandler = UiThread.getHandler(); final Handler uiHandler = UiThread.getHandler();
mOrientationListener = new OrientationListener(mContext, uiHandler); mOrientationListener =
new OrientationListener(mContext, uiHandler, defaultRotation);
mOrientationListener.setCurrentRotation(mRotation); mOrientationListener.setCurrentRotation(mRotation);
mSettingsObserver = new SettingsObserver(uiHandler); mSettingsObserver = new SettingsObserver(uiHandler);
mSettingsObserver.observe(); mSettingsObserver.observe();
@@ -1735,8 +1737,9 @@ public class DisplayRotation {
private class OrientationListener extends WindowOrientationListener implements Runnable { private class OrientationListener extends WindowOrientationListener implements Runnable {
transient boolean mEnabled; transient boolean mEnabled;
OrientationListener(Context context, Handler handler) { OrientationListener(Context context, Handler handler,
super(context, handler); @Surface.Rotation int defaultRotation) {
super(context, handler, defaultRotation);
} }
@Override @Override

View File

@@ -88,14 +88,19 @@ public abstract class WindowOrientationListener {
private final Object mLock = new Object(); private final Object mLock = new Object();
@Surface.Rotation
private final int mDefaultRotation;
/** /**
* Creates a new WindowOrientationListener. * Creates a new WindowOrientationListener.
* *
* @param context for the WindowOrientationListener. * @param context for the WindowOrientationListener.
* @param handler Provides the Looper for receiving sensor updates. * @param handler Provides the Looper for receiving sensor updates.
* @param defaultRotation Default rotation of the display.
*/ */
public WindowOrientationListener(Context context, Handler handler) { public WindowOrientationListener(Context context, Handler handler,
this(context, handler, SensorManager.SENSOR_DELAY_UI); @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 context for the WindowOrientationListener.
* @param handler Provides the Looper for receiving sensor updates. * @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 * @param rate at which sensor events are processed (see also
* {@link android.hardware.SensorManager SensorManager}). Use the default * {@link android.hardware.SensorManager SensorManager}). Use the default
* value of {@link android.hardware.SensorManager#SENSOR_DELAY_NORMAL * 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. * This constructor is private since no one uses it.
*/ */
private WindowOrientationListener( private WindowOrientationListener(Context context, Handler handler,
Context context, Handler handler, int rate) { @Surface.Rotation int defaultRotation, int rate) {
mContext = context; mContext = context;
mHandler = handler; mHandler = handler;
mDefaultRotation = defaultRotation;
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mRate = rate; mRate = rate;
List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_DEVICE_ORIENTATION); List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_DEVICE_ORIENTATION);
@@ -1159,7 +1165,7 @@ public abstract class WindowOrientationListener {
"Reusing the last rotation resolution: " + mLastRotationResolution); "Reusing the last rotation resolution: " + mLastRotationResolution);
finalizeRotation(mLastRotationResolution); finalizeRotation(mLastRotationResolution);
} else { } else {
finalizeRotation(Surface.ROTATION_0); finalizeRotation(mDefaultRotation);
} }
return; return;
} }

View File

@@ -132,6 +132,19 @@ public class WindowOrientationListenerTest {
assertThat(mFinalizedRotation).isEqualTo(DEFAULT_SENSOR_ROTATION); 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 { static final class TestableRotationResolver extends RotationResolverInternal {
@Surface.Rotation @Surface.Rotation
RotationResolverCallbackInternal mCallback; 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 { final class TestableWindowOrientationListener extends WindowOrientationListener {
private boolean mIsOnProposedRotationChangedCalled = false; private boolean mIsOnProposedRotationChangedCalled = false;
private boolean mIsScreenLocked; private boolean mIsScreenLocked;
TestableWindowOrientationListener(Context context, Handler handler) { 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(); this.mOrientationJudge = new OrientationSensorJudge();
} }