Don't use SysUI ScrimController for bubbles
Changes for the manage menu will require a scrim between the expanded
view and the manage menu.
I think it makes sense to just have BubbleStackView control the
scrims entirely rather than have 1 in ScrimController and 1 in
BubbleStackView (or 2 scrims in ScrimController).
Test: manual - expand a bubble, there's a scrim behind it, collapse
the bubble, the scrim is gone.
Bug: 183658858
Change-Id: I537c910b959ab938eb1d116d9dc0c801006dbb79
This commit is contained in:
@@ -56,7 +56,6 @@ import android.graphics.Rect;
|
||||
import android.os.Binder;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.UserHandle;
|
||||
@@ -98,7 +97,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.IntConsumer;
|
||||
|
||||
@@ -581,7 +579,7 @@ public class BubbleController {
|
||||
|
||||
/**
|
||||
* BubbleStackView is lazily created by this method the first time a Bubble is added. This
|
||||
* method initializes the stack view and adds it to the StatusBar just above the scrim.
|
||||
* method initializes the stack view and adds it to window manager.
|
||||
*/
|
||||
private void ensureStackViewCreated() {
|
||||
if (mStackView == null) {
|
||||
@@ -629,7 +627,6 @@ public class BubbleController {
|
||||
try {
|
||||
mAddedToWindowManager = true;
|
||||
mBubbleData.getOverflow().initialize(this);
|
||||
mStackView.addView(mBubbleScrim);
|
||||
mWindowManager.addView(mStackView, mWmLayoutParams);
|
||||
// Position info is dependent on us being attached to a window
|
||||
mBubblePositioner.update();
|
||||
@@ -661,7 +658,6 @@ public class BubbleController {
|
||||
mAddedToWindowManager = false;
|
||||
if (mStackView != null) {
|
||||
mWindowManager.removeView(mStackView);
|
||||
mStackView.removeView(mBubbleScrim);
|
||||
mBubbleData.getOverflow().cleanUpExpandedState();
|
||||
} else {
|
||||
Log.w(TAG, "StackView added to WindowManager, but was null when removing!");
|
||||
@@ -763,13 +759,6 @@ public class BubbleController {
|
||||
}
|
||||
}
|
||||
|
||||
private void setBubbleScrim(View view, BiConsumer<Executor, Looper> callback) {
|
||||
mBubbleScrim = view;
|
||||
callback.accept(mMainExecutor, mMainExecutor.executeBlockingForResult(() -> {
|
||||
return Looper.myLooper();
|
||||
}, Looper.class));
|
||||
}
|
||||
|
||||
private void setSysuiProxy(Bubbles.SysuiProxy proxy) {
|
||||
mSysuiProxy = proxy;
|
||||
}
|
||||
@@ -1573,13 +1562,6 @@ public class BubbleController {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBubbleScrim(View view, BiConsumer<Executor, Looper> callback) {
|
||||
mMainExecutor.execute(() -> {
|
||||
BubbleController.this.setBubbleScrim(view, callback);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExpandListener(BubbleExpandListener listener) {
|
||||
mMainExecutor.execute(() -> {
|
||||
|
||||
@@ -19,6 +19,8 @@ package com.android.wm.shell.bubbles;
|
||||
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
|
||||
import static com.android.wm.shell.animation.Interpolators.ALPHA_IN;
|
||||
import static com.android.wm.shell.animation.Interpolators.ALPHA_OUT;
|
||||
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_STACK_VIEW;
|
||||
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
|
||||
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
|
||||
@@ -33,11 +35,11 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Outline;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
@@ -121,6 +123,8 @@ public class BubbleStackView extends FrameLayout
|
||||
|
||||
private static final int EXPANDED_VIEW_ALPHA_ANIMATION_DURATION = 150;
|
||||
|
||||
private static final float SCRIM_ALPHA = 0.6f;
|
||||
|
||||
/**
|
||||
* How long to wait to animate the stack temporarily invisible after a drag/flyout hide
|
||||
* animation ends, if we are in fact temporarily invisible.
|
||||
@@ -194,7 +198,7 @@ public class BubbleStackView extends FrameLayout
|
||||
private StackAnimationController mStackAnimationController;
|
||||
private ExpandedAnimationController mExpandedAnimationController;
|
||||
|
||||
private View mTaskbarScrim;
|
||||
private View mScrim;
|
||||
private FrameLayout mExpandedViewContainer;
|
||||
|
||||
/** Matrix used to scale the expanded view container with a given pivot point. */
|
||||
@@ -842,11 +846,12 @@ public class BubbleStackView extends FrameLayout
|
||||
mBubbleData.setExpanded(true);
|
||||
});
|
||||
|
||||
mTaskbarScrim = new View(getContext());
|
||||
mTaskbarScrim.setBackgroundColor(Color.BLACK);
|
||||
addView(mTaskbarScrim);
|
||||
mTaskbarScrim.setAlpha(0f);
|
||||
mTaskbarScrim.setVisibility(GONE);
|
||||
mScrim = new View(getContext());
|
||||
mScrim.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
mScrim.setBackgroundDrawable(new ColorDrawable(
|
||||
getResources().getColor(android.R.color.system_neutral1_1000)));
|
||||
addView(mScrim);
|
||||
mScrim.setAlpha(0f);
|
||||
|
||||
mOrientationChangedListener =
|
||||
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
|
||||
@@ -1204,6 +1209,8 @@ public class BubbleStackView extends FrameLayout
|
||||
updateOverflow();
|
||||
updateUserEdu();
|
||||
updateExpandedViewTheme();
|
||||
mScrim.setBackgroundDrawable(new ColorDrawable(
|
||||
getResources().getColor(android.R.color.system_neutral1_1000)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1783,6 +1790,20 @@ public class BubbleStackView extends FrameLayout
|
||||
mExpandedViewAlphaAnimator.start();
|
||||
}
|
||||
|
||||
private void showScrim(boolean show) {
|
||||
if (show) {
|
||||
mScrim.animate()
|
||||
.setInterpolator(ALPHA_IN)
|
||||
.alpha(SCRIM_ALPHA)
|
||||
.start();
|
||||
} else {
|
||||
mScrim.animate()
|
||||
.alpha(0f)
|
||||
.setInterpolator(ALPHA_OUT)
|
||||
.start();
|
||||
}
|
||||
}
|
||||
|
||||
private void animateExpansion() {
|
||||
cancelDelayedExpandCollapseSwitchAnimations();
|
||||
final boolean showVertically = mPositioner.showBubblesVertically();
|
||||
@@ -1792,6 +1813,7 @@ public class BubbleStackView extends FrameLayout
|
||||
}
|
||||
beforeExpandedViewAnimation();
|
||||
|
||||
showScrim(true);
|
||||
updateZOrder();
|
||||
updateBadges(false /* setBadgeForCollapsedStack */);
|
||||
mBubbleContainer.setActiveController(mExpandedAnimationController);
|
||||
@@ -1803,16 +1825,6 @@ public class BubbleStackView extends FrameLayout
|
||||
}
|
||||
} /* after */);
|
||||
|
||||
if (mPositioner.showingInTaskbar()
|
||||
// Don't need the scrim when the bar is at the bottom
|
||||
&& mPositioner.getTaskbarPosition() != BubblePositioner.TASKBAR_POSITION_BOTTOM) {
|
||||
mTaskbarScrim.getLayoutParams().width = mPositioner.getTaskbarSize();
|
||||
mTaskbarScrim.setTranslationX(mStackOnLeftOrWillBe
|
||||
? 0f
|
||||
: mPositioner.getAvailableRect().right - mPositioner.getTaskbarSize());
|
||||
mTaskbarScrim.setVisibility(VISIBLE);
|
||||
mTaskbarScrim.animate().alpha(1f).start();
|
||||
}
|
||||
final float translationY = mPositioner.getExpandedViewY(mExpandedBubble,
|
||||
getBubbleIndex(mExpandedBubble));
|
||||
mExpandedViewContainer.setTranslationX(0f);
|
||||
@@ -1923,6 +1935,8 @@ public class BubbleStackView extends FrameLayout
|
||||
mIsExpanded = false;
|
||||
mIsExpansionAnimating = true;
|
||||
|
||||
showScrim(false);
|
||||
|
||||
mBubbleContainer.cancelAllAnimations();
|
||||
|
||||
// If we were in the middle of swapping, the animating-out surface would have been scaling
|
||||
@@ -1940,10 +1954,6 @@ public class BubbleStackView extends FrameLayout
|
||||
/* collapseTo */,
|
||||
() -> mBubbleContainer.setActiveController(mStackAnimationController));
|
||||
|
||||
if (mTaskbarScrim.getVisibility() == VISIBLE) {
|
||||
mTaskbarScrim.animate().alpha(0f).start();
|
||||
}
|
||||
|
||||
int index;
|
||||
if (mExpandedBubble != null && BubbleOverflow.KEY.equals(mExpandedBubble.getKey())) {
|
||||
index = mBubbleData.getBubbles().size();
|
||||
@@ -2011,10 +2021,6 @@ public class BubbleStackView extends FrameLayout
|
||||
if (previouslySelected != null) {
|
||||
previouslySelected.setTaskViewVisibility(false);
|
||||
}
|
||||
|
||||
if (mPositioner.showingInTaskbar()) {
|
||||
mTaskbarScrim.setVisibility(GONE);
|
||||
}
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
@@ -24,12 +24,10 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.service.notification.NotificationListenerService.RankingMap;
|
||||
import android.util.ArraySet;
|
||||
import android.util.Pair;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -43,7 +41,6 @@ import java.lang.annotation.Target;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.IntConsumer;
|
||||
|
||||
@@ -160,14 +157,6 @@ public interface Bubbles {
|
||||
/** Set the proxy to commnuicate with SysUi side components. */
|
||||
void setSysuiProxy(SysuiProxy proxy);
|
||||
|
||||
/**
|
||||
* Set the scrim view for bubbles.
|
||||
*
|
||||
* @param callback The callback made with the executor and the executor's looper that the view
|
||||
* will be running on.
|
||||
**/
|
||||
void setBubbleScrim(View view, BiConsumer<Executor, Looper> callback);
|
||||
|
||||
/** Set a listener to be notified of bubble expand events. */
|
||||
void setExpandListener(BubbleExpandListener listener);
|
||||
|
||||
|
||||
@@ -135,12 +135,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
*/
|
||||
public static final float BUSY_SCRIM_ALPHA = 1f;
|
||||
|
||||
/**
|
||||
* The default scrim under the expanded bubble stack.
|
||||
* This should not be lower than 0.54, otherwise we won't pass GAR.
|
||||
*/
|
||||
public static final float BUBBLE_SCRIM_ALPHA = 0.6f;
|
||||
|
||||
/**
|
||||
* Scrim opacity that can have text on top.
|
||||
*/
|
||||
@@ -156,8 +150,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
private ScrimView mScrimInFront;
|
||||
private ScrimView mNotificationsScrim;
|
||||
private ScrimView mScrimBehind;
|
||||
@Nullable
|
||||
private ScrimView mScrimForBubble;
|
||||
|
||||
private Runnable mScrimBehindChangeRunnable;
|
||||
|
||||
@@ -195,12 +187,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
private float mInFrontAlpha = NOT_INITIALIZED;
|
||||
private float mBehindAlpha = NOT_INITIALIZED;
|
||||
private float mNotificationsAlpha = NOT_INITIALIZED;
|
||||
private float mBubbleAlpha = NOT_INITIALIZED;
|
||||
|
||||
private int mInFrontTint;
|
||||
private int mBehindTint;
|
||||
private int mNotificationsTint;
|
||||
private int mBubbleTint;
|
||||
|
||||
private boolean mWallpaperVisibilityTimedOut;
|
||||
private int mScrimsVisibility;
|
||||
@@ -229,7 +219,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
|
||||
mScrimStateListener = lightBarController::setScrimState;
|
||||
mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
|
||||
ScrimState.BUBBLE_EXPANDED.setBubbleAlpha(BUBBLE_SCRIM_ALPHA);
|
||||
|
||||
mKeyguardStateController = keyguardStateController;
|
||||
mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen();
|
||||
@@ -276,11 +265,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
* Attach the controller to the supplied views.
|
||||
*/
|
||||
public void attachViews(ScrimView behindScrim, ScrimView notificationsScrim,
|
||||
ScrimView scrimInFront, @Nullable ScrimView scrimForBubble) {
|
||||
ScrimView scrimInFront) {
|
||||
mNotificationsScrim = notificationsScrim;
|
||||
mScrimBehind = behindScrim;
|
||||
mScrimInFront = scrimInFront;
|
||||
mScrimForBubble = scrimForBubble;
|
||||
updateThemeColors();
|
||||
|
||||
behindScrim.enableBottomEdgeConcave(mClipsQsScrim);
|
||||
@@ -293,8 +281,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
|
||||
final ScrimState[] states = ScrimState.values();
|
||||
for (int i = 0; i < states.length; i++) {
|
||||
states[i].init(mScrimInFront, mScrimBehind, mScrimForBubble, mDozeParameters,
|
||||
mDockManager);
|
||||
states[i].init(mScrimInFront, mScrimBehind, mDozeParameters, mDockManager);
|
||||
states[i].setScrimBehindAlphaKeyguard(mScrimBehindAlphaKeyguard);
|
||||
states[i].setDefaultScrimAlpha(mDefaultScrimAlpha);
|
||||
}
|
||||
@@ -302,9 +289,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
mScrimBehind.setDefaultFocusHighlightEnabled(false);
|
||||
mNotificationsScrim.setDefaultFocusHighlightEnabled(false);
|
||||
mScrimInFront.setDefaultFocusHighlightEnabled(false);
|
||||
if (mScrimForBubble != null) {
|
||||
mScrimForBubble.setDefaultFocusHighlightEnabled(false);
|
||||
}
|
||||
updateScrims();
|
||||
mKeyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback);
|
||||
}
|
||||
@@ -627,11 +611,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
mInFrontTint = mState.getFrontTint();
|
||||
mBehindTint = mState.getBehindTint();
|
||||
mNotificationsTint = mState.getNotifTint();
|
||||
mBubbleTint = mState.getBubbleTint();
|
||||
|
||||
mInFrontAlpha = mState.getFrontAlpha();
|
||||
mBehindAlpha = mState.getBehindAlpha();
|
||||
mBubbleAlpha = mState.getBubbleAlpha();
|
||||
mNotificationsAlpha = mState.getNotifAlpha();
|
||||
|
||||
assertAlphasValid();
|
||||
@@ -744,7 +726,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
setOrAdaptCurrentAnimation(mScrimBehind);
|
||||
setOrAdaptCurrentAnimation(mNotificationsScrim);
|
||||
setOrAdaptCurrentAnimation(mScrimInFront);
|
||||
setOrAdaptCurrentAnimation(mScrimForBubble);
|
||||
dispatchBackScrimState(mScrimBehind.getViewAlpha());
|
||||
|
||||
// Reset wallpaper timeout if it's already timeout like expanding panel while PULSING
|
||||
@@ -852,11 +833,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
setScrimAlpha(mScrimBehind, mBehindAlpha);
|
||||
setScrimAlpha(mNotificationsScrim, mNotificationsAlpha);
|
||||
|
||||
if (mScrimForBubble != null) {
|
||||
boolean animateScrimForBubble = mScrimForBubble.getViewAlpha() != 0 && !mBlankScreen;
|
||||
mScrimForBubble.setColors(mColors, animateScrimForBubble);
|
||||
setScrimAlpha(mScrimForBubble, mBubbleAlpha);
|
||||
}
|
||||
// The animation could have all already finished, let's call onFinished just in case
|
||||
onFinished(mState);
|
||||
dispatchScrimsVisible();
|
||||
@@ -909,8 +885,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
return "behind_scrim";
|
||||
} else if (scrim == mNotificationsScrim) {
|
||||
return "notifications_scrim";
|
||||
} else if (scrim == mScrimForBubble) {
|
||||
return "bubble_scrim";
|
||||
}
|
||||
return "unknown_scrim";
|
||||
}
|
||||
@@ -983,8 +957,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
return mBehindAlpha;
|
||||
} else if (scrim == mNotificationsScrim) {
|
||||
return mNotificationsAlpha;
|
||||
} else if (scrim == mScrimForBubble) {
|
||||
return mBubbleAlpha;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown scrim view");
|
||||
}
|
||||
@@ -997,8 +969,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
return mBehindTint;
|
||||
} else if (scrim == mNotificationsScrim) {
|
||||
return mNotificationsTint;
|
||||
} else if (scrim == mScrimForBubble) {
|
||||
return mBubbleTint;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown scrim view");
|
||||
}
|
||||
@@ -1030,8 +1000,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
}
|
||||
if (isAnimating(mScrimBehind)
|
||||
|| isAnimating(mNotificationsScrim)
|
||||
|| isAnimating(mScrimInFront)
|
||||
|| isAnimating(mScrimForBubble)) {
|
||||
|| isAnimating(mScrimInFront)) {
|
||||
if (callback != null && callback != mCallback) {
|
||||
// Since we only notify the callback that we're finished once everything has
|
||||
// finished, we need to make sure that any changing callbacks are also invoked
|
||||
@@ -1058,13 +1027,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
mInFrontTint = Color.TRANSPARENT;
|
||||
mBehindTint = mState.getBehindTint();
|
||||
mNotificationsTint = mState.getNotifTint();
|
||||
mBubbleTint = Color.TRANSPARENT;
|
||||
updateScrimColor(mScrimInFront, mInFrontAlpha, mInFrontTint);
|
||||
updateScrimColor(mScrimBehind, mBehindAlpha, mBehindTint);
|
||||
updateScrimColor(mNotificationsScrim, mNotificationsAlpha, mNotificationsTint);
|
||||
if (mScrimForBubble != null) {
|
||||
updateScrimColor(mScrimForBubble, mBubbleAlpha, mBubbleTint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1232,14 +1197,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
pw.print(" tint=0x");
|
||||
pw.println(Integer.toHexString(mNotificationsScrim.getTint()));
|
||||
|
||||
pw.print(" bubbleScrim:");
|
||||
pw.print(" viewAlpha=");
|
||||
pw.print(mScrimForBubble.getViewAlpha());
|
||||
pw.print(" alpha=");
|
||||
pw.print(mBubbleAlpha);
|
||||
pw.print(" tint=0x");
|
||||
pw.println(Integer.toHexString(mScrimForBubble.getTint()));
|
||||
|
||||
pw.print(" mTracking=");
|
||||
pw.println(mTracking);
|
||||
pw.print(" mDefaultScrimAlpha=");
|
||||
|
||||
@@ -19,8 +19,6 @@ package com.android.systemui.statusbar.phone;
|
||||
import android.graphics.Color;
|
||||
import android.os.Trace;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.scrim.ScrimView;
|
||||
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
||||
@@ -43,11 +41,9 @@ public enum ScrimState {
|
||||
public void prepare(ScrimState previousState) {
|
||||
mFrontTint = Color.BLACK;
|
||||
mBehindTint = Color.BLACK;
|
||||
mBubbleTint = previousState.mBubbleTint;
|
||||
|
||||
mFrontAlpha = 1f;
|
||||
mBehindAlpha = 1f;
|
||||
mBubbleAlpha = previousState.mBubbleAlpha;
|
||||
|
||||
mAnimationDuration = ScrimController.ANIMATION_DURATION_LONG;
|
||||
}
|
||||
@@ -81,12 +77,10 @@ public enum ScrimState {
|
||||
mFrontTint = Color.BLACK;
|
||||
mBehindTint = Color.BLACK;
|
||||
mNotifTint = mClipQsScrim ? Color.BLACK : Color.TRANSPARENT;
|
||||
mBubbleTint = Color.TRANSPARENT;
|
||||
|
||||
mFrontAlpha = 0;
|
||||
mBehindAlpha = mClipQsScrim ? 1 : mScrimBehindAlphaKeyguard;
|
||||
mNotifAlpha = mClipQsScrim ? mScrimBehindAlphaKeyguard : 0;
|
||||
mBubbleAlpha = 0;
|
||||
if (mClipQsScrim) {
|
||||
updateScrimColor(mScrimBehind, 1f /* alpha */, Color.BLACK);
|
||||
}
|
||||
@@ -118,7 +112,6 @@ public enum ScrimState {
|
||||
mNotifAlpha = mClipQsScrim ? mDefaultScrimAlpha : 0;
|
||||
mNotifTint = Color.TRANSPARENT;
|
||||
mFrontAlpha = 0f;
|
||||
mBubbleAlpha = 0f;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -129,7 +122,6 @@ public enum ScrimState {
|
||||
@Override
|
||||
public void prepare(ScrimState previousState) {
|
||||
mBehindAlpha = 0;
|
||||
mBubbleAlpha = 0f;
|
||||
mFrontAlpha = mDefaultScrimAlpha;
|
||||
}
|
||||
},
|
||||
@@ -139,7 +131,6 @@ public enum ScrimState {
|
||||
public void prepare(ScrimState previousState) {
|
||||
mBehindAlpha = mClipQsScrim ? 1 : mDefaultScrimAlpha;
|
||||
mNotifAlpha = 1f;
|
||||
mBubbleAlpha = 0f;
|
||||
mFrontAlpha = 0f;
|
||||
mBehindTint = Color.BLACK;
|
||||
|
||||
@@ -163,7 +154,6 @@ public enum ScrimState {
|
||||
public void prepare(ScrimState previousState) {
|
||||
mBehindAlpha = 0;
|
||||
mFrontAlpha = 0;
|
||||
mBubbleAlpha = 0;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -185,9 +175,6 @@ public enum ScrimState {
|
||||
mBehindTint = Color.BLACK;
|
||||
mBehindAlpha = ScrimController.TRANSPARENT;
|
||||
|
||||
mBubbleTint = Color.TRANSPARENT;
|
||||
mBubbleAlpha = ScrimController.TRANSPARENT;
|
||||
|
||||
mAnimationDuration = ScrimController.ANIMATION_DURATION_LONG;
|
||||
// DisplayPowerManager may blank the screen for us, or we might blank it for ourselves
|
||||
// by animating the screen off via the LightRevelScrim. In either case we just need to
|
||||
@@ -214,7 +201,6 @@ public enum ScrimState {
|
||||
@Override
|
||||
public void prepare(ScrimState previousState) {
|
||||
mFrontAlpha = mAodFrontScrimAlpha;
|
||||
mBubbleAlpha = 0f;
|
||||
mBehindTint = Color.BLACK;
|
||||
mFrontTint = Color.BLACK;
|
||||
mBlankScreen = mDisplayRequiresBlanking;
|
||||
@@ -238,7 +224,6 @@ public enum ScrimState {
|
||||
mBehindAlpha = mClipQsScrim ? 1 : 0;
|
||||
mNotifAlpha = 0;
|
||||
mFrontAlpha = 0;
|
||||
mBubbleAlpha = 0;
|
||||
|
||||
mAnimationDuration = mKeyguardFadingAway
|
||||
? mKeyguardFadingAwayDuration
|
||||
@@ -248,21 +233,16 @@ public enum ScrimState {
|
||||
|
||||
mFrontTint = Color.TRANSPARENT;
|
||||
mBehindTint = Color.BLACK;
|
||||
mBubbleTint = Color.TRANSPARENT;
|
||||
mBlankScreen = false;
|
||||
|
||||
if (previousState == ScrimState.AOD) {
|
||||
// Set all scrims black, before they fade transparent.
|
||||
updateScrimColor(mScrimInFront, 1f /* alpha */, Color.BLACK /* tint */);
|
||||
updateScrimColor(mScrimBehind, 1f /* alpha */, Color.BLACK /* tint */);
|
||||
if (mScrimForBubble != null) {
|
||||
updateScrimColor(mScrimForBubble, 1f /* alpha */, Color.BLACK /* tint */);
|
||||
}
|
||||
|
||||
// Scrims should still be black at the end of the transition.
|
||||
mFrontTint = Color.BLACK;
|
||||
mBehindTint = Color.BLACK;
|
||||
mBubbleTint = Color.BLACK;
|
||||
mBlankScreen = true;
|
||||
}
|
||||
|
||||
@@ -280,7 +260,6 @@ public enum ScrimState {
|
||||
public void prepare(ScrimState previousState) {
|
||||
mFrontTint = Color.TRANSPARENT;
|
||||
mBehindTint = Color.TRANSPARENT;
|
||||
mBubbleTint = Color.BLACK;
|
||||
|
||||
mFrontAlpha = 0f;
|
||||
mBehindAlpha = mDefaultScrimAlpha;
|
||||
@@ -294,21 +273,18 @@ public enum ScrimState {
|
||||
long mAnimationDuration = ScrimController.ANIMATION_DURATION;
|
||||
int mFrontTint = Color.TRANSPARENT;
|
||||
int mBehindTint = Color.TRANSPARENT;
|
||||
int mBubbleTint = Color.TRANSPARENT;
|
||||
int mNotifTint = Color.TRANSPARENT;
|
||||
|
||||
boolean mAnimateChange = true;
|
||||
float mAodFrontScrimAlpha;
|
||||
float mFrontAlpha;
|
||||
float mBehindAlpha;
|
||||
float mBubbleAlpha;
|
||||
float mNotifAlpha;
|
||||
|
||||
float mScrimBehindAlphaKeyguard;
|
||||
float mDefaultScrimAlpha;
|
||||
ScrimView mScrimInFront;
|
||||
ScrimView mScrimBehind;
|
||||
@Nullable ScrimView mScrimForBubble;
|
||||
|
||||
DozeParameters mDozeParameters;
|
||||
DockManager mDockManager;
|
||||
@@ -321,11 +297,10 @@ public enum ScrimState {
|
||||
long mKeyguardFadingAwayDuration;
|
||||
boolean mClipQsScrim;
|
||||
|
||||
public void init(ScrimView scrimInFront, ScrimView scrimBehind, ScrimView scrimForBubble,
|
||||
DozeParameters dozeParameters, DockManager dockManager) {
|
||||
public void init(ScrimView scrimInFront, ScrimView scrimBehind, DozeParameters dozeParameters,
|
||||
DockManager dockManager) {
|
||||
mScrimInFront = scrimInFront;
|
||||
mScrimBehind = scrimBehind;
|
||||
mScrimForBubble = scrimForBubble;
|
||||
|
||||
mDozeParameters = dozeParameters;
|
||||
mDockManager = dockManager;
|
||||
@@ -352,10 +327,6 @@ public enum ScrimState {
|
||||
return mNotifAlpha;
|
||||
}
|
||||
|
||||
public float getBubbleAlpha() {
|
||||
return mBubbleAlpha;
|
||||
}
|
||||
|
||||
public int getFrontTint() {
|
||||
return mFrontTint;
|
||||
}
|
||||
@@ -368,10 +339,6 @@ public enum ScrimState {
|
||||
return mNotifTint;
|
||||
}
|
||||
|
||||
public int getBubbleTint() {
|
||||
return mBubbleTint;
|
||||
}
|
||||
|
||||
public long getAnimationDuration() {
|
||||
return mAnimationDuration;
|
||||
}
|
||||
@@ -409,10 +376,6 @@ public enum ScrimState {
|
||||
mDefaultScrimAlpha = defaultScrimAlpha;
|
||||
}
|
||||
|
||||
public void setBubbleAlpha(float alpha) {
|
||||
mBubbleAlpha = alpha;
|
||||
}
|
||||
|
||||
public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
|
||||
mWallpaperSupportsAmbientMode = wallpaperSupportsAmbientMode;
|
||||
}
|
||||
|
||||
@@ -187,7 +187,6 @@ import com.android.systemui.recents.ScreenPinningRequest;
|
||||
import com.android.systemui.scrim.ScrimView;
|
||||
import com.android.systemui.settings.brightness.BrightnessSlider;
|
||||
import com.android.systemui.shared.plugins.PluginManager;
|
||||
import com.android.unfold.config.UnfoldTransitionConfig;
|
||||
import com.android.systemui.statusbar.AutoHideUiElement;
|
||||
import com.android.systemui.statusbar.BackDropView;
|
||||
import com.android.systemui.statusbar.CircleReveal;
|
||||
@@ -249,6 +248,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
|
||||
import com.android.systemui.volume.VolumeComponent;
|
||||
import com.android.systemui.wmshell.BubblesManager;
|
||||
import com.android.unfold.config.UnfoldTransitionConfig;
|
||||
import com.android.wm.shell.bubbles.Bubbles;
|
||||
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
|
||||
import com.android.wm.shell.startingsurface.SplashscreenContentDrawer;
|
||||
@@ -1254,13 +1254,11 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
ScrimView notificationsScrim = mNotificationShadeWindowView
|
||||
.findViewById(R.id.scrim_notifications);
|
||||
ScrimView scrimInFront = mNotificationShadeWindowView.findViewById(R.id.scrim_in_front);
|
||||
ScrimView scrimForBubble = mBubblesManagerOptional.isPresent()
|
||||
? mBubblesManagerOptional.get().getScrimForBubble() : null;
|
||||
|
||||
mScrimController.setScrimVisibleListener(scrimsVisible -> {
|
||||
mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible);
|
||||
});
|
||||
mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront, scrimForBubble);
|
||||
mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront);
|
||||
|
||||
mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
|
||||
mLightRevealScrim.setRevealAmountListener(
|
||||
|
||||
@@ -50,7 +50,6 @@ import android.util.ArraySet;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -63,7 +62,6 @@ import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.scrim.ScrimView;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.statusbar.FeatureFlags;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
@@ -80,7 +78,6 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.Di
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
|
||||
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.phone.ScrimController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.ZenModeController;
|
||||
@@ -118,7 +115,6 @@ public class BubblesManager implements Dumpable {
|
||||
private final NotifPipeline mNotifPipeline;
|
||||
private final Executor mSysuiMainExecutor;
|
||||
|
||||
private ScrimView mBubbleScrim;
|
||||
private final Bubbles.SysuiProxy mSysuiProxy;
|
||||
// TODO (b/145659174): allow for multiple callbacks to support the "shadow" new notif pipeline
|
||||
private final List<NotifCallback> mCallbacks = new ArrayList<>();
|
||||
@@ -193,12 +189,6 @@ public class BubblesManager implements Dumpable {
|
||||
ServiceManager.getService(Context.STATUS_BAR_SERVICE))
|
||||
: statusBarService;
|
||||
|
||||
mBubbleScrim = new ScrimView(mContext);
|
||||
mBubbleScrim.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
mBubbles.setBubbleScrim(mBubbleScrim, (executor, looper) -> {
|
||||
mBubbleScrim.setExecutor(executor, looper);
|
||||
});
|
||||
|
||||
if (featureFlags.isNewNotifPipelineRenderingEnabled()) {
|
||||
setupNotifPipeline();
|
||||
} else {
|
||||
@@ -602,15 +592,6 @@ public class BubblesManager implements Dumpable {
|
||||
NotificationLogger.getNotificationLocation(entry)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the scrim drawn behind the bubble stack. This is managed by {@link ScrimController}
|
||||
* since we want the scrim's appearance and behavior to be identical to that of the notification
|
||||
* shade scrim.
|
||||
*/
|
||||
public ScrimView getScrimForBubble() {
|
||||
return mBubbleScrim;
|
||||
}
|
||||
|
||||
/**
|
||||
* We intercept notification entries (including group summaries) dismissed by the user when
|
||||
* there is an active bubble associated with it. We do this so that developers can still
|
||||
|
||||
@@ -83,7 +83,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
private ScrimView mScrimBehind;
|
||||
private ScrimView mNotificationsScrim;
|
||||
private ScrimView mScrimInFront;
|
||||
private ScrimView mScrimForBubble;
|
||||
private ScrimState mScrimState;
|
||||
private float mScrimBehindAlpha;
|
||||
private GradientColors mScrimInFrontColor;
|
||||
@@ -167,7 +166,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
endAnimation(mNotificationsScrim);
|
||||
endAnimation(mScrimBehind);
|
||||
endAnimation(mScrimInFront);
|
||||
endAnimation(mScrimForBubble);
|
||||
|
||||
assertEquals("Animators did not finish",
|
||||
mAnimatorListener.getNumStarts(), mAnimatorListener.getNumEnds());
|
||||
@@ -190,7 +188,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
mScrimBehind = spy(new ScrimView(getContext()));
|
||||
mScrimInFront = new ScrimView(getContext());
|
||||
mScrimForBubble = new ScrimView(getContext());
|
||||
mNotificationsScrim = new ScrimView(getContext());
|
||||
mAlwaysOnEnabled = true;
|
||||
mLooper = TestableLooper.get(this);
|
||||
@@ -226,8 +223,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
|
||||
mUnlockedScreenOffAnimationController);
|
||||
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
||||
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront,
|
||||
mScrimForBubble);
|
||||
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
|
||||
mScrimController.setAnimatorListener(mAnimatorListener);
|
||||
|
||||
mScrimController.setHasBackdrop(false);
|
||||
@@ -257,8 +253,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false));
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -274,8 +270,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@@ -293,8 +288,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@@ -309,8 +303,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
|
||||
assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f);
|
||||
@@ -329,8 +322,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@@ -369,8 +361,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@@ -389,8 +380,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@@ -510,8 +500,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
|
||||
// ... and when ambient goes dark, front scrim should be semi-transparent
|
||||
@@ -549,8 +538,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, false,
|
||||
mNotificationsScrim, false,
|
||||
mScrimForBubble, false
|
||||
mNotificationsScrim, false
|
||||
));
|
||||
}
|
||||
|
||||
@@ -570,8 +558,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, true,
|
||||
mNotificationsScrim, false,
|
||||
mScrimForBubble, false
|
||||
mNotificationsScrim, false
|
||||
));
|
||||
}
|
||||
|
||||
@@ -627,8 +614,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
mScrimBehind, TRANSPARENT));
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, false,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, false
|
||||
));
|
||||
}
|
||||
|
||||
@@ -645,8 +631,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
assertScrimTinted(Map.of(
|
||||
mNotificationsScrim, false,
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
|
||||
// Back scrim should be visible after start dragging
|
||||
@@ -664,8 +649,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, false,
|
||||
mScrimForBubble, true
|
||||
mScrimBehind, false
|
||||
));
|
||||
|
||||
// Front scrim should be transparent
|
||||
@@ -674,9 +658,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
// Back scrim should be visible
|
||||
assertEquals(ScrimController.BUSY_SCRIM_ALPHA,
|
||||
mScrimBehind.getViewAlpha(), 0.0f);
|
||||
// Bubble scrim should be visible
|
||||
assertEquals(ScrimController.BUBBLE_SCRIM_ALPHA,
|
||||
mScrimForBubble.getViewAlpha(), 0.0f);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -787,8 +768,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
// Immediately tinted black after the transition starts
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, true
|
||||
mScrimBehind, true
|
||||
));
|
||||
|
||||
finishAnimationsImmediately();
|
||||
@@ -796,14 +776,12 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
// All scrims should be transparent at the end of fade transition.
|
||||
assertScrimAlpha(Map.of(
|
||||
mScrimInFront, TRANSPARENT,
|
||||
mScrimBehind, TRANSPARENT,
|
||||
mScrimForBubble, TRANSPARENT));
|
||||
mScrimBehind, TRANSPARENT));
|
||||
|
||||
// Make sure at the very end of the animation, we're reset to transparent
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, false,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, false
|
||||
mScrimBehind, true
|
||||
));
|
||||
}
|
||||
|
||||
@@ -821,8 +799,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
+ mScrimInFront.getViewAlpha(), mScrimInFront.getViewAlpha() > 0);
|
||||
assertScrimTinted(Map.of(
|
||||
mScrimInFront, true,
|
||||
mScrimBehind, true,
|
||||
mScrimForBubble, true
|
||||
mScrimBehind, true
|
||||
));
|
||||
Assert.assertSame("Scrim should be visible during transition.",
|
||||
mScrimVisibility, OPAQUE);
|
||||
@@ -1075,8 +1052,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
mScrimInFront.getDefaultFocusHighlightEnabled());
|
||||
Assert.assertFalse("Scrim shouldn't have focus highlight",
|
||||
mScrimBehind.getDefaultFocusHighlightEnabled());
|
||||
Assert.assertFalse("Scrim shouldn't have focus highlight",
|
||||
mScrimForBubble.getDefaultFocusHighlightEnabled());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1239,21 +1214,16 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
return "behind";
|
||||
} else if (scrim == mNotificationsScrim) {
|
||||
return "notifications";
|
||||
} else if (scrim == mScrimForBubble) {
|
||||
return "bubble";
|
||||
}
|
||||
return "unknown_scrim";
|
||||
}
|
||||
|
||||
/**
|
||||
* If {@link #mScrimForBubble} or {@link #mNotificationsScrim} is not passed in the map
|
||||
* If {@link #mNotificationsScrim} is not passed in the map
|
||||
* we assume it must be transparent
|
||||
*/
|
||||
private void assertScrimAlpha(Map<ScrimView, Integer> scrimToAlpha) {
|
||||
// Check single scrim visibility.
|
||||
if (!scrimToAlpha.containsKey(mScrimForBubble)) {
|
||||
assertScrimAlpha(mScrimForBubble, TRANSPARENT);
|
||||
}
|
||||
if (!scrimToAlpha.containsKey(mNotificationsScrim)) {
|
||||
assertScrimAlpha(mNotificationsScrim, TRANSPARENT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user