Loading services/core/java/com/android/server/wm/ActivityRecord.java +4 −9 Original line number Diff line number Diff line Loading @@ -233,7 +233,6 @@ import static com.android.server.wm.StartingData.AFTER_TRANSACTION_COPY_TO_CLIEN import static com.android.server.wm.StartingData.AFTER_TRANSACTION_REMOVE_DIRECTLY; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_PREDICT_BACK; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_VISIBLE; import static com.android.server.wm.TaskPersister.DEBUG; Loading Loading @@ -5542,11 +5541,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return false; } if (!mDisplayContent.mAppTransition.isTransitionSet()) { // Defer committing visibility for non-home app which is animating by recents. if (isActivityTypeHome() || !isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) { return false; } } if (mWaitForEnteringPinnedMode && mVisible == visible) { // If the visibility is not changed during enter PIP, we don't want to include it in // app transition to affect the animation theme, because the Pip organizer will Loading Loading @@ -5699,8 +5695,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A private void postApplyAnimation(boolean visible, boolean fromTransition) { final boolean usingShellTransitions = mTransitionController.isShellTransitionsEnabled(); final boolean delayed = !usingShellTransitions && isAnimating(PARENTS | CHILDREN, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION | ANIMATION_TYPE_RECENTS); ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION); if (!delayed && !usingShellTransitions) { // We aren't delayed anything, but exiting windows rely on the animation finished // callback being called in case the ActivityRecord was pretending to be delayed, Loading @@ -5722,7 +5717,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // animation and aren't in RESUMED state. Otherwise, we'll update client visibility in // onAnimationFinished or activityStopped. if (visible || (mState != RESUMED && (usingShellTransitions || !isAnimating( PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)))) { PARENTS, ANIMATION_TYPE_APP_TRANSITION)))) { setClientVisible(visible); } Loading Loading @@ -7700,7 +7695,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Ensure that the activity content is hidden when the decor surface is boosted to // prevent UI redressing attack. && !isDecorSurfaceBoosted) || isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS || isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_PREDICT_BACK); if (mSurfaceControl != null) { Loading services/core/java/com/android/server/wm/AppTransitionController.java +0 −36 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ import static com.android.server.wm.AppTransition.isNormalTransit; import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldAttachNavBarToApp; import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldStartNonAppWindowAnimationsForKeyguardExit; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.WallpaperAnimationAdapter.shouldStartWallpaperAnimation; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading Loading @@ -173,41 +172,6 @@ public class AppTransitionController { || !transitionGoodToGoForTaskFragments()) { return; } final boolean isRecentsInOpening = mDisplayContent.mOpeningApps.stream().anyMatch( ConfigurationContainer::isActivityTypeRecents); // In order to avoid visual clutter caused by a conflict between app transition // animation and recents animation, app transition is delayed until recents finishes. // One exceptional case. When 3P launcher is used and a user taps a task screenshot in // task switcher (isRecentsInOpening=true), app transition must start even though // recents is running. Otherwise app transition is blocked until timeout (b/232984498). // When 1P launcher is used, this animation is controlled by the launcher outside of // the app transition, so delaying app transition doesn't cause visible delay. After // recents finishes, app transition is handled just to commit visibility on apps. if (!isRecentsInOpening) { final ArraySet<WindowContainer> participants = new ArraySet<>(); participants.addAll(mDisplayContent.mOpeningApps); participants.addAll(mDisplayContent.mChangingContainers); boolean deferForRecents = false; for (int i = 0; i < participants.size(); i++) { WindowContainer wc = participants.valueAt(i); final ActivityRecord activity = getAppFromContainer(wc); if (activity == null) { continue; } // Don't defer recents animation if one of activity isn't running for it, that one // might be started from quickstep. if (!activity.isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) { deferForRecents = false; break; } deferForRecents = true; } if (deferForRecents) { ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "Delaying app transition for recents animation to finish"); return; } } Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "AppTransitionReady"); Loading services/core/java/com/android/server/wm/SurfaceAnimator.java +1 −3 Original line number Diff line number Diff line Loading @@ -32,8 +32,8 @@ import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.LogLevel; import com.android.internal.protolog.ProtoLog; import com.android.internal.protolog.common.LogLevel; import java.io.PrintWriter; import java.io.StringWriter; Loading Loading @@ -585,7 +585,6 @@ public class SurfaceAnimator { ANIMATION_TYPE_APP_TRANSITION, ANIMATION_TYPE_SCREEN_ROTATION, ANIMATION_TYPE_DIMMER, ANIMATION_TYPE_RECENTS, ANIMATION_TYPE_WINDOW_ANIMATION, ANIMATION_TYPE_INSETS_CONTROL, ANIMATION_TYPE_TOKEN_TRANSFORM, Loading @@ -604,7 +603,6 @@ public class SurfaceAnimator { case ANIMATION_TYPE_APP_TRANSITION: return "app_transition"; case ANIMATION_TYPE_SCREEN_ROTATION: return "screen_rotation"; case ANIMATION_TYPE_DIMMER: return "dimmer"; case ANIMATION_TYPE_RECENTS: return "recents_animation"; case ANIMATION_TYPE_WINDOW_ANIMATION: return "window_animation"; case ANIMATION_TYPE_INSETS_CONTROL: return "insets_animation"; case ANIMATION_TYPE_TOKEN_TRANSFORM: return "token_transform"; Loading services/core/java/com/android/server/wm/Task.java +1 −3 Original line number Diff line number Diff line Loading @@ -94,7 +94,6 @@ import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_DONT_LOCK; import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE; import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE_PRIV; import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_PINNABLE; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.TaskProto.AFFINITY; import static com.android.server.wm.TaskProto.BOUNDS; import static com.android.server.wm.TaskProto.CREATED_BY_ORGANIZER; Loading Loading @@ -2966,8 +2965,7 @@ class Task extends TaskFragment { /** Checking if self or its child tasks are animated by recents animation. */ boolean isAnimatingByRecents() { return isAnimating(CHILDREN, ANIMATION_TYPE_RECENTS) || mTransitionController.isTransientHide(this); return mTransitionController.isTransientHide(this); } WindowState getTopVisibleAppMainWindow() { Loading services/core/java/com/android/server/wm/WindowAnimator.java +2 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.server.wm; import static com.android.internal.protolog.ProtoLogGroup.WM_SHOW_TRANSACTIONS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_SCREEN_ROTATION; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; Loading Loading @@ -218,8 +217,8 @@ public class WindowAnimator { private void updateRunningExpensiveAnimationsLegacy() { final boolean runningExpensiveAnimations = mService.mRoot.isAnimating(TRANSITION | CHILDREN /* flags */, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_SCREEN_ROTATION | ANIMATION_TYPE_RECENTS /* typesToCheck */); ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_SCREEN_ROTATION /* typesToCheck */); if (runningExpensiveAnimations && !mRunningExpensiveAnimations) { mService.mSnapshotController.setPause(true); mTransaction.setEarlyWakeupStart(); Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +4 −9 Original line number Diff line number Diff line Loading @@ -233,7 +233,6 @@ import static com.android.server.wm.StartingData.AFTER_TRANSACTION_COPY_TO_CLIEN import static com.android.server.wm.StartingData.AFTER_TRANSACTION_REMOVE_DIRECTLY; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_PREDICT_BACK; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_VISIBLE; import static com.android.server.wm.TaskPersister.DEBUG; Loading Loading @@ -5542,11 +5541,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return false; } if (!mDisplayContent.mAppTransition.isTransitionSet()) { // Defer committing visibility for non-home app which is animating by recents. if (isActivityTypeHome() || !isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) { return false; } } if (mWaitForEnteringPinnedMode && mVisible == visible) { // If the visibility is not changed during enter PIP, we don't want to include it in // app transition to affect the animation theme, because the Pip organizer will Loading Loading @@ -5699,8 +5695,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A private void postApplyAnimation(boolean visible, boolean fromTransition) { final boolean usingShellTransitions = mTransitionController.isShellTransitionsEnabled(); final boolean delayed = !usingShellTransitions && isAnimating(PARENTS | CHILDREN, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION | ANIMATION_TYPE_RECENTS); ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION); if (!delayed && !usingShellTransitions) { // We aren't delayed anything, but exiting windows rely on the animation finished // callback being called in case the ActivityRecord was pretending to be delayed, Loading @@ -5722,7 +5717,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // animation and aren't in RESUMED state. Otherwise, we'll update client visibility in // onAnimationFinished or activityStopped. if (visible || (mState != RESUMED && (usingShellTransitions || !isAnimating( PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)))) { PARENTS, ANIMATION_TYPE_APP_TRANSITION)))) { setClientVisible(visible); } Loading Loading @@ -7700,7 +7695,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Ensure that the activity content is hidden when the decor surface is boosted to // prevent UI redressing attack. && !isDecorSurfaceBoosted) || isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS || isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_PREDICT_BACK); if (mSurfaceControl != null) { Loading
services/core/java/com/android/server/wm/AppTransitionController.java +0 −36 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ import static com.android.server.wm.AppTransition.isNormalTransit; import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldAttachNavBarToApp; import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldStartNonAppWindowAnimationsForKeyguardExit; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.WallpaperAnimationAdapter.shouldStartWallpaperAnimation; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading Loading @@ -173,41 +172,6 @@ public class AppTransitionController { || !transitionGoodToGoForTaskFragments()) { return; } final boolean isRecentsInOpening = mDisplayContent.mOpeningApps.stream().anyMatch( ConfigurationContainer::isActivityTypeRecents); // In order to avoid visual clutter caused by a conflict between app transition // animation and recents animation, app transition is delayed until recents finishes. // One exceptional case. When 3P launcher is used and a user taps a task screenshot in // task switcher (isRecentsInOpening=true), app transition must start even though // recents is running. Otherwise app transition is blocked until timeout (b/232984498). // When 1P launcher is used, this animation is controlled by the launcher outside of // the app transition, so delaying app transition doesn't cause visible delay. After // recents finishes, app transition is handled just to commit visibility on apps. if (!isRecentsInOpening) { final ArraySet<WindowContainer> participants = new ArraySet<>(); participants.addAll(mDisplayContent.mOpeningApps); participants.addAll(mDisplayContent.mChangingContainers); boolean deferForRecents = false; for (int i = 0; i < participants.size(); i++) { WindowContainer wc = participants.valueAt(i); final ActivityRecord activity = getAppFromContainer(wc); if (activity == null) { continue; } // Don't defer recents animation if one of activity isn't running for it, that one // might be started from quickstep. if (!activity.isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) { deferForRecents = false; break; } deferForRecents = true; } if (deferForRecents) { ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "Delaying app transition for recents animation to finish"); return; } } Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "AppTransitionReady"); Loading
services/core/java/com/android/server/wm/SurfaceAnimator.java +1 −3 Original line number Diff line number Diff line Loading @@ -32,8 +32,8 @@ import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.LogLevel; import com.android.internal.protolog.ProtoLog; import com.android.internal.protolog.common.LogLevel; import java.io.PrintWriter; import java.io.StringWriter; Loading Loading @@ -585,7 +585,6 @@ public class SurfaceAnimator { ANIMATION_TYPE_APP_TRANSITION, ANIMATION_TYPE_SCREEN_ROTATION, ANIMATION_TYPE_DIMMER, ANIMATION_TYPE_RECENTS, ANIMATION_TYPE_WINDOW_ANIMATION, ANIMATION_TYPE_INSETS_CONTROL, ANIMATION_TYPE_TOKEN_TRANSFORM, Loading @@ -604,7 +603,6 @@ public class SurfaceAnimator { case ANIMATION_TYPE_APP_TRANSITION: return "app_transition"; case ANIMATION_TYPE_SCREEN_ROTATION: return "screen_rotation"; case ANIMATION_TYPE_DIMMER: return "dimmer"; case ANIMATION_TYPE_RECENTS: return "recents_animation"; case ANIMATION_TYPE_WINDOW_ANIMATION: return "window_animation"; case ANIMATION_TYPE_INSETS_CONTROL: return "insets_animation"; case ANIMATION_TYPE_TOKEN_TRANSFORM: return "token_transform"; Loading
services/core/java/com/android/server/wm/Task.java +1 −3 Original line number Diff line number Diff line Loading @@ -94,7 +94,6 @@ import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_DONT_LOCK; import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE; import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE_PRIV; import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_PINNABLE; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.TaskProto.AFFINITY; import static com.android.server.wm.TaskProto.BOUNDS; import static com.android.server.wm.TaskProto.CREATED_BY_ORGANIZER; Loading Loading @@ -2966,8 +2965,7 @@ class Task extends TaskFragment { /** Checking if self or its child tasks are animated by recents animation. */ boolean isAnimatingByRecents() { return isAnimating(CHILDREN, ANIMATION_TYPE_RECENTS) || mTransitionController.isTransientHide(this); return mTransitionController.isTransientHide(this); } WindowState getTopVisibleAppMainWindow() { Loading
services/core/java/com/android/server/wm/WindowAnimator.java +2 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.server.wm; import static com.android.internal.protolog.ProtoLogGroup.WM_SHOW_TRANSACTIONS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_SCREEN_ROTATION; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; Loading Loading @@ -218,8 +217,8 @@ public class WindowAnimator { private void updateRunningExpensiveAnimationsLegacy() { final boolean runningExpensiveAnimations = mService.mRoot.isAnimating(TRANSITION | CHILDREN /* flags */, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_SCREEN_ROTATION | ANIMATION_TYPE_RECENTS /* typesToCheck */); ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_SCREEN_ROTATION /* typesToCheck */); if (runningExpensiveAnimations && !mRunningExpensiveAnimations) { mService.mSnapshotController.setPause(true); mTransaction.setEarlyWakeupStart(); Loading