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:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user