summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java20
-rw-r--r--services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java13
-rw-r--r--services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java22
3 files changed, 40 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index b1201ba5bf55..8488f2aa99b8 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -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;
@@ -1104,7 +1104,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);
}
@@ -2253,20 +2253,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);
}
});
diff --git a/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java b/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java
index 5863e9d9243a..6a9f283c9c4c 100644
--- a/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java
@@ -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();
}
/**
diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
index af48cbd616ac..766a88f6476c 100644
--- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
+++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
@@ -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());