Loading services/core/java/com/android/server/wm/AppTransition.java +2 −7 Original line number Diff line number Diff line Loading @@ -76,7 +76,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerInternal.AppTransitionListener; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_BEFORE_ANIM; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE; import android.annotation.DrawableRes; Loading Loading @@ -1807,15 +1806,11 @@ public class AppTransition implements Dump { } int getAppStackClipMode() { // When dismiss keyguard animation occurs, clip before the animation to prevent docked // app from showing beyond the divider if (mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY || mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER) { return STACK_CLIP_BEFORE_ANIM; } return mNextAppTransition == TRANSIT_ACTIVITY_RELAUNCH || mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS || mNextAppTransitionType == NEXT_TRANSIT_TYPE_CLIP_REVEAL || mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY || mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER ? STACK_CLIP_NONE : STACK_CLIP_AFTER_ANIM; } Loading services/core/java/com/android/server/wm/DisplayContent.java +4 −1 Original line number Diff line number Diff line Loading @@ -197,7 +197,6 @@ import android.view.ViewRootImpl; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.window.ITaskOrganizer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; Loading Loading @@ -3554,6 +3553,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo onWallpaper, goingToShade, subtle)); } }, true /* traverseTopToBottom */); for (int i = mShellRoots.size() - 1; i >= 0; --i) { mShellRoots.valueAt(i).startAnimation(policy.createHiddenByKeyguardExit( onWallpaper, goingToShade, subtle)); } } /** @return {@code true} if there is window to wait before enabling the screen. */ Loading services/core/java/com/android/server/wm/ShellRoot.java +32 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,20 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION; import android.annotation.NonNull; import android.graphics.Point; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.IWindow; import android.view.SurfaceControl; import android.view.animation.Animation; /** * Represents a piece of the hierarchy under which a client Shell can manage sub-windows. Loading Loading @@ -70,5 +78,29 @@ public class ShellRoot { IWindow getClient() { return mClient; } void startAnimation(Animation anim) { // Only do this for the divider if (mToken.windowType != TYPE_DOCK_DIVIDER) { return; } DisplayInfo displayInfo = mToken.getFixedRotationTransformDisplayInfo(); if (displayInfo == null) { displayInfo = mDisplayContent.getDisplayInfo(); } // Mostly copied from WindowState to enable keyguard transition animation anim.initialize(displayInfo.logicalWidth, displayInfo.logicalHeight, displayInfo.appWidth, displayInfo.appHeight); anim.restrictDuration(MAX_ANIMATION_DURATION); anim.scaleCurrentDuration(mDisplayContent.mWmService.getWindowAnimationScaleLocked()); final AnimationAdapter adapter = new LocalAnimationAdapter( new WindowAnimationSpec(anim, new Point(0, 0), false /* canSkipFirstFrame */, 0 /* windowCornerRadius */), mDisplayContent.mWmService.mSurfaceAnimationRunner); mToken.startAnimation(mToken.getPendingTransaction(), adapter, false /* hidden */, ANIMATION_TYPE_WINDOW_ANIMATION, null /* animationFinishedCallback */); } } services/core/java/com/android/server/wm/TaskDisplayArea.java +5 −0 Original line number Diff line number Diff line Loading @@ -1612,6 +1612,11 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> { } } @Override boolean canCreateRemoteAnimationTarget() { return true; } /** * Callback for when the order of the stacks in the display changes. */ Loading services/core/java/com/android/server/wm/TaskSnapshotSurface.java +1 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,7 @@ class TaskSnapshotSurface implements StartingSurface { frame = null; mTmpDstFrame.set(mFrame); } mTmpDstFrame.offsetTo(0, 0); // Scale the mismatch dimensions to fill the task bounds mTmpSnapshotSize.set(0, 0, buffer.getWidth(), buffer.getHeight()); Loading Loading
services/core/java/com/android/server/wm/AppTransition.java +2 −7 Original line number Diff line number Diff line Loading @@ -76,7 +76,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerInternal.AppTransitionListener; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_BEFORE_ANIM; import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE; import android.annotation.DrawableRes; Loading Loading @@ -1807,15 +1806,11 @@ public class AppTransition implements Dump { } int getAppStackClipMode() { // When dismiss keyguard animation occurs, clip before the animation to prevent docked // app from showing beyond the divider if (mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY || mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER) { return STACK_CLIP_BEFORE_ANIM; } return mNextAppTransition == TRANSIT_ACTIVITY_RELAUNCH || mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS || mNextAppTransitionType == NEXT_TRANSIT_TYPE_CLIP_REVEAL || mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY || mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER ? STACK_CLIP_NONE : STACK_CLIP_AFTER_ANIM; } Loading
services/core/java/com/android/server/wm/DisplayContent.java +4 −1 Original line number Diff line number Diff line Loading @@ -197,7 +197,6 @@ import android.view.ViewRootImpl; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.window.ITaskOrganizer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; Loading Loading @@ -3554,6 +3553,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo onWallpaper, goingToShade, subtle)); } }, true /* traverseTopToBottom */); for (int i = mShellRoots.size() - 1; i >= 0; --i) { mShellRoots.valueAt(i).startAnimation(policy.createHiddenByKeyguardExit( onWallpaper, goingToShade, subtle)); } } /** @return {@code true} if there is window to wait before enabling the screen. */ Loading
services/core/java/com/android/server/wm/ShellRoot.java +32 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,20 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION; import android.annotation.NonNull; import android.graphics.Point; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.IWindow; import android.view.SurfaceControl; import android.view.animation.Animation; /** * Represents a piece of the hierarchy under which a client Shell can manage sub-windows. Loading Loading @@ -70,5 +78,29 @@ public class ShellRoot { IWindow getClient() { return mClient; } void startAnimation(Animation anim) { // Only do this for the divider if (mToken.windowType != TYPE_DOCK_DIVIDER) { return; } DisplayInfo displayInfo = mToken.getFixedRotationTransformDisplayInfo(); if (displayInfo == null) { displayInfo = mDisplayContent.getDisplayInfo(); } // Mostly copied from WindowState to enable keyguard transition animation anim.initialize(displayInfo.logicalWidth, displayInfo.logicalHeight, displayInfo.appWidth, displayInfo.appHeight); anim.restrictDuration(MAX_ANIMATION_DURATION); anim.scaleCurrentDuration(mDisplayContent.mWmService.getWindowAnimationScaleLocked()); final AnimationAdapter adapter = new LocalAnimationAdapter( new WindowAnimationSpec(anim, new Point(0, 0), false /* canSkipFirstFrame */, 0 /* windowCornerRadius */), mDisplayContent.mWmService.mSurfaceAnimationRunner); mToken.startAnimation(mToken.getPendingTransaction(), adapter, false /* hidden */, ANIMATION_TYPE_WINDOW_ANIMATION, null /* animationFinishedCallback */); } }
services/core/java/com/android/server/wm/TaskDisplayArea.java +5 −0 Original line number Diff line number Diff line Loading @@ -1612,6 +1612,11 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> { } } @Override boolean canCreateRemoteAnimationTarget() { return true; } /** * Callback for when the order of the stacks in the display changes. */ Loading
services/core/java/com/android/server/wm/TaskSnapshotSurface.java +1 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,7 @@ class TaskSnapshotSurface implements StartingSurface { frame = null; mTmpDstFrame.set(mFrame); } mTmpDstFrame.offsetTo(0, 0); // Scale the mismatch dimensions to fill the task bounds mTmpSnapshotSize.set(0, 0, buffer.getWidth(), buffer.getHeight()); Loading