Merge changes Ibd9f22af,Id42f5276 into sc-qpr1-dev

* changes:
  Revert "Add API to specify background color for animations"
  Stop relying on background color attribute to set task transition background
This commit is contained in:
Pablo Gamito
2021-09-28 04:57:52 +00:00
committed by Android (Google) Code Review
6 changed files with 35 additions and 56 deletions

View File

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

View File

@@ -6822,8 +6822,9 @@
content for the duration of the animation. --> content for the duration of the animation. -->
<enum name="bottom" value="-1" /> <enum name="bottom" value="-1" />
</attr> </attr>
<!-- Special background behind animation. Only for use with task animations. <!-- Special background behind animation. Only for use with window
If 0, the default, there is no background. --> animations. Can only be a color, and only black. If 0, the
default, there is no background. -->
<attr name="background" /> <attr name="background" />
<!-- Special option for window animations: if this window is on top <!-- Special option for window animations: if this window is on top
of a wallpaper, don't animate the wallpaper with it. --> of a wallpaper, don't animate the wallpaper with it. -->

View File

@@ -16,7 +16,6 @@
package com.android.server.wm; package com.android.server.wm;
import android.annotation.ColorInt;
import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction; import android.view.SurfaceControl.Transaction;
@@ -107,14 +106,4 @@ interface AnimationAdapter {
default boolean shouldDeferAnimationFinish(Runnable endDeferFinishCallback) { default boolean shouldDeferAnimationFinish(Runnable endDeferFinishCallback) {
return false; 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,7 +19,6 @@ package com.android.server.wm;
import static com.android.server.wm.AnimationAdapterProto.LOCAL; import static com.android.server.wm.AnimationAdapterProto.LOCAL;
import static com.android.server.wm.LocalAnimationAdapterProto.ANIMATION_SPEC; import static com.android.server.wm.LocalAnimationAdapterProto.ANIMATION_SPEC;
import android.annotation.ColorInt;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream;
import android.view.SurfaceControl; import android.view.SurfaceControl;
@@ -72,12 +71,6 @@ class LocalAnimationAdapter implements AnimationAdapter {
return mSpec.calculateStatusBarTransitionStartTime(); return mSpec.calculateStatusBarTransitionStartTime();
} }
@Override
@ColorInt
public int getBackgroundColor() {
return mSpec.getBackgroundColor();
}
@Override @Override
public void dump(PrintWriter pw, String prefix) { public void dump(PrintWriter pw, String prefix) {
mSpec.dump(pw, prefix); mSpec.dump(pw, prefix);
@@ -156,9 +149,5 @@ class LocalAnimationAdapter implements AnimationAdapter {
} }
void dumpDebugInner(ProtoOutputStream proto); void dumpDebugInner(ProtoOutputStream proto);
default int getBackgroundColor() {
return 0;
}
} }
} }

View File

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

View File

@@ -30,6 +30,10 @@ import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.os.UserHandle.USER_NULL; import static android.os.UserHandle.USER_NULL;
import static android.view.SurfaceControl.Transaction; import static android.view.SurfaceControl.Transaction;
import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE; import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_CLOSE;
import static android.view.WindowManager.TRANSIT_OLD_TASK_OPEN;
import static android.view.WindowManager.TRANSIT_OLD_TASK_TO_BACK;
import static android.view.WindowManager.TRANSIT_OLD_TASK_TO_FRONT;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS_ANIM; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS_ANIM;
@@ -59,10 +63,13 @@ import static com.android.server.wm.WindowManagerService.logWithStack;
import static com.android.server.wm.WindowStateAnimator.ROOT_TASK_CLIP_AFTER_ANIM; import static com.android.server.wm.WindowStateAnimator.ROOT_TASK_CLIP_AFTER_ANIM;
import android.annotation.CallSuper; import android.annotation.CallSuper;
import android.annotation.ColorInt;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityThread;
import android.app.WindowConfiguration; import android.app.WindowConfiguration;
import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Point; import android.graphics.Point;
@@ -88,6 +95,7 @@ import android.view.animation.Animation;
import android.window.IWindowContainerToken; import android.window.IWindowContainerToken;
import android.window.WindowContainerToken; import android.window.WindowContainerToken;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog; import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.ToBooleanFunction; import com.android.internal.util.ToBooleanFunction;
@@ -2732,24 +2740,23 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
} }
TaskDisplayArea taskDisplayArea = getTaskDisplayArea(); TaskDisplayArea taskDisplayArea = getTaskDisplayArea();
int backgroundColor = adapter.getBackgroundColor(); boolean isSettingBackgroundColor = taskDisplayArea != null
&& isTransitionWithBackgroundColor(transit);
boolean shouldSetBackgroundColor = taskDisplayArea != null && backgroundColor != 0; if (isSettingBackgroundColor) {
Context uiContext = ActivityThread.currentActivityThread().getSystemUiContext();
@ColorInt int backgroundColor = uiContext.getColor(R.color.overview_background);
if (shouldSetBackgroundColor) {
taskDisplayArea.setBackgroundColor(backgroundColor); taskDisplayArea.setBackgroundColor(backgroundColor);
} }
Runnable clearColorBackground = () -> { final Runnable cleanUpCallback = isSettingBackgroundColor
if (shouldSetBackgroundColor) { ? taskDisplayArea::clearBackgroundColor : () -> {};
taskDisplayArea.clearBackgroundColor();
}
};
startAnimation(getPendingTransaction(), adapter, !isVisible(), startAnimation(getPendingTransaction(), adapter, !isVisible(),
ANIMATION_TYPE_APP_TRANSITION, ANIMATION_TYPE_APP_TRANSITION,
(type, anim) -> clearColorBackground.run(), (type, anim) -> cleanUpCallback.run(),
clearColorBackground); cleanUpCallback);
if (adapter.getShowWallpaper()) { if (adapter.getShowWallpaper()) {
getDisplayContent().pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER; getDisplayContent().pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
@@ -2761,6 +2768,13 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
} }
} }
private boolean isTransitionWithBackgroundColor(@TransitionOldType int transit) {
return transit == TRANSIT_OLD_TASK_OPEN
|| transit == TRANSIT_OLD_TASK_CLOSE
|| transit == TRANSIT_OLD_TASK_TO_FRONT
|| transit == TRANSIT_OLD_TASK_TO_BACK;
}
final SurfaceAnimationRunner getSurfaceAnimationRunner() { final SurfaceAnimationRunner getSurfaceAnimationRunner() {
return mWmService.mSurfaceAnimationRunner; return mWmService.mSurfaceAnimationRunner;
} }