setTurnScreenOn can only used as wakeup
setTurnScreenOn shouldn't dismiss keyguard automatically even when the keyguard is insecure. The keyguard state should only be affected by requestDismissKeyguard and/or setShowWhenLocked, and for either case setTurnScreenOn can be used to wakeup device if the activity is going to be resumed and visible. Bug: 201103497 Test: atest ActivityVisibilityTests KeyguardTests KeyguardLockedTests Change-Id: I283dea469a33286fc9cf835e39ee5a3be2444739
This commit is contained in:
@@ -77,7 +77,6 @@ import android.os.IBinder;
|
||||
import android.os.Looper;
|
||||
import android.os.Parcelable;
|
||||
import android.os.PersistableBundle;
|
||||
import android.os.PowerManager;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager.ServiceNotFoundException;
|
||||
@@ -8805,9 +8804,7 @@ public class Activity extends ContextThemeWrapper
|
||||
* the activity is visible after the screen is turned on when the lockscreen is up. In addition,
|
||||
* if this flag is set and the activity calls {@link
|
||||
* KeyguardManager#requestDismissKeyguard(Activity, KeyguardManager.KeyguardDismissCallback)}
|
||||
* the screen will turn on. If the screen is off and device is not secured, this flag can turn
|
||||
* screen on and dismiss keyguard to make this activity visible and resume, which can be used to
|
||||
* replace {@link PowerManager#ACQUIRE_CAUSES_WAKEUP}
|
||||
* the screen will turn on.
|
||||
*
|
||||
* @param turnScreenOn {@code true} to turn on the screen; {@code false} otherwise.
|
||||
*
|
||||
|
||||
@@ -194,8 +194,7 @@ class KeyguardController {
|
||||
|
||||
if (keyguardChanged) {
|
||||
// Irrelevant to AOD.
|
||||
dismissMultiWindowModeForTaskIfNeeded(null /* currentTaskControllsingOcclusion */,
|
||||
false /* turningScreenOn */);
|
||||
dismissMultiWindowModeForTaskIfNeeded(null /* currentTaskControllsingOcclusion */);
|
||||
mKeyguardGoingAway = false;
|
||||
if (keyguardShowing) {
|
||||
mDismissalRequested = false;
|
||||
@@ -396,6 +395,8 @@ class KeyguardController {
|
||||
mService.continueWindowLayout();
|
||||
}
|
||||
}
|
||||
dismissMultiWindowModeForTaskIfNeeded(topActivity != null
|
||||
? topActivity.getRootTask() : null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -421,21 +422,6 @@ class KeyguardController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when somebody wants to turn screen on.
|
||||
*/
|
||||
private void handleTurnScreenOn(int displayId) {
|
||||
if (displayId != DEFAULT_DISPLAY) {
|
||||
return;
|
||||
}
|
||||
|
||||
mTaskSupervisor.wakeUp("handleTurnScreenOn");
|
||||
if (mKeyguardShowing && canDismissKeyguard()) {
|
||||
mWindowManager.dismissKeyguard(null /* callback */, null /* message */);
|
||||
mDismissalRequested = true;
|
||||
}
|
||||
}
|
||||
|
||||
boolean isDisplayOccluded(int displayId) {
|
||||
return getDisplayState(displayId).mOccluded;
|
||||
}
|
||||
@@ -449,11 +435,9 @@ class KeyguardController {
|
||||
}
|
||||
|
||||
private void dismissMultiWindowModeForTaskIfNeeded(
|
||||
@Nullable Task currentTaskControllingOcclusion, boolean turningScreenOn) {
|
||||
// If turningScreenOn is true, it means that the visibility state has changed from
|
||||
// currentTaskControllingOcclusion and we should update windowing mode.
|
||||
@Nullable Task currentTaskControllingOcclusion) {
|
||||
// TODO(b/113840485): Handle docked stack for individual display.
|
||||
if (!turningScreenOn && (!mKeyguardShowing || !isDisplayOccluded(DEFAULT_DISPLAY))) {
|
||||
if (!mKeyguardShowing || !isDisplayOccluded(DEFAULT_DISPLAY)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -592,26 +576,17 @@ class KeyguardController {
|
||||
&& controller.mWindowManager.isKeyguardSecure(
|
||||
controller.mService.getCurrentUserId());
|
||||
|
||||
boolean occludingChange = false;
|
||||
boolean turningScreenOn = false;
|
||||
if (mTopTurnScreenOnActivity != lastTurnScreenOnActivity
|
||||
&& mTopTurnScreenOnActivity != null
|
||||
&& !mService.mWindowManager.mPowerManager.isInteractive()
|
||||
&& (mRequestDismissKeyguard || occludedByActivity
|
||||
|| controller.canDismissKeyguard())) {
|
||||
turningScreenOn = true;
|
||||
controller.handleTurnScreenOn(mDisplayId);
|
||||
&& (mRequestDismissKeyguard || occludedByActivity)) {
|
||||
controller.mTaskSupervisor.wakeUp("handleTurnScreenOn");
|
||||
mTopTurnScreenOnActivity.setCurrentLaunchCanTurnScreenOn(false);
|
||||
}
|
||||
|
||||
if (lastOccluded != mOccluded) {
|
||||
occludingChange = true;
|
||||
controller.handleOccludedChanged(mDisplayId, mTopOccludesActivity);
|
||||
}
|
||||
|
||||
if (occludingChange || turningScreenOn) {
|
||||
controller.dismissMultiWindowModeForTaskIfNeeded(task, turningScreenOn);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user