Merge "Do not set user rotation from rotation callback when docked." into tm-qpr-dev

This commit is contained in:
Bryce Lee
2023-03-08 17:07:41 +00:00
committed by Android (Google) Code Review

View File

@@ -29,8 +29,11 @@ import android.annotation.ColorInt;
import android.annotation.DrawableRes;
import android.annotation.SuppressLint;
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
@@ -86,6 +89,7 @@ public class RotationButtonController {
private RotationButton mRotationButton;
private boolean mIsRecentsAnimationRunning;
private boolean mDocked;
private boolean mHomeRotationEnabled;
private int mLastRotationSuggestion;
private boolean mPendingRotationSuggestion;
@@ -123,6 +127,12 @@ public class RotationButtonController {
() -> mPendingRotationSuggestion = false;
private Animator mRotateHideAnimator;
private final BroadcastReceiver mDockedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateDockedState(intent);
}
};
private final IRotationWatcher.Stub mRotationWatcher = new IRotationWatcher.Stub() {
@Override
@@ -136,7 +146,8 @@ public class RotationButtonController {
// The isVisible check makes the rotation button disappear when we are not locked
// (e.g. for tabletop auto-rotate).
if (rotationLocked || mRotationButton.isVisible()) {
if (shouldOverrideUserLockPrefs(rotation) && rotationLocked) {
// Do not allow a change in rotation to set user rotation when docked.
if (shouldOverrideUserLockPrefs(rotation) && rotationLocked && !mDocked) {
setRotationLockedAtAngle(rotation);
}
setRotateSuggestionButtonState(false /* visible */, true /* forced */);
@@ -214,6 +225,10 @@ public class RotationButtonController {
}
mListenersRegistered = true;
updateDockedState(mContext.registerReceiver(mDockedReceiver,
new IntentFilter(Intent.ACTION_DOCK_EVENT)));
try {
WindowManagerGlobal.getWindowManagerService()
.watchRotation(mRotationWatcher, DEFAULT_DISPLAY);
@@ -234,6 +249,8 @@ public class RotationButtonController {
}
mListenersRegistered = false;
mContext.unregisterReceiver(mDockedReceiver);
try {
WindowManagerGlobal.getWindowManagerService().removeRotationWatcher(mRotationWatcher);
} catch (RemoteException e) {
@@ -345,6 +362,15 @@ public class RotationButtonController {
updateRotationButtonStateInOverview();
}
private void updateDockedState(Intent intent) {
if (intent == null) {
return;
}
mDocked = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED)
!= Intent.EXTRA_DOCK_STATE_UNDOCKED;
}
private void updateRotationButtonStateInOverview() {
if (mIsRecentsAnimationRunning && !mHomeRotationEnabled) {
setRotateSuggestionButtonState(false, true /* hideImmediately */);