Merge "Exclude unnecessary animations of shell transition" into tm-qpr-dev
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user