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. */
|
/** 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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user