Add API to specify background color for animations

To be used for new task transtion animations
(go/android-new-task-motion) to set a background color behind the
animations instead of showing the wallpaper.

Test: atest FlickerTests:TaskTransitionTest
Bug: 199507257
Change-Id: I7fabfdcaf90be63c11eb3b18d65259c620570cab
This commit is contained in:
Pablo Gamito
2021-09-13 15:20:05 +02:00
parent 9349f6a8f6
commit 2ccc829e71
5 changed files with 46 additions and 11 deletions

View File

@@ -19,6 +19,7 @@ package android.view.animation;
import android.annotation.AnimRes;
import android.annotation.ColorInt;
import android.annotation.InterpolatorRes;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.TypedArray;
@@ -258,8 +259,6 @@ public abstract class Animation implements Cloneable {
setZAdjustment(a.getInt(com.android.internal.R.styleable.Animation_zAdjustment, ZORDER_NORMAL));
setBackgroundColor(a.getInt(com.android.internal.R.styleable.Animation_background, 0));
setDetachWallpaper(
a.getBoolean(com.android.internal.R.styleable.Animation_detachWallpaper, false));
setShowWallpaper(
@@ -271,6 +270,15 @@ public abstract class Animation implements Cloneable {
a.recycle();
Context uiContext = ActivityThread.currentActivityThread().getSystemUiContext();
TypedArray uiStyledAttrs = uiContext
.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Animation);
setBackgroundColor(
uiStyledAttrs.getColor(com.android.internal.R.styleable.Animation_background, 0));
uiStyledAttrs.recycle();
if (resID > 0) {
setInterpolator(context, resID);
}
@@ -632,16 +640,15 @@ public abstract class Animation implements Cloneable {
}
/**
* Set background behind animation.
* Set background behind an animation.
*
* @param bg The background color. If 0, no background. Currently must
* be black, with any desired alpha level.
* @param bg The background color. If 0, no background.
*
* @deprecated None of window animations are running with background color.
*/
@Deprecated
public void setBackgroundColor(@ColorInt int bg) {
// The background color is not needed any more, do nothing.
mBackgroundColor = bg;
}
/**
@@ -803,7 +810,7 @@ public abstract class Animation implements Cloneable {
@Deprecated
@ColorInt
public int getBackgroundColor() {
return 0;
return mBackgroundColor;
}
/**

View File

@@ -6822,9 +6822,8 @@
content for the duration of the animation. -->
<enum name="bottom" value="-1" />
</attr>
<!-- Special background behind animation. Only for use with window
animations. Can only be a color, and only black. If 0, the
default, there is no background. -->
<!-- Special background behind animation. Only for use with task animations.
If 0, the default, there is no background. -->
<attr name="background" />
<!-- Special option for window animations: if this window is on top
of a wallpaper, don't animate the wallpaper with it. -->
@@ -7737,7 +7736,7 @@
<!-- Name of a method on the Context used to inflate the menu that will be
called when the item is clicked.
{@deprecated Menu actually traverses the Context hierarchy looking for the
{@deprecated Menu actually traverses the Context hierarchy looking for the
relevant method, which is fragile (an intermediate ContextWrapper adding a
same-named method would change behavior) and restricts bytecode optimizers
such as R8. Instead, use MenuItem.setOnMenuItemClickListener.} -->

View File

@@ -16,6 +16,7 @@
package com.android.server.wm;
import android.annotation.ColorInt;
import android.util.proto.ProtoOutputStream;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
@@ -106,4 +107,14 @@ interface AnimationAdapter {
default boolean shouldDeferAnimationFinish(Runnable endDeferFinishCallback) {
return false;
}
/**
* Gets the background color to show behind an animation.
*
* @return The background color to show behind an animation (0 for no background color).
*/
@ColorInt
default int getBackgroundColor() {
return 0;
}
}

View File

@@ -19,6 +19,7 @@ package com.android.server.wm;
import static com.android.server.wm.AnimationAdapterProto.LOCAL;
import static com.android.server.wm.LocalAnimationAdapterProto.ANIMATION_SPEC;
import android.annotation.ColorInt;
import android.os.SystemClock;
import android.util.proto.ProtoOutputStream;
import android.view.SurfaceControl;
@@ -71,6 +72,12 @@ class LocalAnimationAdapter implements AnimationAdapter {
return mSpec.calculateStatusBarTransitionStartTime();
}
@Override
@ColorInt
public int getBackgroundColor() {
return mSpec.getBackgroundColor();
}
@Override
public void dump(PrintWriter pw, String prefix) {
mSpec.dump(pw, prefix);
@@ -149,5 +156,9 @@ class LocalAnimationAdapter implements AnimationAdapter {
}
void dumpDebugInner(ProtoOutputStream proto);
default int getBackgroundColor() {
return 0;
}
}
}

View File

@@ -21,6 +21,7 @@ import static com.android.server.wm.AnimationSpecProto.WINDOW;
import static com.android.server.wm.WindowAnimationSpecProto.ANIMATION;
import static com.android.server.wm.WindowStateAnimator.ROOT_TASK_CLIP_NONE;
import android.annotation.ColorInt;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.SystemClock;
@@ -84,6 +85,12 @@ public class WindowAnimationSpec implements AnimationSpec {
return mAnimation.computeDurationHint();
}
@Override
@ColorInt
public int getBackgroundColor() {
return mAnimation.getBackgroundColor();
}
@Override
public void apply(Transaction t, SurfaceControl leash, long currentPlayTime) {
final TmpValues tmp = mThreadLocalTmps.get();