Merge "Exclude unnecessary animations of shell transition" into tm-qpr-dev am: 171ade50ca

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20270814

Change-Id: I6b6fdeeb54a9815f97184377da11258d33ab97ab
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Riddle Hsu
2022-11-01 08:06:59 +00:00
committed by Automerger Merge Worker
3 changed files with 31 additions and 1 deletions

View File

@@ -141,6 +141,10 @@ public final class TransitionInfo implements Parcelable {
/** The first unused bit. This can be used by remotes to attach custom flags to this change. */
public static final int FLAG_FIRST_CUSTOM = 1 << 17;
/** The change belongs to a window that won't contain activities. */
public static final int FLAGS_IS_NON_APP_WINDOW =
FLAG_IS_WALLPAPER | FLAG_IS_INPUT_METHOD | FLAG_IS_SYSTEM_WINDOW;
/** @hide */
@IntDef(prefix = { "FLAG_" }, value = {
FLAG_NONE,
@@ -579,11 +583,16 @@ public final class TransitionInfo implements Parcelable {
return mFlags;
}
/** Whether the given change flags has included in this change. */
/** Whether this change contains any of the given change flags. */
public boolean hasFlags(@ChangeFlags int flags) {
return (mFlags & flags) != 0;
}
/** Whether this change contains all of the given change flags. */
public boolean hasAllFlags(@ChangeFlags int flags) {
return (mFlags & flags) == flags;
}
/**
* @return the bounds of the container before the change. It may be empty if the container
* is coming into existence.

View File

@@ -46,6 +46,7 @@ import static android.window.TransitionInfo.FLAG_CROSS_PROFILE_WORK_THUMBNAIL;
import static android.window.TransitionInfo.FLAG_DISPLAY_HAS_ALERT_WINDOWS;
import static android.window.TransitionInfo.FLAG_FILLS_TASK;
import static android.window.TransitionInfo.FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;
import static android.window.TransitionInfo.FLAG_IS_BEHIND_STARTING_WINDOW;
import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
@@ -319,6 +320,17 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
final int wallpaperTransit = getWallpaperTransitType(info);
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
final TransitionInfo.Change change = info.getChanges().get(i);
if (change.hasAllFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY
| FLAG_IS_BEHIND_STARTING_WINDOW)) {
// Don't animate embedded activity if it is covered by the starting window.
// Non-embedded case still needs animation because the container can still animate
// the starting window together, e.g. CLOSE or CHANGE type.
continue;
}
if (change.hasFlags(TransitionInfo.FLAGS_IS_NON_APP_WINDOW)) {
// Wallpaper, IME, and system windows don't need any default animations.
continue;
}
final boolean isTask = change.getTaskInfo() != null;
boolean isSeamlessDisplayChange = false;

View File

@@ -5723,6 +5723,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return super.getAnimationLeashParent();
}
@Override
public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) {
super.onAnimationLeashCreated(t, leash);
if (isStartingWindowAssociatedToTask()) {
// Make sure the animation leash is still on top of the task.
t.setLayer(leash, Integer.MAX_VALUE);
}
}
// TODO(b/70040778): We should aim to eliminate the last user of TYPE_APPLICATION_MEDIA
// then we can drop all negative layering on the windowing side and simply inherit
// the default implementation here.