Merge "Exclude unnecessary animations of shell transition" into tm-qpr-dev

This commit is contained in:
Riddle Hsu
2022-11-01 07:30:13 +00:00
committed by Android (Google) Code Review
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. */ /** 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; 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 */ /** @hide */
@IntDef(prefix = { "FLAG_" }, value = { @IntDef(prefix = { "FLAG_" }, value = {
FLAG_NONE, FLAG_NONE,
@@ -579,11 +583,16 @@ public final class TransitionInfo implements Parcelable {
return mFlags; 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) { public boolean hasFlags(@ChangeFlags int flags) {
return (mFlags & flags) != 0; 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 * @return the bounds of the container before the change. It may be empty if the container
* is coming into existence. * 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_DISPLAY_HAS_ALERT_WINDOWS;
import static android.window.TransitionInfo.FLAG_FILLS_TASK; 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_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_DISPLAY;
import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION; import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER; import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
@@ -319,6 +320,17 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
final int wallpaperTransit = getWallpaperTransitType(info); final int wallpaperTransit = getWallpaperTransitType(info);
for (int i = info.getChanges().size() - 1; i >= 0; --i) { for (int i = info.getChanges().size() - 1; i >= 0; --i) {
final TransitionInfo.Change change = info.getChanges().get(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; final boolean isTask = change.getTaskInfo() != null;
boolean isSeamlessDisplayChange = false; boolean isSeamlessDisplayChange = false;

View File

@@ -5723,6 +5723,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return super.getAnimationLeashParent(); 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 // 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 // then we can drop all negative layering on the windowing side and simply inherit
// the default implementation here. // the default implementation here.