diff options
3 files changed, 23 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 3f31ad503c01..53f2c7146656 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -314,6 +314,10 @@ public class AppTransition implements Dump { setAppTransitionState(APP_STATE_TIMEOUT); } + @ColorInt int getNextAppTransitionBackgroundColor() { + return mNextAppTransitionBackgroundColor; + } + HardwareBuffer getAppTransitionThumbnailHeader(WindowContainer container) { AppTransitionAnimationSpec spec = mNextAppTransitionAnimationsSpecs.get( container.hashCode()); diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java index 878413cb9d78..ad158c7b45b9 100644 --- a/services/core/java/com/android/server/wm/RemoteAnimationController.java +++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java @@ -22,6 +22,7 @@ import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; +import android.annotation.ColorInt; import android.annotation.NonNull; import android.annotation.Nullable; import android.graphics.Point; @@ -431,6 +432,7 @@ class RemoteAnimationController implements DeathRecipient { final WindowContainer mWindowContainer; final Rect mStartBounds; final boolean mShowBackdrop; + @ColorInt int mBackdropColor = 0; private @RemoteAnimationTarget.Mode int mMode = RemoteAnimationTarget.MODE_CHANGING; RemoteAnimationRecord(WindowContainer windowContainer, Point endPos, Rect localBounds, @@ -456,6 +458,10 @@ class RemoteAnimationController implements DeathRecipient { } } + void setBackDropColor(@ColorInt int backdropColor) { + mBackdropColor = backdropColor; + } + RemoteAnimationTarget createRemoteAnimationTarget() { if (mAdapter == null || mAdapter.mCapturedFinishCallback == null @@ -510,6 +516,12 @@ class RemoteAnimationController implements DeathRecipient { } @Override + @ColorInt + public int getBackgroundColor() { + return mRecord.mBackdropColor; + } + + @Override public boolean getShowBackground() { return mShowBackdrop; } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index cfc4db969a6f..59aed833f3f3 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -2949,11 +2949,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< if (controller != null && !mSurfaceAnimator.isAnimationStartDelayed()) { // Here we load App XML in order to read com.android.R.styleable#Animation_showBackdrop. boolean showBackdrop = false; + // Optionally set backdrop color if App explicitly provides it through + // {@link Activity#overridePendingTransition(int, int, int)}. + @ColorInt int backdropColor = 0; if (controller.isFromActivityEmbedding()) { final int animAttr = AppTransition.mapOpenCloseTransitTypes(transit, enter); final Animation a = animAttr != 0 ? appTransition.loadAnimationAttr(lp, animAttr, transit) : null; showBackdrop = a != null && a.getShowBackdrop(); + backdropColor = appTransition.getNextAppTransitionBackgroundColor(); } final Rect localBounds = new Rect(mTmpRect); localBounds.offsetTo(mTmpPoint.x, mTmpPoint.y); @@ -2961,6 +2965,9 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< controller.createRemoteAnimationRecord( this, mTmpPoint, localBounds, screenBounds, (isChanging ? mSurfaceFreezer.mFreezeBounds : null), showBackdrop); + if (backdropColor != 0) { + adapters.setBackDropColor(backdropColor); + } if (!isChanging) { adapters.setMode(enter ? RemoteAnimationTarget.MODE_OPENING |