Merge "Fix screen getting relocked after unlocking once and wallpaper dream has stopped" into udc-qpr-dev

This commit is contained in:
Coco Duan
2023-06-09 18:01:57 +00:00
committed by Android (Google) Code Review
3 changed files with 40 additions and 15 deletions

View File

@@ -600,8 +600,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// What we do when the user double-taps on home
private int mDoubleTapOnHomeBehavior;
// Whether to lock the device after the next app transition has finished.
boolean mLockAfterAppTransitionFinished;
// Whether to lock the device after the next dreaming transition has finished.
private boolean mLockAfterDreamingTransitionFinished;
// Allowed theater mode wake actions
private boolean mAllowTheaterModeWakeFromKey;
@@ -1103,7 +1103,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
synchronized (mLock) {
// If the setting to lock instantly on power button press is true, then set the flag to
// lock after the dream transition has finished.
mLockAfterAppTransitionFinished =
mLockAfterDreamingTransitionFinished =
mLockPatternUtils.getPowerButtonInstantlyLocks(mCurrentUserId);
}
@@ -2252,20 +2252,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
true /* notifyOccluded */);
synchronized (mLock) {
mLockAfterAppTransitionFinished = false;
mLockAfterDreamingTransitionFinished = false;
}
}
@Override
public void onAppTransitionFinishedLocked(IBinder token) {
synchronized (mLock) {
if (!mLockAfterAppTransitionFinished) {
return;
final DreamManagerInternal dreamManagerInternal = getDreamManagerInternal();
// check both isDreaming and mLockAfterDreamingTransitionFinished before lockNow
// so it won't relock after dreaming has stopped
if (dreamManagerInternal != null && dreamManagerInternal.isDreaming()
&& mLockAfterDreamingTransitionFinished) {
lockNow(null);
}
mLockAfterAppTransitionFinished = false;
mLockAfterDreamingTransitionFinished = false;
}
lockNow(null);
}
});

View File

@@ -58,9 +58,20 @@ public class PowerKeyGestureTests extends ShortcutKeyTestBase {
mPhoneWindowManager.overrideCanStartDreaming(true);
sendKey(KEYCODE_POWER);
mPhoneWindowManager.assertDreamRequest();
mPhoneWindowManager.overrideIsDreaming(true);
mPhoneWindowManager.assertLockedAfterAppTransitionFinished();
}
@Test
public void testAppTransitionFinishedCalledAfterDreamStoppedWillNotLockAgain() {
mPhoneWindowManager.overrideShortPressOnPower(SHORT_PRESS_POWER_DREAM_OR_SLEEP);
mPhoneWindowManager.overrideCanStartDreaming(true);
sendKey(KEYCODE_POWER);
mPhoneWindowManager.assertDreamRequest();
mPhoneWindowManager.overrideIsDreaming(false);
mPhoneWindowManager.assertDidNotLockAfterAppTransitionFinished();
}
/**
* Power double-press to launch camera does not lock device when the single press behavior is to
* dream.
@@ -72,7 +83,7 @@ public class PowerKeyGestureTests extends ShortcutKeyTestBase {
sendKey(KEYCODE_POWER);
sendKey(KEYCODE_POWER);
mPhoneWindowManager.assertCameraLaunch();
mPhoneWindowManager.assertWillNotLockAfterAppTransitionFinished();
mPhoneWindowManager.assertDidNotLockAfterAppTransitionFinished();
}
/**

View File

@@ -65,6 +65,7 @@ import android.hardware.display.DisplayManagerInternal;
import android.media.AudioManagerInternal;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.RemoteException;
@@ -344,6 +345,10 @@ class TestPhoneWindowManager {
doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean());
}
void overrideIsDreaming(boolean isDreaming) {
doReturn(isDreaming).when(mDreamManagerInternal).isDreaming();
}
void overrideDisplayState(int state) {
doReturn(state).when(mDisplay).getState();
doReturn(state == STATE_ON).when(mDisplayPolicy).isAwake();
@@ -520,19 +525,26 @@ class TestPhoneWindowManager {
verify(mInputManagerInternal).toggleCapsLock(anyInt());
}
void assertWillNotLockAfterAppTransitionFinished() {
Assert.assertFalse(mPhoneWindowManager.mLockAfterAppTransitionFinished);
}
void assertLockedAfterAppTransitionFinished() {
ArgumentCaptor<AppTransitionListener> transitionCaptor =
ArgumentCaptor.forClass(AppTransitionListener.class);
verify(mWindowManagerInternal).registerAppTransitionListener(
transitionCaptor.capture());
transitionCaptor.getValue().onAppTransitionFinishedLocked(any());
final IBinder token = mock(IBinder.class);
transitionCaptor.getValue().onAppTransitionFinishedLocked(token);
verify(mPhoneWindowManager).lockNow(null);
}
void assertDidNotLockAfterAppTransitionFinished() {
ArgumentCaptor<AppTransitionListener> transitionCaptor =
ArgumentCaptor.forClass(AppTransitionListener.class);
verify(mWindowManagerInternal).registerAppTransitionListener(
transitionCaptor.capture());
final IBinder token = mock(IBinder.class);
transitionCaptor.getValue().onAppTransitionFinishedLocked(token);
verify(mPhoneWindowManager, never()).lockNow(null);
}
void assertGoToHomescreen() {
waitForIdle();
verify(mPhoneWindowManager).launchHomeFromHotKey(anyInt());