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