diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index fcfb0ab1a7443..8cc8866214475 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -399,6 +399,11 @@ public interface WindowManager extends ViewManager { * @hide */ int TRANSIT_PIP = 10; + /** + * The screen is turning on. + * @hide + */ + int TRANSIT_WAKE = 11; /** * The first slot for custom transition types. Callers (like Shell) can make use of custom * transition types for dealing with special cases. These types are effectively ignored by @@ -408,7 +413,7 @@ public interface WindowManager extends ViewManager { * implementation. * @hide */ - int TRANSIT_FIRST_CUSTOM = 11; + int TRANSIT_FIRST_CUSTOM = 12; /** * @hide @@ -425,6 +430,7 @@ public interface WindowManager extends ViewManager { TRANSIT_KEYGUARD_OCCLUDE, TRANSIT_KEYGUARD_UNOCCLUDE, TRANSIT_PIP, + TRANSIT_WAKE, TRANSIT_FIRST_CUSTOM }) @Retention(RetentionPolicy.SOURCE) diff --git a/core/java/android/window/TransitionFilter.java b/core/java/android/window/TransitionFilter.java index 607e316aab057..bb3f90b3a1d8c 100644 --- a/core/java/android/window/TransitionFilter.java +++ b/core/java/android/window/TransitionFilter.java @@ -17,6 +17,7 @@ package android.window; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; +import static android.view.WindowManager.TransitionType; import android.annotation.IntDef; import android.annotation.NonNull; @@ -52,7 +53,7 @@ public final class TransitionFilter implements Parcelable { * When non-null: this is a list of transition types that this filter applies to. This filter * will fail for transitions that aren't one of these types. */ - @Nullable public int[] mTypeSet = null; + @Nullable public @TransitionType int[] mTypeSet = null; /** * A list of required changes. To pass, a transition must meet all requirements. diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java index ebc66efad0f7f..a81439914ea17 100644 --- a/core/java/android/window/TransitionInfo.java +++ b/core/java/android/window/TransitionInfo.java @@ -29,6 +29,8 @@ import static android.view.WindowManager.TRANSIT_NONE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; +import static android.view.WindowManager.TransitionFlags; +import static android.view.WindowManager.TransitionType; import static android.view.WindowManager.transitTypeToString; import android.annotation.IntDef; @@ -42,7 +44,6 @@ import android.os.Parcel; import android.os.Parcelable; import android.view.Surface; import android.view.SurfaceControl; -import android.view.WindowManager; import java.util.ArrayList; import java.util.List; @@ -106,8 +107,8 @@ public final class TransitionInfo implements Parcelable { }) public @interface ChangeFlags {} - private final @WindowManager.TransitionOldType int mType; - private final @WindowManager.TransitionFlags int mFlags; + private final @TransitionType int mType; + private final @TransitionFlags int mFlags; private final ArrayList mChanges = new ArrayList<>(); private SurfaceControl mRootLeash; @@ -116,8 +117,7 @@ public final class TransitionInfo implements Parcelable { private AnimationOptions mOptions; /** @hide */ - public TransitionInfo(@WindowManager.TransitionOldType int type, - @WindowManager.TransitionFlags int flags) { + public TransitionInfo(@TransitionType int type, @TransitionFlags int flags) { mType = type; mFlags = flags; } @@ -173,7 +173,7 @@ public final class TransitionInfo implements Parcelable { mOptions = options; } - public int getType() { + public @TransitionType int getType() { return mType; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java index 7f42fe9dc4067..01134a7c74f7b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java @@ -59,6 +59,7 @@ import android.util.ArrayMap; import android.view.Choreographer; import android.view.SurfaceControl; import android.view.SurfaceSession; +import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Transformation; @@ -132,6 +133,15 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { @NonNull Transitions.TransitionFinishCallback finishCallback) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "start default transition animation, info = %s", info); + + // Fallback for screen wake. This just immediately finishes since there is no + // animation for screen-wake. + if (info.getType() == WindowManager.TRANSIT_WAKE) { + startTransaction.apply(); + finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */); + return true; + } + if (mAnimations.containsKey(transition)) { throw new IllegalStateException("Got a duplicate startAnimation call for " + transition); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java index f432049f44f63..bda884cd80d98 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java @@ -107,6 +107,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Checking filter %s", mFilters.get(i)); if (mFilters.get(i).first.matches(info)) { + Slog.d(TAG, "Found filter" + mFilters.get(i)); pendingRemote = mFilters.get(i).second; // Add to requested list so that it can be found for merge requests. mRequestedRemotes.put(transition, pendingRemote); diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java index 62b92cb33f5c3..391e6defd7e88 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java @@ -18,14 +18,26 @@ package com.android.systemui.keyguard; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.view.Display.DEFAULT_DISPLAY; +import static android.view.RemoteAnimationTarget.MODE_CLOSING; +import static android.view.RemoteAnimationTarget.MODE_OPENING; +import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY; +import static android.view.WindowManager.TRANSIT_KEYGUARD_OCCLUDE; +import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE; import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY; import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER; import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE; import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_UNOCCLUDE; +import static android.view.WindowManager.TRANSIT_OLD_NONE; +import static android.view.WindowManager.TransitionOldType; +import static android.view.WindowManager.TransitionType; +import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.Service; +import android.app.WindowConfiguration; import android.content.Intent; +import android.graphics.Point; +import android.graphics.Rect; import android.os.Binder; import android.os.Bundle; import android.os.Debug; @@ -42,8 +54,13 @@ import android.view.IRemoteAnimationRunner; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; import android.view.RemoteAnimationTarget; +import android.view.SurfaceControl; import android.view.WindowManager; import android.view.WindowManagerPolicyConstants; +import android.window.IRemoteTransition; +import android.window.IRemoteTransitionFinishedCallback; +import android.window.TransitionFilter; +import android.window.TransitionInfo; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.internal.policy.IKeyguardDrawnCallback; @@ -51,8 +68,11 @@ import com.android.internal.policy.IKeyguardExitCallback; import com.android.internal.policy.IKeyguardService; import com.android.internal.policy.IKeyguardStateCallback; import com.android.systemui.SystemUIApplication; +import com.android.wm.shell.transition.ShellTransitions; import com.android.wm.shell.transition.Transitions; +import java.util.ArrayList; + import javax.inject.Inject; public class KeyguardService extends Service { @@ -79,40 +99,163 @@ public class KeyguardService extends Service { * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ public static boolean sEnableRemoteKeyguardGoingAwayAnimation = - !Transitions.ENABLE_SHELL_TRANSITIONS && sEnableRemoteKeyguardAnimation >= 1; + sEnableRemoteKeyguardAnimation >= 1; /** * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ public static boolean sEnableRemoteKeyguardOccludeAnimation = - !Transitions.ENABLE_SHELL_TRANSITIONS && sEnableRemoteKeyguardAnimation >= 2; + sEnableRemoteKeyguardAnimation >= 2; private final KeyguardViewMediator mKeyguardViewMediator; private final KeyguardLifecyclesDispatcher mKeyguardLifecyclesDispatcher; + private static int newModeToLegacyMode(int newMode) { + switch (newMode) { + case WindowManager.TRANSIT_OPEN: + case WindowManager.TRANSIT_TO_FRONT: + return MODE_OPENING; + case WindowManager.TRANSIT_CLOSE: + case WindowManager.TRANSIT_TO_BACK: + return MODE_CLOSING; + default: + return 2; // MODE_CHANGING + } + } + + private static RemoteAnimationTarget[] wrap(TransitionInfo info, boolean wallpapers) { + final ArrayList out = new ArrayList<>(); + for (int i = 0; i < info.getChanges().size(); i++) { + boolean changeIsWallpaper = + (info.getChanges().get(i).getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0; + if (wallpapers != changeIsWallpaper) continue; + + final TransitionInfo.Change change = info.getChanges().get(i); + final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo(); + final int taskId = taskInfo != null ? change.getTaskInfo().taskId : -1; + boolean isNotInRecents; + WindowConfiguration windowConfiguration = null; + if (taskInfo != null) { + if (taskInfo.getConfiguration() != null) { + windowConfiguration = + change.getTaskInfo().getConfiguration().windowConfiguration; + } + isNotInRecents = !change.getTaskInfo().isRunning; + } else { + isNotInRecents = true; + } + Rect localBounds = new Rect(change.getEndAbsBounds()); + localBounds.offsetTo(change.getEndRelOffset().x, change.getEndRelOffset().y); + + out.add(new RemoteAnimationTarget( + taskId, + newModeToLegacyMode(change.getMode()), + change.getLeash(), + (change.getFlags() & TransitionInfo.FLAG_TRANSLUCENT) != 0 + || (change.getFlags() & TransitionInfo.FLAG_SHOW_WALLPAPER) != 0, + null /* clipRect */, + new Rect(0, 0, 0, 0) /* contentInsets */, + info.getChanges().size() - i, + new Point(), localBounds, new Rect(change.getEndAbsBounds()), + windowConfiguration, isNotInRecents, null /* startLeash */, + change.getStartAbsBounds(), taskInfo)); + } + return out.toArray(new RemoteAnimationTarget[out.size()]); + } + + private static @TransitionOldType int getTransitionOldType(@TransitionType int type, + RemoteAnimationTarget[] apps) { + if (type == TRANSIT_KEYGUARD_GOING_AWAY) { + return apps.length == 0 ? TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER + : TRANSIT_OLD_KEYGUARD_GOING_AWAY; + } else if (type == TRANSIT_KEYGUARD_OCCLUDE) { + return TRANSIT_OLD_KEYGUARD_OCCLUDE; + } else if (type == TRANSIT_KEYGUARD_UNOCCLUDE) { + return TRANSIT_OLD_KEYGUARD_UNOCCLUDE; + } else { + Slog.d(TAG, "Unexpected transit type: " + type); + return TRANSIT_OLD_NONE; + } + } + + private static IRemoteTransition wrap(IRemoteAnimationRunner runner) { + return new IRemoteTransition.Stub() { + @Override + public void startAnimation(IBinder transition, TransitionInfo info, + SurfaceControl.Transaction t, IRemoteTransitionFinishedCallback finishCallback) + throws RemoteException { + Slog.d(TAG, "Starts IRemoteAnimationRunner: info=" + info); + final RemoteAnimationTarget[] apps = wrap(info, false /* wallpapers */); + final RemoteAnimationTarget[] wallpapers = wrap(info, true /* wallpapers */); + final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0]; + + // TODO: Remove this, and update alpha value in the IAnimationRunner. + for (TransitionInfo.Change change : info.getChanges()) { + t.setAlpha(change.getLeash(), 1.0f); + } + t.apply(); + runner.onAnimationStart(getTransitionOldType(info.getType(), apps), + apps, wallpapers, nonApps, + new IRemoteAnimationFinishedCallback.Stub() { + @Override + public void onAnimationFinished() throws RemoteException { + Slog.d(TAG, "Finish IRemoteAnimationRunner."); + finishCallback.onTransitionFinished(null /* wct */, null /* t */); + } + } + ); + } + + public void mergeAnimation(IBinder transition, TransitionInfo info, + SurfaceControl.Transaction t, IBinder mergeTarget, + IRemoteTransitionFinishedCallback finishCallback) { + + } + }; + } + @Inject public KeyguardService(KeyguardViewMediator keyguardViewMediator, - KeyguardLifecyclesDispatcher keyguardLifecyclesDispatcher) { + KeyguardLifecyclesDispatcher keyguardLifecyclesDispatcher, + ShellTransitions shellTransitions) { super(); mKeyguardViewMediator = keyguardViewMediator; mKeyguardLifecyclesDispatcher = keyguardLifecyclesDispatcher; - RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); - if (sEnableRemoteKeyguardGoingAwayAnimation) { - final RemoteAnimationAdapter exitAnimationAdapter = - new RemoteAnimationAdapter(mExitAnimationRunner, 0, 0); - definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, exitAnimationAdapter); - definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER, - exitAnimationAdapter); + if (shellTransitions != null && Transitions.ENABLE_SHELL_TRANSITIONS) { + if (sEnableRemoteKeyguardGoingAwayAnimation) { + Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_GOING_AWAY"); + TransitionFilter f = new TransitionFilter(); + f.mTypeSet = new int[]{TRANSIT_KEYGUARD_GOING_AWAY}; + shellTransitions.registerRemote(f, wrap(mExitAnimationRunner)); + } + if (sEnableRemoteKeyguardOccludeAnimation) { + Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_(UN)OCCLUDE"); + TransitionFilter f = new TransitionFilter(); + f.mTypeSet = new int[]{TRANSIT_KEYGUARD_OCCLUDE, TRANSIT_KEYGUARD_UNOCCLUDE}; + shellTransitions.registerRemote(f, wrap(mOccludeAnimationRunner)); + } + } else { + RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); + if (sEnableRemoteKeyguardGoingAwayAnimation) { + final RemoteAnimationAdapter exitAnimationAdapter = + new RemoteAnimationAdapter(mExitAnimationRunner, 0, 0); + definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, + exitAnimationAdapter); + definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER, + exitAnimationAdapter); + } + if (sEnableRemoteKeyguardOccludeAnimation) { + final RemoteAnimationAdapter occludeAnimationAdapter = + new RemoteAnimationAdapter(mOccludeAnimationRunner, 0, 0); + definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_OCCLUDE, + occludeAnimationAdapter); + definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_UNOCCLUDE, + occludeAnimationAdapter); + } + ActivityTaskManager.getInstance().registerRemoteAnimationsForDisplay( + DEFAULT_DISPLAY, definition); } - if (sEnableRemoteKeyguardOccludeAnimation) { - final RemoteAnimationAdapter occludeAnimationAdapter = - new RemoteAnimationAdapter(mOccludeAnimationRunner, 0, 0); - definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_OCCLUDE, occludeAnimationAdapter); - definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_UNOCCLUDE, occludeAnimationAdapter); - } - ActivityTaskManager.getInstance().registerRemoteAnimationsForDisplay( - DEFAULT_DISPLAY, definition); } @Override @@ -145,10 +288,10 @@ public class KeyguardService extends Service { RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) { - Trace.beginSection("KeyguardService.mBinder#startKeyguardExitAnimation"); + Trace.beginSection("mExitAnimationRunner.onAnimationStart#startKeyguardExitAnimation"); checkPermission(); mKeyguardViewMediator.startKeyguardExitAnimation(transit, apps, wallpapers, - null /* nonApps */, finishedCallback); + nonApps, finishedCallback); Trace.endSection(); } @@ -166,14 +309,14 @@ public class KeyguardService extends Service { RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) { + Slog.d(TAG, "mOccludeAnimationRunner.onAnimationStart: transit=" + transit); try { if (transit == TRANSIT_OLD_KEYGUARD_OCCLUDE) { mBinder.setOccluded(true /* isOccluded */, true /* animate */); } else if (transit == TRANSIT_OLD_KEYGUARD_UNOCCLUDE) { mBinder.setOccluded(false /* isOccluded */, true /* animate */); } - // TODO(bc-unlock): Implement occlude/unocclude animation applied on apps, - // wallpapers and nonApps. + // TODO(bc-unlock): Implement (un)occlude animation. finishedCallback.onAnimationFinished(); } catch (RemoteException e) { Slog.e(TAG, "RemoteException"); diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index fb4d96e305fca..d1df989619c0f 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -3020,7 +3020,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void onKeyguardOccludedChangedLw(boolean occluded) { - if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing()) { + if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing() + && !WindowManagerService.sEnableShellTransitions) { mPendingKeyguardOccluded = occluded; mKeyguardOccludedChanged = true; } else { @@ -4246,6 +4247,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { pmWakeReason)) + ")"); } + mActivityTaskManagerInternal.notifyWakingUp(); mDefaultDisplayPolicy.setAwake(true); // Since goToSleep performs these functions synchronously, we must diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index 1759cdeb60d7f..5174a38d5edc2 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -621,4 +621,7 @@ public abstract class ActivityTaskManagerInternal { */ public abstract boolean hasSystemAlertWindowPermission(int callingUid, int callingPid, String callingPackage); + + /** Called when the device is waking up */ + public abstract void notifyWakingUp(); } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 381d69571a96b..83c83e7b5f391 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -64,6 +64,7 @@ import static android.text.format.DateUtils.MINUTE_IN_MILLIS; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_NONE; +import static android.view.WindowManager.TRANSIT_WAKE; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS; @@ -6506,6 +6507,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { return ActivityTaskManagerService.this.hasSystemAlertWindowPermission(callingUid, callingPid, callingPackage); } + + @Override + public void notifyWakingUp() { + // Start a transition for waking. This is needed for showWhenLocked activities. + getTransitionController().requestTransitionIfNeeded(TRANSIT_WAKE, 0 /* flags */, + null /* trigger */, mRootWindowContainer.getDefaultDisplay()); + } } final class PackageConfigurationUpdaterImpl implements diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index 672ebf10dcf09..9cd8c2d8ee538 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -49,6 +49,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.proto.ProtoOutputStream; import android.view.Display; +import android.view.WindowManager; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.server.inputmethod.InputMethodManagerInternal; @@ -158,6 +159,7 @@ class KeyguardController { final boolean keyguardChanged = (keyguardShowing != mKeyguardShowing) || (mKeyguardGoingAway && keyguardShowing && !aodChanged); if (!keyguardChanged && !aodChanged) { + setWakeTransitionReady(); return; } EventLogTags.writeWmSetKeyguardShown( @@ -203,6 +205,15 @@ class KeyguardController { updateKeyguardSleepToken(); mRootWindowContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS); InputMethodManagerInternal.get().updateImeWindowStatus(false /* disableImeIcon */); + setWakeTransitionReady(); + } + + private void setWakeTransitionReady() { + if (mWindowManager.mAtmService.getTransitionController().getCollectingTransitionType() + == WindowManager.TRANSIT_WAKE) { + mWindowManager.mAtmService.getTransitionController().setReady( + mRootWindowContainer.getDefaultDisplay()); + } } /** @@ -334,6 +345,7 @@ class KeyguardController { for (int displayNdx = mRootWindowContainer.getChildCount() - 1; displayNdx >= 0; displayNdx--) { final DisplayContent display = mRootWindowContainer.getChildAt(displayNdx); + if (display.isRemoving() || display.isRemoved()) continue; final KeyguardDisplayState state = getDisplayState(display.mDisplayId); state.updateVisibility(this, display); requestDismissKeyguard |= state.mRequestDismissKeyguard; diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 2c17b73a0dba1..43165f82d9dec 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -33,6 +33,8 @@ import static android.view.WindowManager.TRANSIT_NONE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; +import static android.view.WindowManager.TransitionFlags; +import static android.view.WindowManager.TransitionType; import static android.view.WindowManager.transitTypeToString; import static android.window.TransitionInfo.FLAG_IS_DISPLAY; import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION; @@ -59,7 +61,6 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.view.SurfaceControl; -import android.view.WindowManager; import android.view.animation.Animation; import android.window.IRemoteTransition; import android.window.TransitionInfo; @@ -109,9 +110,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe @Retention(RetentionPolicy.SOURCE) @interface TransitionState {} - final @WindowManager.TransitionType int mType; + final @TransitionType int mType; private int mSyncId; - private @WindowManager.TransitionFlags int mFlags; + private @TransitionFlags int mFlags; private final TransitionController mController; private final BLASTSyncEngine mSyncEngine; private IRemoteTransition mRemoteTransition = null; @@ -146,7 +147,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe private boolean mNavBarAttachedToApp = false; private int mNavBarDisplayId = INVALID_DISPLAY; - Transition(@WindowManager.TransitionType int type, @WindowManager.TransitionFlags int flags, + Transition(@TransitionType int type, @TransitionFlags int flags, TransitionController controller, BLASTSyncEngine syncEngine) { mType = type; mFlags = flags; @@ -617,7 +618,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } private void handleNonAppWindowsInTransition(int displayId, - @WindowManager.TransitionType int transit, int flags) { + @TransitionType int transit, int flags) { final DisplayContent dc = mController.mAtm.mRootWindowContainer.getDisplayContent(displayId); if (dc == null) { @@ -968,7 +969,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe */ @VisibleForTesting @NonNull - static TransitionInfo calculateTransitionInfo(int type, int flags, + static TransitionInfo calculateTransitionInfo(@TransitionType int type, int flags, ArraySet targets, ArrayMap changes) { final TransitionInfo out = new TransitionInfo(type, flags); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 7f251364f71ca..7f6dce40fce8c 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -452,14 +452,14 @@ public class WindowManagerService extends IWindowManager.Stub /** * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ - public static final boolean sEnableRemoteKeyguardGoingAwayAnimation = !sEnableShellTransitions - && sEnableRemoteKeyguardAnimation >= 1; + public static final boolean sEnableRemoteKeyguardGoingAwayAnimation = + sEnableRemoteKeyguardAnimation >= 1; /** * @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY */ - public static final boolean sEnableRemoteKeyguardOccludeAnimation = !sEnableShellTransitions - && sEnableRemoteKeyguardAnimation >= 2; + public static final boolean sEnableRemoteKeyguardOccludeAnimation = + sEnableRemoteKeyguardAnimation >= 2; /** * Allows a fullscreen windowing mode activity to launch in its desired orientation directly