Pass background color from transition info to remote animation
With shell transition, there won't be task info if the transition
is launching activity in the same task. ActivityLaunchAnimator
assumed the task info is non-null, which causes NPE.
Bug: 223397404
Test: adb shell setprop persist.wm.debug.shell_transit 1; reboot
Long press quick settings tile from notification multiple
time. Especially launch the same tile twice, systemui
should not crash.
Change-Id: I0ad1fef17653d72162d430339ac7e8a716aa9bfe
This commit is contained in:
@@ -33,6 +33,7 @@ import static android.view.RemoteAnimationTargetProto.TASK_ID;
|
||||
import static android.view.RemoteAnimationTargetProto.WINDOW_CONFIGURATION;
|
||||
import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
|
||||
|
||||
import android.annotation.ColorInt;
|
||||
import android.annotation.IntDef;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.TaskInfo;
|
||||
@@ -221,6 +222,12 @@ public class RemoteAnimationTarget implements Parcelable {
|
||||
*/
|
||||
public boolean hasAnimatingParent;
|
||||
|
||||
/**
|
||||
* The background color of animation in case the task info is not available if the transition
|
||||
* is activity level.
|
||||
*/
|
||||
public @ColorInt int backgroundColor;
|
||||
|
||||
public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
|
||||
Rect clipRect, Rect contentInsets, int prefixOrderIndex, Point position,
|
||||
Rect localBounds, Rect screenSpaceBounds,
|
||||
@@ -279,6 +286,7 @@ public class RemoteAnimationTarget implements Parcelable {
|
||||
allowEnterPip = in.readBoolean();
|
||||
windowType = in.readInt();
|
||||
hasAnimatingParent = in.readBoolean();
|
||||
backgroundColor = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -307,6 +315,7 @@ public class RemoteAnimationTarget implements Parcelable {
|
||||
dest.writeBoolean(allowEnterPip);
|
||||
dest.writeInt(windowType);
|
||||
dest.writeBoolean(hasAnimatingParent);
|
||||
dest.writeInt(backgroundColor);
|
||||
}
|
||||
|
||||
public void dump(PrintWriter pw, String prefix) {
|
||||
@@ -327,6 +336,7 @@ public class RemoteAnimationTarget implements Parcelable {
|
||||
pw.print(prefix); pw.print("allowEnterPip="); pw.println(allowEnterPip);
|
||||
pw.print(prefix); pw.print("windowType="); pw.print(windowType);
|
||||
pw.print(prefix); pw.print("hasAnimatingParent="); pw.print(hasAnimatingParent);
|
||||
pw.print(prefix); pw.print("backgroundColor="); pw.print(backgroundColor);
|
||||
}
|
||||
|
||||
public void dumpDebug(ProtoOutputStream proto, long fieldId) {
|
||||
|
||||
@@ -432,7 +432,8 @@ class ActivityLaunchAnimator(
|
||||
right = windowBounds.right
|
||||
)
|
||||
val callback = this@ActivityLaunchAnimator.callback!!
|
||||
val windowBackgroundColor = callback.getBackgroundColor(window.taskInfo)
|
||||
val windowBackgroundColor = window.taskInfo?.let { callback.getBackgroundColor(it) }
|
||||
?: window.backgroundColor
|
||||
|
||||
// Make sure we use the modified timings when animating a dialog into an app.
|
||||
val launchAnimator = if (controller.isDialogLaunch) {
|
||||
|
||||
@@ -138,7 +138,7 @@ class RemoteTransitionAdapter {
|
||||
info: TransitionInfo,
|
||||
t: SurfaceControl.Transaction
|
||||
): RemoteAnimationTarget {
|
||||
return RemoteAnimationTarget(
|
||||
val target = RemoteAnimationTarget(
|
||||
/* taskId */ if (change.taskInfo != null) change.taskInfo!!.taskId else -1,
|
||||
/* mode */ newModeToLegacyMode(change.mode),
|
||||
/* leash */ createLeash(info, change, order, t),
|
||||
@@ -160,6 +160,8 @@ class RemoteTransitionAdapter {
|
||||
/* taskInfo */ change.taskInfo,
|
||||
/* allowEnterPip */ change.allowEnterPip,
|
||||
/* windowType */ WindowManager.LayoutParams.INVALID_WINDOW_TYPE)
|
||||
target.backgroundColor = change.backgroundColor
|
||||
return target
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user