Merge "Fix screen getting relocked after unlocking once and wallpaper dream has stopped" into udc-qpr-dev
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user