Remove flag introduce_smoother_dimmer
SmoothDimmer is now the default Dimmer. We now only have Dimmer class.
Test: DimmerTests
Bug: 352522056
Flag: EXEMPT flag removal
Change-Id: Ic3c84cab861421d09e0a528d9213d165e81b2b68
diff --git a/core/java/android/window/flags/windowing_frontend.aconfig b/core/java/android/window/flags/windowing_frontend.aconfig
index c451cc8..7f48c42 100644
--- a/core/java/android/window/flags/windowing_frontend.aconfig
+++ b/core/java/android/window/flags/windowing_frontend.aconfig
@@ -80,14 +80,6 @@
}
flag {
- name: "introduce_smoother_dimmer"
- namespace: "windowing_frontend"
- description: "Refactor dim to fix flickers"
- bug: "295291019"
- is_fixed_read_only: true
-}
-
-flag {
name: "transit_ready_tracking"
namespace: "windowing_frontend"
description: "Enable accurate transition readiness tracking"
diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java
index 7ce9de4..7c31177 100644
--- a/services/core/java/com/android/server/wm/Dimmer.java
+++ b/services/core/java/com/android/server/wm/Dimmer.java
@@ -16,39 +16,185 @@
package com.android.server.wm;
+import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_DIMMER;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.annotation.NonNull;
import android.graphics.Rect;
+import android.util.Log;
+import android.view.Surface;
import android.view.SurfaceControl;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.window.flags.Flags;
+import com.android.internal.protolog.ProtoLog;
-/**
- * Utility class for use by a WindowContainer implementation to add "DimLayer" support, that is
- * black layers of varying opacity at various Z-levels which create the effect of a Dim.
- */
-public abstract class Dimmer {
-
- static final boolean DIMMER_REFACTOR = Flags.introduceSmootherDimmer();
+class Dimmer {
/**
* The {@link WindowContainer} that our Dims are bounded to. We may be dimming on behalf of the
* host, some controller of it, or one of the hosts children.
*/
- protected final WindowContainer mHost;
+ private final WindowContainer<?> mHost;
- protected Dimmer(WindowContainer host) {
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "Dimmer" : TAG_WM;
+ DimState mDimState;
+ final DimmerAnimationHelper.AnimationAdapterFactory mAnimationAdapterFactory;
+
+ /**
+ * Controls the dim behaviour
+ */
+ protected class DimState {
+ /** Related objects */
+ SurfaceControl mDimSurface;
+ final WindowContainer<?> mHostContainer;
+ // The last container to request to dim
+ private WindowContainer<?> mLastRequestedDimContainer;
+ /** Animation */
+ private final DimmerAnimationHelper mAnimationHelper;
+ boolean mSkipAnimation = false;
+ // Determines whether the dim layer should animate before destroying.
+ boolean mAnimateExit = true;
+ /** Surface visibility and bounds */
+ private boolean mIsVisible = false;
+ // TODO(b/64816140): Remove after confirming dimmer layer always matches its container.
+ final Rect mDimBounds = new Rect();
+
+ DimState() {
+ mHostContainer = mHost;
+ mAnimationHelper = new DimmerAnimationHelper(mAnimationAdapterFactory);
+ try {
+ mDimSurface = makeDimLayer();
+ } catch (Surface.OutOfResourcesException e) {
+ Log.w(TAG, "OutOfResourcesException creating dim surface");
+ }
+ }
+
+ void ensureVisible(@NonNull SurfaceControl.Transaction t) {
+ if (!mIsVisible) {
+ t.show(mDimSurface);
+ t.setAlpha(mDimSurface, 0f);
+ mIsVisible = true;
+ }
+ }
+
+ void adjustSurfaceLayout(@NonNull SurfaceControl.Transaction t) {
+ // TODO: Once we use geometry from hierarchy this falls away.
+ t.setPosition(mDimSurface, mDimBounds.left, mDimBounds.top);
+ t.setWindowCrop(mDimSurface, mDimBounds.width(), mDimBounds.height());
+ }
+
+ /**
+ * Set the parameters to prepare the dim to change its appearance
+ */
+ void prepareLookChange(float alpha, int blurRadius) {
+ mAnimationHelper.setRequestedAppearance(alpha, blurRadius);
+ }
+
+ /**
+ * Prepare the dim for the exit animation
+ */
+ void exit(@NonNull SurfaceControl.Transaction t) {
+ if (!mAnimateExit) {
+ remove(t);
+ } else {
+ mAnimationHelper.setExitParameters();
+ setReady(t);
+ }
+ }
+
+ void remove(@NonNull SurfaceControl.Transaction t) {
+ mAnimationHelper.stopCurrentAnimation(mDimSurface);
+ if (mDimSurface.isValid()) {
+ t.remove(mDimSurface);
+ ProtoLog.d(WM_DEBUG_DIMMER,
+ "Removing dim surface %s on transaction %s", this, t);
+ } else {
+ Log.w(TAG, "Tried to remove " + mDimSurface + " multiple times\n");
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "Dimmer#DimState with host=" + mHostContainer + ", surface=" + mDimSurface;
+ }
+
+ /**
+ * Set the parameters to prepare the dim to be relative parented to the dimming container
+ */
+ void prepareReparent(@NonNull WindowContainer<?> relativeParent, int relativeLayer) {
+ mAnimationHelper.setRequestedRelativeParent(relativeParent, relativeLayer);
+ }
+
+ /**
+ * Call when all the changes have been requested to have them applied
+ * @param t The transaction in which to apply the changes
+ */
+ void setReady(@NonNull SurfaceControl.Transaction t) {
+ mAnimationHelper.applyChanges(t, this);
+ }
+
+ /**
+ * Whether anyone is currently requesting the dim
+ */
+ boolean isDimming() {
+ return mLastRequestedDimContainer != null;
+ }
+
+ private SurfaceControl makeDimLayer() {
+ return mHost.makeChildSurface(null)
+ .setParent(mHost.getSurfaceControl())
+ .setColorLayer()
+ .setName("Dim Layer for - " + mHost.getName())
+ .setCallsite("DimLayer.makeDimLayer")
+ .build();
+ }
+ }
+
+ protected Dimmer(@NonNull WindowContainer<?> host) {
+ this(host, new DimmerAnimationHelper.AnimationAdapterFactory());
+ }
+
+ @VisibleForTesting
+ Dimmer(@NonNull WindowContainer host,
+ @NonNull DimmerAnimationHelper.AnimationAdapterFactory animationFactory) {
mHost = host;
+ mAnimationAdapterFactory = animationFactory;
}
- // Constructs the correct type of dimmer
- static Dimmer create(WindowContainer host) {
- return DIMMER_REFACTOR ? new SmoothDimmer(host) : new LegacyDimmer(host);
+ public boolean hostIsTask() {
+ return mHost.asTask() != null;
}
- @NonNull
- WindowContainer<?> getHost() {
- return mHost;
+ /**
+ * Mark all dims as pending completion on the next call to {@link #updateDims}
+ *
+ * Called before iterating on mHost's children, first step of dimming.
+ * This is intended for us by the host container, to be called at the beginning of
+ * {@link WindowContainer#prepareSurfaces}. After calling this, the container should
+ * chain {@link WindowContainer#prepareSurfaces} down to its children to give them
+ * a chance to request dims to continue.
+ */
+ void resetDimStates() {
+ if (mDimState != null) {
+ mDimState.mLastRequestedDimContainer = null;
+ }
+ }
+
+ /**
+ * Set the aspect of the dim layer, and request to keep dimming.
+ * For each call to {@link WindowContainer#prepareSurfaces} the Dim state will be reset, and the
+ * child should call setAppearance again to request the Dim to continue.
+ * If multiple containers call this method, only the changes relative to the topmost will be
+ * applied.
+ * @param dimmingContainer Container requesting the dim
+ * @param alpha Dim amount
+ * @param blurRadius Blur amount
+ */
+ protected void adjustAppearance(@NonNull WindowContainer<?> dimmingContainer,
+ float alpha, int blurRadius) {
+ final DimState d = obtainDimState(dimmingContainer);
+ d.prepareLookChange(alpha, blurRadius);
}
/**
@@ -62,42 +208,15 @@
* the child of the host should call adjustRelativeLayer and {@link Dimmer#adjustAppearance} to
* continue dimming. Indeed, this method won't be able to keep dimming or get a new DimState
* without also adjusting the appearance.
- * @param container The container which to dim above. Should be a child of the host.
+ * @param dimmingContainer The container which to dim above. Should be a child of the host.
* @param relativeLayer The position of the dim wrt the container
*/
- protected abstract void adjustRelativeLayer(WindowContainer container, int relativeLayer);
-
- /**
- * Set the aspect of the dim layer, and request to keep dimming.
- * For each call to {@link WindowContainer#prepareSurfaces} the Dim state will be reset, and the
- * child should call setAppearance again to request the Dim to continue.
- * If multiple containers call this method, only the changes relative to the topmost will be
- * applied.
- * @param container Container requesting the dim
- * @param alpha Dim amount
- * @param blurRadius Blur amount
- */
- protected abstract void adjustAppearance(
- WindowContainer container, float alpha, int blurRadius);
-
- /**
- * Mark all dims as pending completion on the next call to {@link #updateDims}
- *
- * Called before iterating on mHost's children, first step of dimming.
- * This is intended for us by the host container, to be called at the beginning of
- * {@link WindowContainer#prepareSurfaces}. After calling this, the container should
- * chain {@link WindowContainer#prepareSurfaces} down to it's children to give them
- * a chance to request dims to continue.
- */
- abstract void resetDimStates();
-
- /** Returns non-null bounds if the dimmer is showing. */
- abstract Rect getDimBounds();
-
- abstract void dontAnimateExit();
-
- @VisibleForTesting
- abstract SurfaceControl getDimLayer();
+ public void adjustRelativeLayer(@NonNull WindowContainer<?> dimmingContainer,
+ int relativeLayer) {
+ if (mDimState != null) {
+ mDimState.prepareReparent(dimmingContainer, relativeLayer);
+ }
+ }
/**
* Call after invoking {@link WindowContainer#prepareSurfaces} on children as
@@ -106,5 +225,51 @@
* @param t A transaction in which to update the dims.
* @return true if any Dims were updated.
*/
- abstract boolean updateDims(SurfaceControl.Transaction t);
+ boolean updateDims(@NonNull SurfaceControl.Transaction t) {
+ if (mDimState == null) {
+ return false;
+ }
+ if (!mDimState.isDimming()) {
+ // No one is dimming, fade out and remove the dim
+ mDimState.exit(t);
+ mDimState = null;
+ return false;
+ } else {
+ // Someone is dimming, show the requested changes
+ mDimState.adjustSurfaceLayout(t);
+ final WindowState ws = mDimState.mLastRequestedDimContainer.asWindowState();
+ if (!mDimState.mIsVisible && ws != null && ws.mActivityRecord != null
+ && ws.mActivityRecord.mStartingData != null) {
+ // Skip enter animation while starting window is on top of its activity
+ mDimState.mSkipAnimation = true;
+ }
+ mDimState.setReady(t);
+ return true;
+ }
+ }
+
+ @NonNull
+ private DimState obtainDimState(@NonNull WindowContainer<?> container) {
+ if (mDimState == null) {
+ mDimState = new DimState();
+ }
+ mDimState.mLastRequestedDimContainer = container;
+ return mDimState;
+ }
+
+ /** Returns non-null bounds if the dimmer is showing. */
+ @VisibleForTesting
+ SurfaceControl getDimLayer() {
+ return mDimState != null ? mDimState.mDimSurface : null;
+ }
+
+ Rect getDimBounds() {
+ return mDimState != null ? mDimState.mDimBounds : null;
+ }
+
+ void dontAnimateExit() {
+ if (mDimState != null) {
+ mDimState.mAnimateExit = false;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/wm/DimmerAnimationHelper.java b/services/core/java/com/android/server/wm/DimmerAnimationHelper.java
index 22fa88f..df1549e 100644
--- a/services/core/java/com/android/server/wm/DimmerAnimationHelper.java
+++ b/services/core/java/com/android/server/wm/DimmerAnimationHelper.java
@@ -25,6 +25,7 @@
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import android.annotation.NonNull;
import android.util.Log;
import android.util.proto.ProtoOutputStream;
import android.view.SurfaceControl;
@@ -46,13 +47,13 @@
static class Change {
private float mAlpha = -1f;
private int mBlurRadius = -1;
- private WindowContainer mDimmingContainer = null;
+ private WindowContainer<?> mDimmingContainer = null;
private int mRelativeLayer = -1;
private static final float EPSILON = 0.0001f;
Change() {}
- Change(Change other) {
+ Change(@NonNull Change other) {
mAlpha = other.mAlpha;
mBlurRadius = other.mBlurRadius;
mDimmingContainer = other.mDimmingContainer;
@@ -60,15 +61,15 @@
}
// Same alpha and blur
- boolean hasSameVisualProperties(Change other) {
+ boolean hasSameVisualProperties(@NonNull Change other) {
return Math.abs(mAlpha - other.mAlpha) < EPSILON && mBlurRadius == other.mBlurRadius;
}
- boolean hasSameDimmingContainer(Change other) {
+ boolean hasSameDimmingContainer(@NonNull Change other) {
return mDimmingContainer != null && mDimmingContainer == other.mDimmingContainer;
}
- void inheritPropertiesFromAnimation(AnimationSpec anim) {
+ void inheritPropertiesFromAnimation(@NonNull AnimationSpec anim) {
mAlpha = anim.mCurrentAlpha;
mBlurRadius = anim.mCurrentBlur;
}
@@ -97,7 +98,7 @@
}
// Sets a requested change without applying it immediately
- void setRequestedRelativeParent(WindowContainer relativeParent, int relativeLayer) {
+ void setRequestedRelativeParent(@NonNull WindowContainer<?> relativeParent, int relativeLayer) {
mRequestedProperties.mDimmingContainer = relativeParent;
mRequestedProperties.mRelativeLayer = relativeLayer;
}
@@ -114,7 +115,7 @@
* {@link Change#setRequestedRelativeParent(WindowContainer, int)}, or
* {@link Change#setRequestedAppearance(float, int)}
*/
- void applyChanges(SurfaceControl.Transaction t, SmoothDimmer.DimState dim) {
+ void applyChanges(@NonNull SurfaceControl.Transaction t, @NonNull Dimmer.DimState dim) {
if (mRequestedProperties.mDimmingContainer == null) {
Log.e(TAG, this + " does not have a dimming container. Have you forgotten to "
+ "call adjustRelativeLayer?");
@@ -160,7 +161,7 @@
}
private void startAnimation(
- SurfaceControl.Transaction t, SmoothDimmer.DimState dim) {
+ @NonNull SurfaceControl.Transaction t, @NonNull Dimmer.DimState dim) {
ProtoLog.v(WM_DEBUG_DIMMER, "Starting animation on %s", dim);
mAlphaAnimationSpec = getRequestedAnimationSpec();
mLocalAnimationAdapter = mAnimationAdapterFactory.get(mAlphaAnimationSpec,
@@ -186,7 +187,7 @@
return mAlphaAnimationSpec != null;
}
- void stopCurrentAnimation(SurfaceControl surface) {
+ void stopCurrentAnimation(@NonNull SurfaceControl surface) {
if (mLocalAnimationAdapter != null && isAnimating()) {
// Save the current animation progress and cancel the animation
mCurrentProperties.inheritPropertiesFromAnimation(mAlphaAnimationSpec);
@@ -196,6 +197,7 @@
}
}
+ @NonNull
private AnimationSpec getRequestedAnimationSpec() {
final float startAlpha = Math.max(mCurrentProperties.mAlpha, 0f);
final int startBlur = Math.max(mCurrentProperties.mBlurRadius, 0);
@@ -214,8 +216,8 @@
/**
* Change the relative parent of this dim layer
*/
- void relativeReparent(SurfaceControl dimLayer, SurfaceControl relativeParent,
- int relativePosition, SurfaceControl.Transaction t) {
+ void relativeReparent(@NonNull SurfaceControl dimLayer, @NonNull SurfaceControl relativeParent,
+ int relativePosition, @NonNull SurfaceControl.Transaction t) {
try {
t.setRelativeLayer(dimLayer, relativeParent, relativePosition);
} catch (NullPointerException e) {
@@ -223,7 +225,8 @@
}
}
- void setAlphaBlur(SurfaceControl sc, float alpha, int blur, SurfaceControl.Transaction t) {
+ void setAlphaBlur(@NonNull SurfaceControl sc, float alpha, int blur,
+ @NonNull SurfaceControl.Transaction t) {
try {
t.setAlpha(sc, alpha);
t.setBackgroundBlurRadius(sc, blur);
@@ -232,7 +235,7 @@
}
}
- private long getDimDuration(WindowContainer container) {
+ private long getDimDuration(@NonNull WindowContainer<?> container) {
// Use the same duration as the animation on the WindowContainer
AnimationAdapter animationAdapter = container.mSurfaceAnimator.getAnimation();
final float durationScale = container.mWmService.getTransitionAnimationScaleLocked();
@@ -282,7 +285,8 @@
}
@Override
- public void apply(SurfaceControl.Transaction t, SurfaceControl sc, long currentPlayTime) {
+ public void apply(@NonNull SurfaceControl.Transaction t, @NonNull SurfaceControl sc,
+ long currentPlayTime) {
if (!mStarted) {
// The first frame would end up in the sync transaction, and since this could be
// applied after the animation transaction, we avoid putting visible changes here.
diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java
index def495f..75724eb 100644
--- a/services/core/java/com/android/server/wm/DisplayArea.java
+++ b/services/core/java/com/android/server/wm/DisplayArea.java
@@ -817,7 +817,7 @@
* DisplayArea that can be dimmed.
*/
static class Dimmable extends DisplayArea<DisplayArea> {
- private final Dimmer mDimmer = Dimmer.create(this);
+ private final Dimmer mDimmer = new Dimmer(this);
Dimmable(WindowManagerService wms, Type type, String name, int featureId) {
super(wms, type, name, featureId);
diff --git a/services/core/java/com/android/server/wm/LegacyDimmer.java b/services/core/java/com/android/server/wm/LegacyDimmer.java
deleted file mode 100644
index 3265e60..0000000
--- a/services/core/java/com/android/server/wm/LegacyDimmer.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import static com.android.server.wm.AlphaAnimationSpecProto.DURATION_MS;
-import static com.android.server.wm.AlphaAnimationSpecProto.FROM;
-import static com.android.server.wm.AlphaAnimationSpecProto.TO;
-import static com.android.server.wm.AnimationSpecProto.ALPHA;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_DIMMER;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-
-import android.graphics.Rect;
-import android.util.Log;
-import android.util.proto.ProtoOutputStream;
-import android.view.Surface;
-import android.view.SurfaceControl;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.io.PrintWriter;
-
-public class LegacyDimmer extends Dimmer {
- private static final String TAG = TAG_WITH_CLASS_NAME ? "Dimmer" : TAG_WM;
- // This is in milliseconds.
- private static final int DEFAULT_DIM_ANIM_DURATION = 200;
- DimState mDimState;
- private WindowContainer mLastRequestedDimContainer;
- private final SurfaceAnimatorStarter mSurfaceAnimatorStarter;
-
- private class DimAnimatable implements SurfaceAnimator.Animatable {
- private SurfaceControl mDimLayer;
-
- private DimAnimatable(SurfaceControl dimLayer) {
- mDimLayer = dimLayer;
- }
-
- @Override
- public SurfaceControl.Transaction getSyncTransaction() {
- return mHost.getSyncTransaction();
- }
-
- @Override
- public SurfaceControl.Transaction getPendingTransaction() {
- return mHost.getPendingTransaction();
- }
-
- @Override
- public void commitPendingTransaction() {
- mHost.commitPendingTransaction();
- }
-
- @Override
- public void onAnimationLeashCreated(SurfaceControl.Transaction t, SurfaceControl leash) {
- }
-
- @Override
- public void onAnimationLeashLost(SurfaceControl.Transaction t) {
- }
-
- @Override
- public SurfaceControl.Builder makeAnimationLeash() {
- return mHost.makeAnimationLeash();
- }
-
- @Override
- public SurfaceControl getAnimationLeashParent() {
- return mHost.getSurfaceControl();
- }
-
- @Override
- public SurfaceControl getSurfaceControl() {
- return mDimLayer;
- }
-
- @Override
- public SurfaceControl getParentSurfaceControl() {
- return mHost.getSurfaceControl();
- }
-
- @Override
- public int getSurfaceWidth() {
- // This will determine the size of the leash created. This should be the size of the
- // host and not the dim layer since the dim layer may get bigger during animation. If
- // that occurs, the leash size cannot change so we need to ensure the leash is big
- // enough that the dim layer can grow.
- // This works because the mHost will be a Task which has the display bounds.
- return mHost.getSurfaceWidth();
- }
-
- @Override
- public int getSurfaceHeight() {
- // See getSurfaceWidth() above for explanation.
- return mHost.getSurfaceHeight();
- }
-
- void removeSurface() {
- if (mDimLayer != null && mDimLayer.isValid()) {
- getSyncTransaction().remove(mDimLayer);
- }
- mDimLayer = null;
- }
- }
-
- @VisibleForTesting
- class DimState {
- /**
- * The layer where property changes should be invoked on.
- */
- SurfaceControl mDimLayer;
- boolean mDimming;
- boolean mIsVisible;
-
- // TODO(b/64816140): Remove after confirming dimmer layer always matches its container.
- final Rect mDimBounds = new Rect();
-
- /**
- * Determines whether the dim layer should animate before destroying.
- */
- boolean mAnimateExit = true;
-
- /**
- * Used for Dims not associated with a WindowContainer.
- * See {@link Dimmer#adjustRelativeLayer(WindowContainer, int)} for details on Dim
- * lifecycle.
- */
- boolean mDontReset;
- SurfaceAnimator mSurfaceAnimator;
-
- DimState(SurfaceControl dimLayer) {
- mDimLayer = dimLayer;
- mDimming = true;
- final DimAnimatable dimAnimatable = new DimAnimatable(dimLayer);
- mSurfaceAnimator = new SurfaceAnimator(dimAnimatable, (type, anim) -> {
- if (!mDimming) {
- dimAnimatable.removeSurface();
- }
- }, mHost.mWmService);
- }
- }
-
- @VisibleForTesting
- interface SurfaceAnimatorStarter {
- void startAnimation(SurfaceAnimator surfaceAnimator, SurfaceControl.Transaction t,
- AnimationAdapter anim, boolean hidden, @SurfaceAnimator.AnimationType int type);
- }
-
- protected LegacyDimmer(WindowContainer host) {
- this(host, SurfaceAnimator::startAnimation);
- }
-
- LegacyDimmer(WindowContainer host, SurfaceAnimatorStarter surfaceAnimatorStarter) {
- super(host);
- mSurfaceAnimatorStarter = surfaceAnimatorStarter;
- }
-
- private DimState obtainDimState(WindowContainer container) {
- if (mDimState == null) {
- try {
- final SurfaceControl ctl = makeDimLayer();
- mDimState = new DimState(ctl);
- } catch (Surface.OutOfResourcesException e) {
- Log.w(TAG, "OutOfResourcesException creating dim surface");
- }
- }
-
- mLastRequestedDimContainer = container;
- return mDimState;
- }
-
- private SurfaceControl makeDimLayer() {
- return mHost.makeChildSurface(null)
- .setParent(mHost.getSurfaceControl())
- .setColorLayer()
- .setName("Dim Layer for - " + mHost.getName())
- .setCallsite("Dimmer.makeDimLayer")
- .build();
- }
-
- @Override
- SurfaceControl getDimLayer() {
- return mDimState != null ? mDimState.mDimLayer : null;
- }
-
- @Override
- void resetDimStates() {
- if (mDimState == null) {
- return;
- }
- if (!mDimState.mDontReset) {
- mDimState.mDimming = false;
- }
- }
-
- @Override
- Rect getDimBounds() {
- return mDimState != null ? mDimState.mDimBounds : null;
- }
-
- @Override
- void dontAnimateExit() {
- if (mDimState != null) {
- mDimState.mAnimateExit = false;
- }
- }
-
- @Override
- protected void adjustAppearance(WindowContainer container, float alpha, int blurRadius) {
- final DimState d = obtainDimState(container);
- if (d == null) {
- return;
- }
-
- // The dim method is called from WindowState.prepareSurfaces(), which is always called
- // in the correct Z from lowest Z to highest. This ensures that the dim layer is always
- // relative to the highest Z layer with a dim.
- SurfaceControl.Transaction t = mHost.getPendingTransaction();
- t.setAlpha(d.mDimLayer, alpha);
- t.setBackgroundBlurRadius(d.mDimLayer, blurRadius);
- d.mDimming = true;
- }
-
- @Override
- protected void adjustRelativeLayer(WindowContainer container, int relativeLayer) {
- final DimState d = mDimState;
- if (d != null) {
- SurfaceControl.Transaction t = mHost.getPendingTransaction();
- t.setRelativeLayer(d.mDimLayer, container.getSurfaceControl(), relativeLayer);
- }
- }
-
- @Override
- boolean updateDims(SurfaceControl.Transaction t) {
- if (mDimState == null) {
- return false;
- }
-
- if (!mDimState.mDimming) {
- if (!mDimState.mAnimateExit) {
- if (mDimState.mDimLayer.isValid()) {
- t.remove(mDimState.mDimLayer);
- }
- } else {
- startDimExit(mLastRequestedDimContainer,
- mDimState.mSurfaceAnimator, t);
- }
- mDimState = null;
- return false;
- } else {
- final Rect bounds = mDimState.mDimBounds;
- // TODO: Once we use geometry from hierarchy this falls away.
- t.setPosition(mDimState.mDimLayer, bounds.left, bounds.top);
- t.setWindowCrop(mDimState.mDimLayer, bounds.width(), bounds.height());
- if (!mDimState.mIsVisible) {
- mDimState.mIsVisible = true;
- t.show(mDimState.mDimLayer);
- // Skip enter animation while starting window is on top of its activity
- final WindowState ws = mLastRequestedDimContainer.asWindowState();
- if (ws == null || ws.mActivityRecord == null
- || ws.mActivityRecord.mStartingData == null) {
- startDimEnter(mLastRequestedDimContainer,
- mDimState.mSurfaceAnimator, t);
- }
- }
- return true;
- }
- }
-
- private long getDimDuration(WindowContainer container) {
- // Use the same duration as the animation on the WindowContainer
- AnimationAdapter animationAdapter = container.mSurfaceAnimator.getAnimation();
- final float durationScale = container.mWmService.getTransitionAnimationScaleLocked();
- return animationAdapter == null ? (long) (DEFAULT_DIM_ANIM_DURATION * durationScale)
- : animationAdapter.getDurationHint();
- }
-
- private void startDimEnter(WindowContainer container, SurfaceAnimator animator,
- SurfaceControl.Transaction t) {
- startAnim(container, animator, t, 0 /* startAlpha */, 1 /* endAlpha */);
- }
-
- private void startDimExit(WindowContainer container, SurfaceAnimator animator,
- SurfaceControl.Transaction t) {
- startAnim(container, animator, t, 1 /* startAlpha */, 0 /* endAlpha */);
- }
-
- private void startAnim(WindowContainer container, SurfaceAnimator animator,
- SurfaceControl.Transaction t, float startAlpha, float endAlpha) {
- mSurfaceAnimatorStarter.startAnimation(animator, t, new LocalAnimationAdapter(
- new AlphaAnimationSpec(startAlpha, endAlpha, getDimDuration(container)),
- mHost.mWmService.mSurfaceAnimationRunner), false /* hidden */,
- ANIMATION_TYPE_DIMMER);
- }
-
- private static class AlphaAnimationSpec implements LocalAnimationAdapter.AnimationSpec {
- private final long mDuration;
- private final float mFromAlpha;
- private final float mToAlpha;
-
- AlphaAnimationSpec(float fromAlpha, float toAlpha, long duration) {
- mFromAlpha = fromAlpha;
- mToAlpha = toAlpha;
- mDuration = duration;
- }
-
- @Override
- public long getDuration() {
- return mDuration;
- }
-
- @Override
- public void apply(SurfaceControl.Transaction t, SurfaceControl sc, long currentPlayTime) {
- final float fraction = getFraction(currentPlayTime);
- final float alpha = fraction * (mToAlpha - mFromAlpha) + mFromAlpha;
- t.setAlpha(sc, alpha);
- }
-
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("from="); pw.print(mFromAlpha);
- pw.print(" to="); pw.print(mToAlpha);
- pw.print(" duration="); pw.println(mDuration);
- }
-
- @Override
- public void dumpDebugInner(ProtoOutputStream proto) {
- final long token = proto.start(ALPHA);
- proto.write(FROM, mFromAlpha);
- proto.write(TO, mToAlpha);
- proto.write(DURATION_MS, mDuration);
- proto.end(token);
- }
- }
-}
diff --git a/services/core/java/com/android/server/wm/SmoothDimmer.java b/services/core/java/com/android/server/wm/SmoothDimmer.java
deleted file mode 100644
index 2b4d901..0000000
--- a/services/core/java/com/android/server/wm/SmoothDimmer.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_DIMMER;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-
-import android.graphics.Rect;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceControl;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.protolog.ProtoLog;
-
-class SmoothDimmer extends Dimmer {
-
- private static final String TAG = TAG_WITH_CLASS_NAME ? "Dimmer" : TAG_WM;
- DimState mDimState;
- final DimmerAnimationHelper.AnimationAdapterFactory mAnimationAdapterFactory;
-
- /**
- * Controls the dim behaviour
- */
- @VisibleForTesting
- class DimState {
- /** Related objects */
- SurfaceControl mDimSurface;
- final WindowContainer mHostContainer;
- // The last container to request to dim
- private WindowContainer mLastRequestedDimContainer;
- /** Animation */
- private final DimmerAnimationHelper mAnimationHelper;
- boolean mSkipAnimation = false;
- // Determines whether the dim layer should animate before destroying.
- boolean mAnimateExit = true;
- /** Surface visibility and bounds */
- private boolean mIsVisible = false;
- // TODO(b/64816140): Remove after confirming dimmer layer always matches its container.
- final Rect mDimBounds = new Rect();
-
- DimState() {
- mHostContainer = mHost;
- mAnimationHelper = new DimmerAnimationHelper(mAnimationAdapterFactory);
- try {
- mDimSurface = makeDimLayer();
- } catch (Surface.OutOfResourcesException e) {
- Log.w(TAG, "OutOfResourcesException creating dim surface");
- }
- }
-
- void ensureVisible(SurfaceControl.Transaction t) {
- if (!mIsVisible) {
- t.show(mDimSurface);
- t.setAlpha(mDimSurface, 0f);
- mIsVisible = true;
- }
- }
-
- void adjustSurfaceLayout(SurfaceControl.Transaction t) {
- // TODO: Once we use geometry from hierarchy this falls away.
- t.setPosition(mDimSurface, mDimBounds.left, mDimBounds.top);
- t.setWindowCrop(mDimSurface, mDimBounds.width(), mDimBounds.height());
- }
-
- /**
- * Set the parameters to prepare the dim to change its appearance
- */
- void prepareLookChange(float alpha, int blurRadius) {
- mAnimationHelper.setRequestedAppearance(alpha, blurRadius);
- }
-
- /**
- * Prepare the dim for the exit animation
- */
- void exit(SurfaceControl.Transaction t) {
- if (!mAnimateExit) {
- remove(t);
- } else {
- mAnimationHelper.setExitParameters();
- setReady(t);
- }
- }
-
- void remove(SurfaceControl.Transaction t) {
- mAnimationHelper.stopCurrentAnimation(mDimSurface);
- if (mDimSurface.isValid()) {
- t.remove(mDimSurface);
- ProtoLog.d(WM_DEBUG_DIMMER,
- "Removing dim surface %s on transaction %s", this, t);
- } else {
- Log.w(TAG, "Tried to remove " + mDimSurface + " multiple times\n");
- }
- }
-
- @Override
- public String toString() {
- return "SmoothDimmer#DimState with host=" + mHostContainer + ", surface=" + mDimSurface;
- }
-
- /**
- * Set the parameters to prepare the dim to be relative parented to the dimming container
- */
- void prepareReparent(WindowContainer relativeParent, int relativeLayer) {
- mAnimationHelper.setRequestedRelativeParent(relativeParent, relativeLayer);
- }
-
- /**
- * Call when all the changes have been requested to have them applied
- * @param t The transaction in which to apply the changes
- */
- void setReady(SurfaceControl.Transaction t) {
- mAnimationHelper.applyChanges(t, this);
- }
-
- /**
- * Whether anyone is currently requesting the dim
- */
- boolean isDimming() {
- return mLastRequestedDimContainer != null;
- }
-
- private SurfaceControl makeDimLayer() {
- return mHost.makeChildSurface(null)
- .setParent(mHost.getSurfaceControl())
- .setColorLayer()
- .setName("Dim Layer for - " + mHost.getName())
- .setCallsite("DimLayer.makeDimLayer")
- .build();
- }
- }
-
- protected SmoothDimmer(WindowContainer host) {
- this(host, new DimmerAnimationHelper.AnimationAdapterFactory());
- }
-
- @VisibleForTesting
- SmoothDimmer(WindowContainer host,
- DimmerAnimationHelper.AnimationAdapterFactory animationFactory) {
- super(host);
- mAnimationAdapterFactory = animationFactory;
- }
-
- @Override
- void resetDimStates() {
- if (mDimState != null) {
- mDimState.mLastRequestedDimContainer = null;
- }
- }
-
- @Override
- protected void adjustAppearance(WindowContainer container, float alpha, int blurRadius) {
- final DimState d = obtainDimState(container);
- d.prepareLookChange(alpha, blurRadius);
- }
-
- @Override
- protected void adjustRelativeLayer(WindowContainer container, int relativeLayer) {
- if (mDimState != null) {
- mDimState.prepareReparent(container, relativeLayer);
- }
- }
-
- @Override
- boolean updateDims(SurfaceControl.Transaction t) {
- if (mDimState == null) {
- return false;
- }
- if (!mDimState.isDimming()) {
- // No one is dimming, fade out and remove the dim
- mDimState.exit(t);
- mDimState = null;
- return false;
- } else {
- // Someone is dimming, show the requested changes
- mDimState.adjustSurfaceLayout(t);
- final WindowState ws = mDimState.mLastRequestedDimContainer.asWindowState();
- if (!mDimState.mIsVisible && ws != null && ws.mActivityRecord != null
- && ws.mActivityRecord.mStartingData != null) {
- // Skip enter animation while starting window is on top of its activity
- mDimState.mSkipAnimation = true;
- }
- mDimState.setReady(t);
- return true;
- }
- }
-
- private DimState obtainDimState(WindowContainer container) {
- if (mDimState == null) {
- mDimState = new DimState();
- }
- mDimState.mLastRequestedDimContainer = container;
- return mDimState;
- }
-
- @Override
- @VisibleForTesting
- SurfaceControl getDimLayer() {
- return mDimState != null ? mDimState.mDimSurface : null;
- }
-
- @Override
- Rect getDimBounds() {
- return mDimState != null ? mDimState.mDimBounds : null;
- }
-
- @Override
- void dontAnimateExit() {
- if (mDimState != null) {
- mDimState.mAnimateExit = false;
- }
- }
-}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 8f83a7c..259ca83 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -3214,7 +3214,7 @@
// Once at the root task level, we want to check {@link #isTranslucent(ActivityRecord)}.
// If true, we want to get the Dimmer from the level above since we don't want to animate
// the dim with the Task.
- if (!isRootTask() || (Dimmer.DIMMER_REFACTOR && isTranslucentAndVisible())
+ if (!isRootTask() || isTranslucentAndVisible()
|| (Flags.getDimmerOnClosing() ? isTranslucentForTransition()
: isTranslucent(null))) {
return super.getDimmer();
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 9b2c022..e07b54b 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -216,8 +216,7 @@
*/
int mMinHeight;
- Dimmer mDimmer = Dimmer.DIMMER_REFACTOR
- ? new SmoothDimmer(this) : new LegacyDimmer(this);
+ Dimmer mDimmer = new Dimmer(this);
/** Apply the dim layer on the embedded TaskFragment. */
static final int EMBEDDED_DIM_AREA_TASK_FRAGMENT = 0;
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 65bc9a2..cf5a1e6 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -467,7 +467,7 @@
if (dimmer == null) {
return false;
}
- if (dimmer.getHost().asTask() != null) {
+ if (dimmer.hostIsTask()) {
// Always allow to dim if the host only affects its task.
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index a36cff6..2860532 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -5196,7 +5196,7 @@
private void applyDims() {
if (((mAttrs.flags & FLAG_DIM_BEHIND) != 0 || shouldDrawBlurBehind())
- && (Dimmer.DIMMER_REFACTOR ? mWinAnimator.getShown() : isVisibleNow())
+ && mWinAnimator.getShown()
&& !mHidden && mTransitionController.canApplyDim(getTask())) {
// Only show the Dimmer when the following is satisfied:
// 1. The window has the flag FLAG_DIM_BEHIND or blur behind is requested
@@ -5277,17 +5277,12 @@
void prepareSurfaces() {
mIsDimming = false;
if (mHasSurface) {
- if (!Dimmer.DIMMER_REFACTOR) {
- applyDims();
- }
updateSurfacePositionNonOrganized();
// Send information to SurfaceFlinger about the priority of the current window.
updateFrameRateSelectionPriorityIfNeeded();
updateScaleIfNeeded();
mWinAnimator.prepareSurfaceLocked(getSyncTransaction());
- if (Dimmer.DIMMER_REFACTOR) {
- applyDims();
- }
+ applyDims();
}
super.prepareSurfaces();
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java
index 9efbe35..08f1dff 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java
@@ -21,12 +21,10 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_DIMMER;
import static com.android.server.wm.utils.LastCallVerifier.lastCall;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.reset;
@@ -34,14 +32,11 @@
import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
-import android.platform.test.annotations.RequiresFlagsDisabled;
-import android.platform.test.annotations.RequiresFlagsEnabled;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import com.android.server.testutils.StubTransaction;
import com.android.server.wm.utils.MockAnimationAdapter;
-import com.android.window.flags.Flags;
import org.junit.Before;
import org.junit.Test;
@@ -131,33 +126,19 @@
}
}
- private static class SurfaceAnimatorStarterImpl implements LegacyDimmer.SurfaceAnimatorStarter {
- @Override
- public void startAnimation(SurfaceAnimator surfaceAnimator, SurfaceControl.Transaction t,
- AnimationAdapter anim, boolean hidden, @SurfaceAnimator.AnimationType int type) {
- surfaceAnimator.mStaticAnimationFinishedCallback.onAnimationFinished(type, anim);
- }
- }
-
private MockSurfaceBuildingContainer mHost;
private Dimmer mDimmer;
private SurfaceControl.Transaction mTransaction;
private TestWindowContainer mChild;
private static AnimationAdapter sTestAnimation;
- private static LegacyDimmer.SurfaceAnimatorStarter sSurfaceAnimatorStarter;
@Before
public void setUp() throws Exception {
mHost = new MockSurfaceBuildingContainer(mWm);
mTransaction = spy(StubTransaction.class);
mChild = new TestWindowContainer(mWm);
- if (Dimmer.DIMMER_REFACTOR) {
- sTestAnimation = spy(new MockAnimationAdapter());
- mDimmer = new SmoothDimmer(mHost, new MockAnimationAdapterFactory());
- } else {
- sSurfaceAnimatorStarter = spy(new SurfaceAnimatorStarterImpl());
- mDimmer = new LegacyDimmer(mHost, sSurfaceAnimatorStarter);
- }
+ sTestAnimation = spy(new MockAnimationAdapter());
+ mDimmer = new Dimmer(mHost, new MockAnimationAdapterFactory());
}
@Test
@@ -177,8 +158,7 @@
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testDimBelowWithChildSurfaceCreatesSurfaceBelowChild_Smooth() {
+ public void testDimBelowWithChildSurfaceCreatesSurfaceBelowChild() {
final float alpha = 0.7f;
final int blur = 50;
mHost.addChild(mChild, 0);
@@ -197,23 +177,7 @@
}
@Test
- @RequiresFlagsDisabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testDimBelowWithChildSurfaceCreatesSurfaceBelowChild_Legacy() {
- final float alpha = 0.7f;
- mHost.addChild(mChild, 0);
- mDimmer.adjustAppearance(mChild, alpha, 20);
- mDimmer.adjustRelativeLayer(mChild, -1);
- SurfaceControl dimLayer = mDimmer.getDimLayer();
-
- assertNotNull("Dimmer should have created a surface", dimLayer);
-
- verify(mHost.getPendingTransaction()).setAlpha(dimLayer, alpha);
- verify(mHost.getPendingTransaction()).setRelativeLayer(dimLayer, mChild.mControl, -1);
- }
-
- @Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testDimBelowWithChildSurfaceDestroyedWhenReset_Smooth() {
+ public void testDimBelowWithChildSurfaceDestroyedWhenReset() {
mHost.addChild(mChild, 0);
final float alpha = 0.8f;
@@ -232,25 +196,6 @@
}
@Test
- @RequiresFlagsDisabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testDimBelowWithChildSurfaceDestroyedWhenReset_Legacy() {
- mHost.addChild(mChild, 0);
-
- final float alpha = 0.8f;
- mDimmer.adjustAppearance(mChild, alpha, 20);
- mDimmer.adjustRelativeLayer(mChild, -1);
- SurfaceControl dimLayer = mDimmer.getDimLayer();
- mDimmer.resetDimStates();
-
- mDimmer.updateDims(mTransaction);
- verify(sSurfaceAnimatorStarter).startAnimation(any(SurfaceAnimator.class),
- any(SurfaceControl.Transaction.class), any(AnimationAdapter.class),
- anyBoolean(),
- eq(ANIMATION_TYPE_DIMMER));
- verify(mHost.getPendingTransaction()).remove(dimLayer);
- }
-
- @Test
public void testDimBelowWithChildSurfaceNotDestroyedWhenPersisted() {
mHost.addChild(mChild, 0);
@@ -292,8 +237,7 @@
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testRemoveDimImmediately_Smooth() {
+ public void testRemoveDimImmediately() {
mHost.addChild(mChild, 0);
mDimmer.adjustAppearance(mChild, 1, 2);
mDimmer.adjustRelativeLayer(mChild, -1);
@@ -311,48 +255,11 @@
verify(mTransaction).remove(dimLayer);
}
- @Test
- @RequiresFlagsDisabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testRemoveDimImmediately_Legacy() {
- mHost.addChild(mChild, 0);
- mDimmer.adjustAppearance(mChild, 1, 0);
- mDimmer.adjustRelativeLayer(mChild, -1);
- SurfaceControl dimLayer = mDimmer.getDimLayer();
- mDimmer.updateDims(mTransaction);
- verify(mTransaction, times(1)).show(dimLayer);
-
- reset(sSurfaceAnimatorStarter);
- mDimmer.dontAnimateExit();
- mDimmer.resetDimStates();
- mDimmer.updateDims(mTransaction);
- verify(sSurfaceAnimatorStarter, never()).startAnimation(any(SurfaceAnimator.class),
- any(SurfaceControl.Transaction.class), any(AnimationAdapter.class), anyBoolean(),
- eq(ANIMATION_TYPE_DIMMER));
- verify(mTransaction).remove(dimLayer);
- }
-
- @Test
- @RequiresFlagsDisabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
- public void testDimmerWithBlurUpdatesTransaction_Legacy() {
- mHost.addChild(mChild, 0);
-
- final int blurRadius = 50;
- mDimmer.adjustAppearance(mChild, 1, blurRadius);
- mDimmer.adjustRelativeLayer(mChild, -1);
- SurfaceControl dimLayer = mDimmer.getDimLayer();
-
- assertNotNull("Dimmer should have created a surface", dimLayer);
-
- verify(mHost.getPendingTransaction()).setBackgroundBlurRadius(dimLayer, blurRadius);
- verify(mHost.getPendingTransaction()).setRelativeLayer(dimLayer, mChild.mControl, -1);
- }
-
/**
* mChild is requesting the dim values to be set directly. In this case, dim won't play the
* standard animation, but directly apply mChild's requests to the dim surface
*/
@Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
public void testContainerDimsOpeningAnimationByItself() {
mHost.addChild(mChild, 0);
@@ -384,7 +291,6 @@
* alpha is animated to 0. This corner case is needed to verify that the layer is removed anyway
*/
@Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
public void testContainerDimsClosingAnimationByItself() {
mHost.addChild(mChild, 0);
@@ -413,7 +319,6 @@
* Check the handover of the dim between two windows and the consequent dim animation in between
*/
@Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
public void testMultipleContainersDimmingConsecutively() {
TestWindowContainer first = mChild;
TestWindowContainer second = new TestWindowContainer(mWm);
@@ -442,7 +347,6 @@
* updateDims will be satisfied
*/
@Test
- @RequiresFlagsEnabled(Flags.FLAG_INTRODUCE_SMOOTHER_DIMMER)
public void testMultipleContainersDimmingAtTheSameTime() {
TestWindowContainer first = mChild;
TestWindowContainer second = new TestWindowContainer(mWm);