Clear task snapshot when we showSurfaceBehindKeyguard.
To prevent extra blocking calls to ActivityManager, rather than calling ActivityManagerWrapper#invalidateHomeTaskSnapshot, add a transit flag to have ActivityTaskManager handle this as part of the goingAway call. Bug: 229890190 Test: atest SystemUITests Change-Id: Ica1b552a332d0c946d6008965c1a2881b646e365
This commit is contained in:
@@ -487,6 +487,13 @@ public interface WindowManager extends ViewManager {
|
||||
*/
|
||||
int TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION = 0x8;
|
||||
|
||||
/**
|
||||
* Transition flag: Keyguard is going away to the launcher, and it needs us to clear the task
|
||||
* snapshot of the launcher because it has changed something in the Launcher window.
|
||||
* @hide
|
||||
*/
|
||||
int TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT = 0x16;
|
||||
|
||||
/**
|
||||
* Transition flag: App is crashed.
|
||||
* @hide
|
||||
@@ -527,6 +534,7 @@ public interface WindowManager extends ViewManager {
|
||||
TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION,
|
||||
TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER,
|
||||
TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION,
|
||||
TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT,
|
||||
TRANSIT_FLAG_APP_CRASHED,
|
||||
TRANSIT_FLAG_OPEN_BEHIND,
|
||||
TRANSIT_FLAG_KEYGUARD_LOCKED,
|
||||
|
||||
@@ -48,6 +48,7 @@ public interface WindowManagerPolicyConstants {
|
||||
int KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS = 1 << 1;
|
||||
int KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER = 1 << 2;
|
||||
int KEYGUARD_GOING_AWAY_FLAG_SUBTLE_WINDOW_ANIMATIONS = 1 << 3;
|
||||
int KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT = 1 << 4;
|
||||
|
||||
// Flags used for indicating whether the internal and/or external input devices
|
||||
// of some type are available.
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
package com.android.systemui.keyguard;
|
||||
|
||||
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;
|
||||
|
||||
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN;
|
||||
@@ -119,7 +121,6 @@ import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.keyguard.dagger.KeyguardModule;
|
||||
import com.android.systemui.navigationbar.NavigationModeController;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
@@ -2307,8 +2308,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
int flags = 0;
|
||||
if (mKeyguardViewControllerLazy.get().shouldDisableWindowAnimationsForUnlock()
|
||||
|| mWakeAndUnlocking && !mWallpaperSupportsAmbientMode) {
|
||||
flags |= WindowManagerPolicyConstants
|
||||
.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS;
|
||||
flags |= KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS;
|
||||
}
|
||||
if (mKeyguardViewControllerLazy.get().isGoingToNotificationShade()
|
||||
|| mWakeAndUnlocking && mWallpaperSupportsAmbientMode) {
|
||||
@@ -2324,6 +2324,15 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
.KEYGUARD_GOING_AWAY_FLAG_SUBTLE_WINDOW_ANIMATIONS;
|
||||
}
|
||||
|
||||
// If we are unlocking to the launcher, clear the snapshot so that any changes as part
|
||||
// of the in-window animations are reflected. This is needed even if we're not actually
|
||||
// playing in-window animations for this particular unlock since a previous unlock might
|
||||
// have changed the Launcher state.
|
||||
if (mWakeAndUnlocking
|
||||
&& KeyguardUnlockAnimationController.Companion.isNexusLauncherUnderneath()) {
|
||||
flags |= KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
}
|
||||
|
||||
mUpdateMonitor.setKeyguardGoingAway(true);
|
||||
mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(true);
|
||||
|
||||
@@ -2628,9 +2637,18 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
mSurfaceBehindRemoteAnimationRequested = true;
|
||||
|
||||
try {
|
||||
ActivityTaskManager.getService().keyguardGoingAway(
|
||||
WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS
|
||||
| WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER);
|
||||
int flags = KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS
|
||||
| KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;
|
||||
|
||||
// If we are unlocking to the launcher, clear the snapshot so that any changes as part
|
||||
// of the in-window animations are reflected. This is needed even if we're not actually
|
||||
// playing in-window animations for this particular unlock since a previous unlock might
|
||||
// have changed the Launcher state.
|
||||
if (KeyguardUnlockAnimationController.Companion.isNexusLauncherUnderneath()) {
|
||||
flags |= KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
}
|
||||
|
||||
ActivityTaskManager.getService().keyguardGoingAway(flags);
|
||||
mKeyguardStateController.notifyKeyguardGoingAway(true);
|
||||
} catch (RemoteException e) {
|
||||
mSurfaceBehindRemoteAnimationRequested = false;
|
||||
@@ -2796,12 +2814,6 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
Trace.beginSection("KeyguardViewMediator#onWakeAndUnlocking");
|
||||
mWakeAndUnlocking = true;
|
||||
|
||||
// We're going to animate in the Launcher, so ask WM to clear the task snapshot so we don't
|
||||
// initially display an old snapshot with all of the icons visible. We're System UI, so
|
||||
// we're allowed to pass in null to ask WM to find the home activity for us to prevent
|
||||
// needing to IPC to Launcher.
|
||||
ActivityManagerWrapper.getInstance().invalidateHomeTaskSnapshot(null /* homeActivity */);
|
||||
|
||||
keyguardDone();
|
||||
Trace.endSection();
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ import static android.provider.Settings.Global.HIDE_ERROR_DIALOGS;
|
||||
import static android.provider.Settings.System.FONT_SCALE;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.Display.INVALID_DISPLAY;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
import static android.view.WindowManager.TRANSIT_WAKE;
|
||||
|
||||
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
|
||||
@@ -3398,6 +3399,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
synchronized (mGlobalLock) {
|
||||
// Keyguard asked us to clear the home task snapshot before going away, so do that.
|
||||
if ((flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT) != 0) {
|
||||
mActivityClientController.invalidateHomeTaskSnapshot(null /* token */);
|
||||
}
|
||||
|
||||
mRootWindowContainer.forAllDisplays(displayContent -> {
|
||||
mKeyguardController.keyguardGoingAway(displayContent.getDisplayId(), flags);
|
||||
});
|
||||
|
||||
@@ -22,6 +22,7 @@ import static android.view.WindowManager.TRANSIT_CLOSE;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_APP_CRASHED;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_OPEN_BEHIND;
|
||||
@@ -1259,6 +1260,9 @@ public class AppTransition implements Dump {
|
||||
"TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER"));
|
||||
sFlagToString.add(new Pair<>(TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION,
|
||||
"TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION"));
|
||||
sFlagToString.add(new Pair<>(
|
||||
TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT,
|
||||
"TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_WITH_IN_WINDOW_ANIMATIONS"));
|
||||
sFlagToString.add(new Pair<>(TRANSIT_FLAG_APP_CRASHED,
|
||||
"TRANSIT_FLAG_APP_CRASHED"));
|
||||
sFlagToString.add(new Pair<>(TRANSIT_FLAG_OPEN_BEHIND,
|
||||
|
||||
@@ -23,6 +23,7 @@ import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE;
|
||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
|
||||
import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
|
||||
@@ -32,6 +33,7 @@ import static android.view.WindowManager.TRANSIT_OPEN;
|
||||
import static android.view.WindowManager.TRANSIT_TO_BACK;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_SUBTLE_WINDOW_ANIMATIONS;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE;
|
||||
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;
|
||||
|
||||
@@ -309,6 +311,10 @@ class KeyguardController {
|
||||
if ((keyguardGoingAwayFlags & KEYGUARD_GOING_AWAY_FLAG_SUBTLE_WINDOW_ANIMATIONS) != 0) {
|
||||
result |= TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION;
|
||||
}
|
||||
if ((keyguardGoingAwayFlags
|
||||
& KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT) != 0) {
|
||||
result |= TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user