Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60686fd3 authored by Shan Huang's avatar Shan Huang
Browse files

Keep rows opaque for keyguard and HUNs.

Bug: 398938661
Test: atest ExpandableNotificationRowTest
Flag: com.android.systemui.notification_row_transparency

Change-Id: I68644646b66af127fa705d5823d8bc21642daa5b
parent 7c81533d
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -974,6 +974,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        } else if (isAboveShelf() != wasAboveShelf) {
            mAboveShelfChangedListener.onAboveShelfStateChanged(!wasAboveShelf);
        }
        updateBackgroundOpacity();
    }

    /**
@@ -3067,6 +3068,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
                    mChildrenContainer.setOnKeyguard(onKeyguard);
                }
            }
            updateBackgroundOpacity();
        }
    }

@@ -4506,4 +4508,12 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
            return getEntry().isExpandAnimationRunning();
        }
    }

    private void updateBackgroundOpacity() {
        if (mBackgroundNormal != null) {
            // Row background should be opaque when it's displayed as a heads-up notification or
            // displayed on keyguard.
            mBackgroundNormal.setForceOpaque(mIsHeadsUp || mOnKeyguard);
        }
    }
}
+17 −3
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import java.util.Arrays;
public class NotificationBackgroundView extends View implements Dumpable,
        ExpandableNotificationRow.DismissButtonTargetVisibilityListener {

    private static final int MAX_ALPHA = 0xFF;
    private final boolean mDontModifyCorners;
    private Drawable mBackground;
    private int mClipTopAmount;
@@ -74,6 +75,7 @@ public class NotificationBackgroundView extends View implements Dumpable,
    private final ColorStateList mDarkColoredStatefulColors;
    private final int mNormalColor;
    private boolean mBgIsColorized = false;
    private boolean mForceOpaque = false;
    private final int convexR = 9;
    private final int concaveR = 22;

@@ -156,6 +158,14 @@ public class NotificationBackgroundView extends View implements Dumpable,
        mBgIsColorized = b;
    }

    /** Sets if the background should be opaque. */
    public void setForceOpaque(boolean forceOpaque) {
        mForceOpaque = forceOpaque;
        if (notificationRowTransparency()) {
            updateBaseLayerColor();
        }
    }

    private Path calculateDismissButtonCutoutPath(Rect backgroundBounds) {
        // TODO(b/365585705): Adapt to RTL after the UX design is finalized.

@@ -317,11 +327,15 @@ public class NotificationBackgroundView extends View implements Dumpable,
        // Instead, we set a color filter that essentially replaces every pixel of the drawable.
        // For non-colorized notifications, this function specifies a new color token.
        // For colorized notifications, this uses a color that matches the tint color at 90% alpha.
        int color = isColorized()
                ? ColorUtils.setAlphaComponent(mTintColor, (int) (MAX_ALPHA * 0.9f))
                : SurfaceEffectColors.surfaceEffect1(getContext());
        if (mForceOpaque) {
            color = ColorUtils.setAlphaComponent(color, MAX_ALPHA);
        }
        getBaseBackgroundLayer().setColorFilter(
                new PorterDuffColorFilter(
                        isColorized()
                                ? ColorUtils.setAlphaComponent(mTintColor, (int) (255 * 0.9f))
                                : SurfaceEffectColors.surfaceEffect1(getContext()),
                        color,
                        PorterDuff.Mode.SRC)); // SRC operator discards the drawable's color+alpha
    }