Loading services/core/java/com/android/server/wm/ActivityRecord.java +6 −78 Original line number Diff line number Diff line Loading @@ -109,7 +109,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED; import static android.view.WindowManager.PROPERTY_ALLOW_UNTRUSTED_ACTIVITY_EMBEDDING_STATE_SHARING; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_OLD_UNSET; import static android.view.WindowManager.TRANSIT_RELAUNCH; import static android.view.WindowManager.hasWindowExtensionsEnabled; Loading Loading @@ -321,9 +320,7 @@ import android.util.MergedConfiguration; import android.util.Slog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.view.AppTransitionAnimationSpec; import android.view.DisplayInfo; import android.view.IAppTransitionAnimationSpecsFuture; import android.view.InputApplicationHandle; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; Loading Loading @@ -2349,7 +2346,8 @@ final class ActivityRecord extends WindowToken { // The snapshot of home is only used once because it won't be updated while screen // is on (see {@link TaskSnapshotController#screenTurningOff}). mWmService.mTaskSnapshotController.removeSnapshotCache(task.mTaskId); if ((mDisplayContent.mAppTransition.getTransitFlags() final Transition transition = mTransitionController.getCollectingTransition(); if (transition != null && (transition.getFlags() & WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) == 0) { // Only use snapshot of home as starting window when unlocking directly. return false; Loading Loading @@ -3638,7 +3636,6 @@ final class ActivityRecord extends WindowToken { if (DEBUG_VISIBILITY || DEBUG_TRANSITION) { Slog.v(TAG_TRANSITION, "Prepare close transition: finishing " + this); } mDisplayContent.prepareAppTransition(TRANSIT_CLOSE); // When finishing the activity preemptively take the snapshot before the app window // is marked as hidden and any configuration changes take place Loading Loading @@ -3740,7 +3737,6 @@ final class ActivityRecord extends WindowToken { private void prepareActivityHideTransitionAnimation() { final DisplayContent dc = mDisplayContent; dc.prepareAppTransition(TRANSIT_CLOSE); setVisibility(false); dc.executeAppTransition(); } Loading Loading @@ -4392,13 +4388,6 @@ final class ActivityRecord extends WindowToken { removeStartingWindow(); } // If app transition animation was running for this activity, then we need to ensure that // the app transition notifies that animations have completed in // DisplayContent.handleAnimatingStoppedAndTransition(), so add to that list now if (isAnimating(TRANSITION | PARENTS, ANIMATION_TYPE_APP_TRANSITION)) { getDisplayContent().mNoAnimationNotifyOnTransitionFinished.add(token); } if (delayed && !isEmpty()) { // set the token aside because it has an active animation to be finished ProtoLog.v(WM_DEBUG_ADD_REMOVE, Loading Loading @@ -5070,8 +5059,6 @@ final class ActivityRecord extends WindowToken { void applyOptionsAnimation() { if (DEBUG_TRANSITION) Slog.i(TAG, "Applying options for " + this); if (mPendingRemoteAnimation != null) { mDisplayContent.mAppTransition.overridePendingAppTransitionRemote( mPendingRemoteAnimation); mTransitionController.setStatusBarTransitionDelay( mPendingRemoteAnimation.getStatusBarTransitionDelay()); } else { Loading Loading @@ -5101,14 +5088,6 @@ final class ActivityRecord extends WindowToken { IRemoteCallback finishCallback = null; switch (animationType) { case ANIM_CUSTOM: displayContent.mAppTransition.overridePendingAppTransition( pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getCustomBackgroundColor(), pendingOptions.getAnimationStartedListener(), pendingOptions.getAnimationFinishedListener(), pendingOptions.getOverrideTaskTransition()); options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getCustomBackgroundColor(), Loading @@ -5117,9 +5096,6 @@ final class ActivityRecord extends WindowToken { finishCallback = pendingOptions.getAnimationFinishedListener(); break; case ANIM_CLIP_REVEAL: displayContent.mAppTransition.overridePendingAppTransitionClipReveal( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight()); options = AnimationOptions.makeClipRevealAnimOptions( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight()); Loading @@ -5131,9 +5107,6 @@ final class ActivityRecord extends WindowToken { } break; case ANIM_SCALE_UP: displayContent.mAppTransition.overridePendingAppTransitionScaleUp( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight()); options = AnimationOptions.makeScaleUpAnimOptions( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight(), Loading @@ -5149,10 +5122,6 @@ final class ActivityRecord extends WindowToken { case ANIM_THUMBNAIL_SCALE_DOWN: final boolean scaleUp = (animationType == ANIM_THUMBNAIL_SCALE_UP); final HardwareBuffer buffer = pendingOptions.getThumbnail(); displayContent.mAppTransition.overridePendingAppTransitionThumb(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getAnimationStartedListener(), scaleUp); options = AnimationOptions.makeThumbnailAnimOptions(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp); startCallback = pendingOptions.getAnimationStartedListener(); Loading @@ -5165,36 +5134,9 @@ final class ActivityRecord extends WindowToken { break; case ANIM_THUMBNAIL_ASPECT_SCALE_UP: case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN: final AppTransitionAnimationSpec[] specs = pendingOptions.getAnimSpecs(); final IAppTransitionAnimationSpecsFuture specsFuture = pendingOptions.getSpecsFuture(); if (specsFuture != null) { displayContent.mAppTransition.overridePendingAppTransitionMultiThumbFuture( specsFuture, pendingOptions.getAnimationStartedListener(), animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP); } else if (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_DOWN && specs != null) { displayContent.mAppTransition.overridePendingAppTransitionMultiThumb( specs, pendingOptions.getAnimationStartedListener(), pendingOptions.getAnimationFinishedListener(), false); } else { displayContent.mAppTransition.overridePendingAppTransitionAspectScaledThumb( pendingOptions.getThumbnail(), pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight(), pendingOptions.getAnimationStartedListener(), (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP)); if (intent.getSourceBounds() == null) { intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getStartX() + pendingOptions.getWidth(), pendingOptions.getStartY() + pendingOptions.getHeight())); } } // TODO(b/397847511): remove the related types from ActivityOptions. break; case ANIM_OPEN_CROSS_PROFILE_APPS: displayContent.mAppTransition .overridePendingAppTransitionStartCrossProfileApps(); options = AnimationOptions.makeCrossProfileAnimOptions(); break; case ANIM_NONE: Loading Loading @@ -5451,8 +5393,6 @@ final class ActivityRecord extends WindowToken { } private void setVisibility(boolean visible, boolean deferHidingClient) { final AppTransition appTransition = getDisplayContent().mAppTransition; // Don't set visibility to false if we were already not visible. This prevents WM from // adding the app to the closing app list which doesn't make sense for something that is // already not visible. However, set visibility to true even if we are already visible. Loading @@ -5472,8 +5412,8 @@ final class ActivityRecord extends WindowToken { } ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "setAppVisibility(%s, visible=%b): %s visible=%b mVisibleRequested=%b Callers=%s", token, visible, appTransition, isVisible(), mVisibleRequested, "setAppVisibility(%s, visible=%b): visible=%b mVisibleRequested=%b Callers=%s", token, visible, isVisible(), mVisibleRequested, Debug.getCallers(6)); // Before setting mVisibleRequested so we can track changes. Loading Loading @@ -5570,15 +5510,6 @@ final class ActivityRecord extends WindowToken { updateReportedVisibilityLocked(); } @Override boolean applyAnimation(LayoutParams lp, @TransitionOldType int transit, boolean enter, boolean isVoiceInteraction, @Nullable ArrayList<WindowContainer> sources) { if ((mTransitionChangeFlags & FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT) != 0) { return false; } return super.applyAnimation(lp, transit, enter, isVoiceInteraction, sources); } /** * Update visibility to this {@link ActivityRecord}. * Loading Loading @@ -6642,9 +6573,7 @@ final class ActivityRecord extends WindowToken { // starting window is drawn, the transition can start earlier. Exclude finishing and bubble // because it may be a trampoline. if (app == null && !finishing && !mLaunchedFromBubble && mVisibleRequested && !mDisplayContent.mAppTransition.isReady() && !mDisplayContent.mAppTransition.isRunning() && mDisplayContent.isNextTransitionForward()) { && mVisibleRequested && mDisplayContent.isNextTransitionForward()) { // The pending transition state will be cleared after the transition is started, so // save the state for launching the client later (used by LaunchActivityItem). mStartingData.mIsTransitionForward = true; Loading Loading @@ -7526,7 +7455,6 @@ final class ActivityRecord extends WindowToken { } } getDisplayContent().mAppTransition.notifyAppTransitionFinishedLocked(token); scheduleAnimation(); // Schedule to handle the stopping and finishing activities which the animation is done Loading services/core/java/com/android/server/wm/DisplayArea.java +2 −7 Original line number Diff line number Diff line Loading @@ -748,14 +748,9 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { && policy.okToAnimate(true /* ignoreScreenOn */)) { return false; } // Consider unoccluding only when all unknown visibilities have been // resolved, as otherwise we just may be starting another occluding activity. final boolean isUnoccluding = mDisplayContent.mAppTransition.isUnoccluding() && mDisplayContent.mUnknownAppVisibilityController.allResolved(); // If keyguard is showing, or we're unoccluding, force the keyguard's orientation, // Use keyguard's orientation if it is showing and not occluded // even if SystemUI hasn't updated the attrs yet. if (policy.isKeyguardShowingAndNotOccluded() || isUnoccluding) { if (policy.isKeyguardShowingAndNotOccluded()) { return true; } } Loading services/core/java/com/android/server/wm/DisplayContent.java +4 −67 Original line number Diff line number Diff line Loading @@ -88,7 +88,6 @@ import static android.view.inputmethod.ImeTracker.DEBUG_IME_VISIBILITY; import static android.window.DisplayAreaOrganizer.FEATURE_IME; import static android.window.DisplayAreaOrganizer.FEATURE_ROOT; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_APP_TRANSITIONS; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_BOOT; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_CONTENT_RECORDING; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_FOCUS; Loading Loading @@ -369,12 +368,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private MetricsLogger mMetricsLogger; /** * List of clients without a transtiton animation that we notify once we are done * transitioning since they won't be notified through the app window animator. */ final List<IBinder> mNoAnimationNotifyOnTransitionFinished = new ArrayList<>(); // Mapping from a token IBinder to a WindowToken object on this display. private final HashMap<IBinder, WindowToken> mTokenMap = new HashMap(); Loading Loading @@ -1171,8 +1164,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mFixedRotationTransitionListener = new FixedRotationTransitionListener(mDisplayId); mAppTransition = new AppTransition(mWmService.mContext, mWmService, this); mAppTransition.registerListenerLocked(mWmService.mActivityManagerAppTransitionNotifier); mAppTransition.registerListenerLocked(mFixedRotationTransitionListener); mTransitionController.registerLegacyListener(mFixedRotationTransitionListener); mUnknownAppVisibilityController = new UnknownAppVisibilityController(mWmService, this); mRemoteDisplayChangeController = new RemoteDisplayChangeController(this); Loading Loading @@ -2858,13 +2849,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return isVisible() && !mRemoved && !mRemoving; } @Override void onAppTransitionDone() { super.onAppTransitionDone(); mWmService.mWindowsChanged = true; onTransitionFinished(); } void onTransitionFinished() { // If the transition finished callback cannot match the token for some reason, make sure the // rotated state is cleared if it is already invisible. Loading Loading @@ -3385,9 +3369,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDeferredRemoval = false; try { mUnknownAppVisibilityController.clear(); mAppTransition.removeAppTransitionTimeoutCallbacks(); mTransitionController.unregisterLegacyListener(mFixedRotationTransitionListener); handleAnimatingStoppedAndTransition(); mDeviceStateController.unregisterDeviceStateCallback(mDeviceStateConsumer); super.removeImmediately(); if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Removing display=" + this); Loading Loading @@ -3570,11 +3552,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayRotation.dumpDebug(proto, DISPLAY_ROTATION); mDisplayFrames.dumpDebug(proto, DISPLAY_FRAMES); proto.write(MIN_SIZE_OF_RESIZEABLE_TASK_DP, mMinSizeOfResizeableTaskDp); if (mTransitionController.isShellTransitionsEnabled()) { mTransitionController.dumpDebugLegacy(proto, APP_TRANSITION); } else { mAppTransition.dumpDebug(proto, APP_TRANSITION); } if (mFocusedApp != null) { mFocusedApp.writeNameToProto(proto, FOCUSED_APP); } Loading Loading @@ -5635,61 +5613,20 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp */ void requestTransitionAndLegacyPrepare(@WindowManager.TransitionType int transit, @WindowManager.TransitionFlags int flags) { prepareAppTransition(transit, flags); mTransitionController.requestTransitionIfNeeded(transit, flags, null /* trigger */, this); } void executeAppTransition() { mTransitionController.setReady(this); if (mAppTransition.isTransitionSet()) { ProtoLog.w(WM_DEBUG_APP_TRANSITIONS, "Execute app transition: %s, displayId: %d Callers=%s", mAppTransition, mDisplayId, Debug.getCallers(5)); mAppTransition.setReady(); mWmService.mWindowPlacerLocked.requestTraversal(); } } /** * Update pendingLayoutChanges after app transition has finished. */ void handleAnimatingStoppedAndTransition() { int changes = 0; mAppTransition.setIdle(); for (int i = mNoAnimationNotifyOnTransitionFinished.size() - 1; i >= 0; i--) { final IBinder token = mNoAnimationNotifyOnTransitionFinished.get(i); mAppTransition.notifyAppTransitionFinishedLocked(token); } mNoAnimationNotifyOnTransitionFinished.clear(); mWallpaperController.hideDeferredWallpapersIfNeededLegacy(); onAppTransitionDone(); changes |= FINISH_LAYOUT_REDO_LAYOUT; ProtoLog.v(WM_DEBUG_WALLPAPER, "Wallpaper layer changed: assigning layers + relayout"); computeImeTarget(true /* updateImeTarget */); mWallpaperMayChange = true; // Since the window list has been rebuilt, focus might have to be recomputed since the // actual order of windows might have changed again. mWmService.mFocusMayChange = true; pendingLayoutChanges |= changes; } /** Check if pending app transition is for activity / task launch. */ boolean isNextTransitionForward() { // TODO(b/191375840): decouple "forwardness" from transition system. if (mTransitionController.isShellTransitionsEnabled()) { @WindowManager.TransitionType int type = final @WindowManager.TransitionType int type = mTransitionController.getCollectingTransitionType(); return type == TRANSIT_OPEN || type == TRANSIT_TO_FRONT; } return mAppTransition.containsTransitRequest(TRANSIT_OPEN) || mAppTransition.containsTransitRequest(TRANSIT_TO_FRONT); } /** * @see Display#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS Loading services/core/java/com/android/server/wm/DisplayPolicy.java +0 −1 Original line number Diff line number Diff line Loading @@ -631,7 +631,6 @@ public class DisplayPolicy { mHandler.post(mAppTransitionFinished); } }; displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener); displayContent.mTransitionController.registerLegacyListener(mAppTransitionListener); // TODO: Make it can take screenshot on external display Loading services/core/java/com/android/server/wm/RootWindowContainer.java +0 −4 Original line number Diff line number Diff line Loading @@ -2103,10 +2103,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> removeRootTasksInWindowingModes(WINDOWING_MODE_PINNED); } // Set a transition to ensure that we don't immediately try and update the visibility // of the activity entering PIP r.getDisplayContent().prepareAppTransition(TRANSIT_NONE); transitionController.collect(task); // Defer the windowing mode change until after the transition to prevent the activity Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +6 −78 Original line number Diff line number Diff line Loading @@ -109,7 +109,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED; import static android.view.WindowManager.PROPERTY_ALLOW_UNTRUSTED_ACTIVITY_EMBEDDING_STATE_SHARING; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_OLD_UNSET; import static android.view.WindowManager.TRANSIT_RELAUNCH; import static android.view.WindowManager.hasWindowExtensionsEnabled; Loading Loading @@ -321,9 +320,7 @@ import android.util.MergedConfiguration; import android.util.Slog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.view.AppTransitionAnimationSpec; import android.view.DisplayInfo; import android.view.IAppTransitionAnimationSpecsFuture; import android.view.InputApplicationHandle; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; Loading Loading @@ -2349,7 +2346,8 @@ final class ActivityRecord extends WindowToken { // The snapshot of home is only used once because it won't be updated while screen // is on (see {@link TaskSnapshotController#screenTurningOff}). mWmService.mTaskSnapshotController.removeSnapshotCache(task.mTaskId); if ((mDisplayContent.mAppTransition.getTransitFlags() final Transition transition = mTransitionController.getCollectingTransition(); if (transition != null && (transition.getFlags() & WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) == 0) { // Only use snapshot of home as starting window when unlocking directly. return false; Loading Loading @@ -3638,7 +3636,6 @@ final class ActivityRecord extends WindowToken { if (DEBUG_VISIBILITY || DEBUG_TRANSITION) { Slog.v(TAG_TRANSITION, "Prepare close transition: finishing " + this); } mDisplayContent.prepareAppTransition(TRANSIT_CLOSE); // When finishing the activity preemptively take the snapshot before the app window // is marked as hidden and any configuration changes take place Loading Loading @@ -3740,7 +3737,6 @@ final class ActivityRecord extends WindowToken { private void prepareActivityHideTransitionAnimation() { final DisplayContent dc = mDisplayContent; dc.prepareAppTransition(TRANSIT_CLOSE); setVisibility(false); dc.executeAppTransition(); } Loading Loading @@ -4392,13 +4388,6 @@ final class ActivityRecord extends WindowToken { removeStartingWindow(); } // If app transition animation was running for this activity, then we need to ensure that // the app transition notifies that animations have completed in // DisplayContent.handleAnimatingStoppedAndTransition(), so add to that list now if (isAnimating(TRANSITION | PARENTS, ANIMATION_TYPE_APP_TRANSITION)) { getDisplayContent().mNoAnimationNotifyOnTransitionFinished.add(token); } if (delayed && !isEmpty()) { // set the token aside because it has an active animation to be finished ProtoLog.v(WM_DEBUG_ADD_REMOVE, Loading Loading @@ -5070,8 +5059,6 @@ final class ActivityRecord extends WindowToken { void applyOptionsAnimation() { if (DEBUG_TRANSITION) Slog.i(TAG, "Applying options for " + this); if (mPendingRemoteAnimation != null) { mDisplayContent.mAppTransition.overridePendingAppTransitionRemote( mPendingRemoteAnimation); mTransitionController.setStatusBarTransitionDelay( mPendingRemoteAnimation.getStatusBarTransitionDelay()); } else { Loading Loading @@ -5101,14 +5088,6 @@ final class ActivityRecord extends WindowToken { IRemoteCallback finishCallback = null; switch (animationType) { case ANIM_CUSTOM: displayContent.mAppTransition.overridePendingAppTransition( pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getCustomBackgroundColor(), pendingOptions.getAnimationStartedListener(), pendingOptions.getAnimationFinishedListener(), pendingOptions.getOverrideTaskTransition()); options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getCustomBackgroundColor(), Loading @@ -5117,9 +5096,6 @@ final class ActivityRecord extends WindowToken { finishCallback = pendingOptions.getAnimationFinishedListener(); break; case ANIM_CLIP_REVEAL: displayContent.mAppTransition.overridePendingAppTransitionClipReveal( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight()); options = AnimationOptions.makeClipRevealAnimOptions( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight()); Loading @@ -5131,9 +5107,6 @@ final class ActivityRecord extends WindowToken { } break; case ANIM_SCALE_UP: displayContent.mAppTransition.overridePendingAppTransitionScaleUp( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight()); options = AnimationOptions.makeScaleUpAnimOptions( pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight(), Loading @@ -5149,10 +5122,6 @@ final class ActivityRecord extends WindowToken { case ANIM_THUMBNAIL_SCALE_DOWN: final boolean scaleUp = (animationType == ANIM_THUMBNAIL_SCALE_UP); final HardwareBuffer buffer = pendingOptions.getThumbnail(); displayContent.mAppTransition.overridePendingAppTransitionThumb(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getAnimationStartedListener(), scaleUp); options = AnimationOptions.makeThumbnailAnimOptions(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp); startCallback = pendingOptions.getAnimationStartedListener(); Loading @@ -5165,36 +5134,9 @@ final class ActivityRecord extends WindowToken { break; case ANIM_THUMBNAIL_ASPECT_SCALE_UP: case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN: final AppTransitionAnimationSpec[] specs = pendingOptions.getAnimSpecs(); final IAppTransitionAnimationSpecsFuture specsFuture = pendingOptions.getSpecsFuture(); if (specsFuture != null) { displayContent.mAppTransition.overridePendingAppTransitionMultiThumbFuture( specsFuture, pendingOptions.getAnimationStartedListener(), animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP); } else if (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_DOWN && specs != null) { displayContent.mAppTransition.overridePendingAppTransitionMultiThumb( specs, pendingOptions.getAnimationStartedListener(), pendingOptions.getAnimationFinishedListener(), false); } else { displayContent.mAppTransition.overridePendingAppTransitionAspectScaledThumb( pendingOptions.getThumbnail(), pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight(), pendingOptions.getAnimationStartedListener(), (animationType == ANIM_THUMBNAIL_ASPECT_SCALE_UP)); if (intent.getSourceBounds() == null) { intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getStartX() + pendingOptions.getWidth(), pendingOptions.getStartY() + pendingOptions.getHeight())); } } // TODO(b/397847511): remove the related types from ActivityOptions. break; case ANIM_OPEN_CROSS_PROFILE_APPS: displayContent.mAppTransition .overridePendingAppTransitionStartCrossProfileApps(); options = AnimationOptions.makeCrossProfileAnimOptions(); break; case ANIM_NONE: Loading Loading @@ -5451,8 +5393,6 @@ final class ActivityRecord extends WindowToken { } private void setVisibility(boolean visible, boolean deferHidingClient) { final AppTransition appTransition = getDisplayContent().mAppTransition; // Don't set visibility to false if we were already not visible. This prevents WM from // adding the app to the closing app list which doesn't make sense for something that is // already not visible. However, set visibility to true even if we are already visible. Loading @@ -5472,8 +5412,8 @@ final class ActivityRecord extends WindowToken { } ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "setAppVisibility(%s, visible=%b): %s visible=%b mVisibleRequested=%b Callers=%s", token, visible, appTransition, isVisible(), mVisibleRequested, "setAppVisibility(%s, visible=%b): visible=%b mVisibleRequested=%b Callers=%s", token, visible, isVisible(), mVisibleRequested, Debug.getCallers(6)); // Before setting mVisibleRequested so we can track changes. Loading Loading @@ -5570,15 +5510,6 @@ final class ActivityRecord extends WindowToken { updateReportedVisibilityLocked(); } @Override boolean applyAnimation(LayoutParams lp, @TransitionOldType int transit, boolean enter, boolean isVoiceInteraction, @Nullable ArrayList<WindowContainer> sources) { if ((mTransitionChangeFlags & FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT) != 0) { return false; } return super.applyAnimation(lp, transit, enter, isVoiceInteraction, sources); } /** * Update visibility to this {@link ActivityRecord}. * Loading Loading @@ -6642,9 +6573,7 @@ final class ActivityRecord extends WindowToken { // starting window is drawn, the transition can start earlier. Exclude finishing and bubble // because it may be a trampoline. if (app == null && !finishing && !mLaunchedFromBubble && mVisibleRequested && !mDisplayContent.mAppTransition.isReady() && !mDisplayContent.mAppTransition.isRunning() && mDisplayContent.isNextTransitionForward()) { && mVisibleRequested && mDisplayContent.isNextTransitionForward()) { // The pending transition state will be cleared after the transition is started, so // save the state for launching the client later (used by LaunchActivityItem). mStartingData.mIsTransitionForward = true; Loading Loading @@ -7526,7 +7455,6 @@ final class ActivityRecord extends WindowToken { } } getDisplayContent().mAppTransition.notifyAppTransitionFinishedLocked(token); scheduleAnimation(); // Schedule to handle the stopping and finishing activities which the animation is done Loading
services/core/java/com/android/server/wm/DisplayArea.java +2 −7 Original line number Diff line number Diff line Loading @@ -748,14 +748,9 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { && policy.okToAnimate(true /* ignoreScreenOn */)) { return false; } // Consider unoccluding only when all unknown visibilities have been // resolved, as otherwise we just may be starting another occluding activity. final boolean isUnoccluding = mDisplayContent.mAppTransition.isUnoccluding() && mDisplayContent.mUnknownAppVisibilityController.allResolved(); // If keyguard is showing, or we're unoccluding, force the keyguard's orientation, // Use keyguard's orientation if it is showing and not occluded // even if SystemUI hasn't updated the attrs yet. if (policy.isKeyguardShowingAndNotOccluded() || isUnoccluding) { if (policy.isKeyguardShowingAndNotOccluded()) { return true; } } Loading
services/core/java/com/android/server/wm/DisplayContent.java +4 −67 Original line number Diff line number Diff line Loading @@ -88,7 +88,6 @@ import static android.view.inputmethod.ImeTracker.DEBUG_IME_VISIBILITY; import static android.window.DisplayAreaOrganizer.FEATURE_IME; import static android.window.DisplayAreaOrganizer.FEATURE_ROOT; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_APP_TRANSITIONS; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_BOOT; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_CONTENT_RECORDING; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_FOCUS; Loading Loading @@ -369,12 +368,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private MetricsLogger mMetricsLogger; /** * List of clients without a transtiton animation that we notify once we are done * transitioning since they won't be notified through the app window animator. */ final List<IBinder> mNoAnimationNotifyOnTransitionFinished = new ArrayList<>(); // Mapping from a token IBinder to a WindowToken object on this display. private final HashMap<IBinder, WindowToken> mTokenMap = new HashMap(); Loading Loading @@ -1171,8 +1164,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mFixedRotationTransitionListener = new FixedRotationTransitionListener(mDisplayId); mAppTransition = new AppTransition(mWmService.mContext, mWmService, this); mAppTransition.registerListenerLocked(mWmService.mActivityManagerAppTransitionNotifier); mAppTransition.registerListenerLocked(mFixedRotationTransitionListener); mTransitionController.registerLegacyListener(mFixedRotationTransitionListener); mUnknownAppVisibilityController = new UnknownAppVisibilityController(mWmService, this); mRemoteDisplayChangeController = new RemoteDisplayChangeController(this); Loading Loading @@ -2858,13 +2849,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return isVisible() && !mRemoved && !mRemoving; } @Override void onAppTransitionDone() { super.onAppTransitionDone(); mWmService.mWindowsChanged = true; onTransitionFinished(); } void onTransitionFinished() { // If the transition finished callback cannot match the token for some reason, make sure the // rotated state is cleared if it is already invisible. Loading Loading @@ -3385,9 +3369,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDeferredRemoval = false; try { mUnknownAppVisibilityController.clear(); mAppTransition.removeAppTransitionTimeoutCallbacks(); mTransitionController.unregisterLegacyListener(mFixedRotationTransitionListener); handleAnimatingStoppedAndTransition(); mDeviceStateController.unregisterDeviceStateCallback(mDeviceStateConsumer); super.removeImmediately(); if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Removing display=" + this); Loading Loading @@ -3570,11 +3552,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayRotation.dumpDebug(proto, DISPLAY_ROTATION); mDisplayFrames.dumpDebug(proto, DISPLAY_FRAMES); proto.write(MIN_SIZE_OF_RESIZEABLE_TASK_DP, mMinSizeOfResizeableTaskDp); if (mTransitionController.isShellTransitionsEnabled()) { mTransitionController.dumpDebugLegacy(proto, APP_TRANSITION); } else { mAppTransition.dumpDebug(proto, APP_TRANSITION); } if (mFocusedApp != null) { mFocusedApp.writeNameToProto(proto, FOCUSED_APP); } Loading Loading @@ -5635,61 +5613,20 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp */ void requestTransitionAndLegacyPrepare(@WindowManager.TransitionType int transit, @WindowManager.TransitionFlags int flags) { prepareAppTransition(transit, flags); mTransitionController.requestTransitionIfNeeded(transit, flags, null /* trigger */, this); } void executeAppTransition() { mTransitionController.setReady(this); if (mAppTransition.isTransitionSet()) { ProtoLog.w(WM_DEBUG_APP_TRANSITIONS, "Execute app transition: %s, displayId: %d Callers=%s", mAppTransition, mDisplayId, Debug.getCallers(5)); mAppTransition.setReady(); mWmService.mWindowPlacerLocked.requestTraversal(); } } /** * Update pendingLayoutChanges after app transition has finished. */ void handleAnimatingStoppedAndTransition() { int changes = 0; mAppTransition.setIdle(); for (int i = mNoAnimationNotifyOnTransitionFinished.size() - 1; i >= 0; i--) { final IBinder token = mNoAnimationNotifyOnTransitionFinished.get(i); mAppTransition.notifyAppTransitionFinishedLocked(token); } mNoAnimationNotifyOnTransitionFinished.clear(); mWallpaperController.hideDeferredWallpapersIfNeededLegacy(); onAppTransitionDone(); changes |= FINISH_LAYOUT_REDO_LAYOUT; ProtoLog.v(WM_DEBUG_WALLPAPER, "Wallpaper layer changed: assigning layers + relayout"); computeImeTarget(true /* updateImeTarget */); mWallpaperMayChange = true; // Since the window list has been rebuilt, focus might have to be recomputed since the // actual order of windows might have changed again. mWmService.mFocusMayChange = true; pendingLayoutChanges |= changes; } /** Check if pending app transition is for activity / task launch. */ boolean isNextTransitionForward() { // TODO(b/191375840): decouple "forwardness" from transition system. if (mTransitionController.isShellTransitionsEnabled()) { @WindowManager.TransitionType int type = final @WindowManager.TransitionType int type = mTransitionController.getCollectingTransitionType(); return type == TRANSIT_OPEN || type == TRANSIT_TO_FRONT; } return mAppTransition.containsTransitRequest(TRANSIT_OPEN) || mAppTransition.containsTransitRequest(TRANSIT_TO_FRONT); } /** * @see Display#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +0 −1 Original line number Diff line number Diff line Loading @@ -631,7 +631,6 @@ public class DisplayPolicy { mHandler.post(mAppTransitionFinished); } }; displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener); displayContent.mTransitionController.registerLegacyListener(mAppTransitionListener); // TODO: Make it can take screenshot on external display Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +0 −4 Original line number Diff line number Diff line Loading @@ -2103,10 +2103,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> removeRootTasksInWindowingModes(WINDOWING_MODE_PINNED); } // Set a transition to ensure that we don't immediately try and update the visibility // of the activity entering PIP r.getDisplayContent().prepareAppTransition(TRANSIT_NONE); transitionController.collect(task); // Defer the windowing mode change until after the transition to prevent the activity Loading