Merge "Deprecate FLAG_DISMISS_KEYGUARD"
This commit is contained in:
@@ -44385,7 +44385,7 @@ package android.view {
|
||||
field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000
|
||||
field public static final deprecated int FLAG_BLUR_BEHIND = 4; // 0x4
|
||||
field public static final int FLAG_DIM_BEHIND = 2; // 0x2
|
||||
field public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
|
||||
field public static final deprecated int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
|
||||
field public static final deprecated int FLAG_DITHER = 4096; // 0x1000
|
||||
field public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = -2147483648; // 0x80000000
|
||||
field public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800
|
||||
|
||||
@@ -47541,7 +47541,7 @@ package android.view {
|
||||
field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000
|
||||
field public static final deprecated int FLAG_BLUR_BEHIND = 4; // 0x4
|
||||
field public static final int FLAG_DIM_BEHIND = 2; // 0x2
|
||||
field public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
|
||||
field public static final deprecated int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
|
||||
field public static final deprecated int FLAG_DITHER = 4096; // 0x1000
|
||||
field public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = -2147483648; // 0x80000000
|
||||
field public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800
|
||||
|
||||
@@ -44641,7 +44641,7 @@ package android.view {
|
||||
field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000
|
||||
field public static final deprecated int FLAG_BLUR_BEHIND = 4; // 0x4
|
||||
field public static final int FLAG_DIM_BEHIND = 2; // 0x2
|
||||
field public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
|
||||
field public static final deprecated int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
|
||||
field public static final deprecated int FLAG_DITHER = 4096; // 0x1000
|
||||
field public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = -2147483648; // 0x80000000
|
||||
field public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800
|
||||
|
||||
@@ -922,8 +922,11 @@ public interface WindowManager extends ViewManager {
|
||||
* unlock credential) than the user will still need to confirm it before
|
||||
* seeing this window, unless {@link #FLAG_SHOW_WHEN_LOCKED} has
|
||||
* also been set.
|
||||
* @see KeyguardManager#dismissKeyguard
|
||||
* @deprecated Use {@link #FLAG_SHOW_WHEN_LOCKED} or {@link KeyguardManager#dismissKeyguard}
|
||||
* instead. The Keyguard should never be dismissed automatically repeatedly as it also
|
||||
* guards against unintentional touches.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final int FLAG_DISMISS_KEYGUARD = 0x00400000;
|
||||
|
||||
/** Window flag: when set the window will accept for touch events
|
||||
|
||||
@@ -1830,11 +1830,10 @@ final class ActivityStack extends ConfigurationContainer {
|
||||
// If keyguard is showing, nothing is visible, except if we are able to dismiss Keyguard
|
||||
// right away.
|
||||
return shouldBeVisible && mStackSupervisor.mKeyguardController
|
||||
.canShowActivityWhileKeyguardShowing(dismissKeyguard);
|
||||
.canShowActivityWhileKeyguardShowing(r, dismissKeyguard);
|
||||
} else if (keyguardLocked) {
|
||||
|
||||
// Show when locked windows above keyguard.
|
||||
return shouldBeVisible && showWhenLocked;
|
||||
return shouldBeVisible && mStackSupervisor.mKeyguardController.canShowWhileOccluded(
|
||||
dismissKeyguard, showWhenLocked);
|
||||
} else {
|
||||
return shouldBeVisible;
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ class KeyguardController {
|
||||
private boolean mKeyguardShowing;
|
||||
private boolean mKeyguardGoingAway;
|
||||
private boolean mOccluded;
|
||||
private boolean mDismissalRequested;
|
||||
private ActivityRecord mDismissingKeyguardActivity;
|
||||
private int mBeforeUnoccludeTransit;
|
||||
private int mVisibilityTransactionDepth;
|
||||
@@ -95,9 +96,7 @@ class KeyguardController {
|
||||
mKeyguardShowing = showing;
|
||||
if (showing) {
|
||||
mKeyguardGoingAway = false;
|
||||
|
||||
// Allow an activity to redismiss Keyguard.
|
||||
mDismissingKeyguardActivity = null;
|
||||
mDismissalRequested = false;
|
||||
}
|
||||
mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
|
||||
mService.updateSleepIfNeededLocked();
|
||||
@@ -183,8 +182,20 @@ class KeyguardController {
|
||||
* @return True if we may show an activity while Keyguard is showing because we are in the
|
||||
* process of dismissing it anyways, false otherwise.
|
||||
*/
|
||||
boolean canShowActivityWhileKeyguardShowing(boolean dismissKeyguard) {
|
||||
return dismissKeyguard && canDismissKeyguard();
|
||||
boolean canShowActivityWhileKeyguardShowing(ActivityRecord r, boolean dismissKeyguard) {
|
||||
|
||||
// Allow to show it when we are about to dismiss Keyguard. This isn't allowed if r is
|
||||
// already the dismissing activity, in which case we don't allow it to repeatedly dismiss
|
||||
// Keyguard.
|
||||
return dismissKeyguard && canDismissKeyguard() &&
|
||||
(mDismissalRequested || r != mDismissingKeyguardActivity);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return True if we may show an activity while Keyguard is occluded, false otherwise.
|
||||
*/
|
||||
boolean canShowWhileOccluded(boolean dismissKeyguard, boolean showWhenLocked) {
|
||||
return showWhenLocked || dismissKeyguard && !mWindowManager.isKeyguardSecure();
|
||||
}
|
||||
|
||||
private void visibilitiesUpdated() {
|
||||
@@ -199,7 +210,14 @@ class KeyguardController {
|
||||
|
||||
// Only the very top activity may control occluded state
|
||||
if (stackNdx == topStackNdx) {
|
||||
mOccluded = stack.topActivityOccludesKeyguard();
|
||||
|
||||
// A dismissing activity occludes Keyguard in the insecure case for legacy reasons.
|
||||
final ActivityRecord topDismissing = stack.getTopDismissingKeyguardActivity();
|
||||
mOccluded = stack.topActivityOccludesKeyguard()
|
||||
|| (topDismissing != null
|
||||
&& stack.topRunningActivityLocked() == topDismissing
|
||||
&& canShowWhileOccluded(true /* dismissKeyguard */,
|
||||
false /* showWhenLocked */));
|
||||
}
|
||||
if (mDismissingKeyguardActivity == null
|
||||
&& stack.getTopDismissingKeyguardActivity() != null) {
|
||||
@@ -239,8 +257,13 @@ class KeyguardController {
|
||||
* Called when somebody might want to dismiss the Keyguard.
|
||||
*/
|
||||
private void handleDismissKeyguard() {
|
||||
if (mDismissingKeyguardActivity != null) {
|
||||
// We only allow dismissing Keyguard via the flag when Keyguard is secure for legacy
|
||||
// reasons, because that's how apps used to dismiss Keyguard in the secure case. In the
|
||||
// insecure case, we actually show it on top of the lockscreen. See #canShowWhileOccluded.
|
||||
if (!mOccluded && mDismissingKeyguardActivity != null
|
||||
&& mWindowManager.isKeyguardSecure()) {
|
||||
mWindowManager.dismissKeyguard(null /* callback */);
|
||||
mDismissalRequested = true;
|
||||
|
||||
// If we are about to unocclude the Keyguard, but we can dismiss it without security,
|
||||
// we immediately dismiss the Keyguard so the activity gets shown without a flicker.
|
||||
@@ -296,6 +319,7 @@ class KeyguardController {
|
||||
pw.println(prefix + " mKeyguardGoingAway=" + mKeyguardGoingAway);
|
||||
pw.println(prefix + " mOccluded=" + mOccluded);
|
||||
pw.println(prefix + " mDismissingKeyguardActivity=" + mDismissingKeyguardActivity);
|
||||
pw.println(prefix + " mDismissalRequested=" + mDismissalRequested);
|
||||
pw.println(prefix + " mVisibilityTransactionDepth=" + mVisibilityTransactionDepth);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user