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

Commit aad8a989 authored by Lyn Han's avatar Lyn Han Committed by Android (Google) Code Review
Browse files

Merge changes I601fdb4f,I029f14b5,I78fe9f19 into main

* changes:
  Class for reading avalanche suppression flag
  Flag to suppress HUNs after avalanche
  Rename updateNotification param to shouldHeadsUpAgain
parents 946c82ea d4bd52c7
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -88,6 +88,13 @@ flag {
    bug: "307288824"
}

flag {
    name: "notification_avalanche_suppression"
    namespace: "systemui"
    description: "After notification avalanche floodgate event, suppress HUNs completely."
    bug: "321089634"
}

flag {
    name: "notification_background_tint_optimization"
    namespace: "systemui"
+3 −3
Original line number Diff line number Diff line
@@ -790,7 +790,7 @@ private fun <R> HeadsUpManager.modifyHuns(block: (HunMutator) -> R): R {

/** Mutates the HeadsUp state of notifications. */
private interface HunMutator {
    fun updateNotification(key: String, alert: Boolean)
    fun updateNotification(key: String, shouldHeadsUpAgain: Boolean)
    fun removeNotification(key: String, releaseImmediately: Boolean)
}

@@ -801,8 +801,8 @@ private interface HunMutator {
private class HunMutatorImpl(private val headsUpManager: HeadsUpManager) : HunMutator {
    private val deferred = mutableListOf<Pair<String, Boolean>>()

    override fun updateNotification(key: String, alert: Boolean) {
        headsUpManager.updateNotification(key, alert)
    override fun updateNotification(key: String, shouldHeadsUpAgain: Boolean) {
        headsUpManager.updateNotification(key, shouldHeadsUpAgain)
    }

    override fun removeNotification(key: String, releaseImmediately: Boolean) {
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.systemui.statusbar.notification.shared

import com.android.systemui.Flags
import com.android.systemui.flags.FlagToken
import com.android.systemui.flags.RefactorFlagUtils

/** Helper for reading or using the notification avalanche suppression flag state. */
@Suppress("NOTHING_TO_INLINE")
object NotificationAvalancheSuppression {
    /** The aconfig flag name */
    const val FLAG_NAME = Flags.FLAG_NOTIFICATION_AVALANCHE_SUPPRESSION

    /** A token used for dependency declaration */
    val token: FlagToken
        get() = FlagToken(FLAG_NAME, isEnabled)

    /** Is the refactor enabled */
    @JvmStatic
    inline val isEnabled
        get() = Flags.notificationAvalancheSuppression()

    /**
     * Called to ensure code is only run when the flag is enabled. This protects users from the
     * unintended behaviors caused by accidentally running new logic, while also crashing on an eng
     * build to ensure that the refactor author catches issues in testing.
     */
    @JvmStatic
    inline fun isUnexpectedlyInLegacyMode() =
            RefactorFlagUtils.isUnexpectedlyInLegacyMode(isEnabled, FLAG_NAME)

    /**
     * Called to ensure code is only run when the flag is disabled. This will throw an exception if
     * the flag is enabled to ensure that the refactor author catches issues in testing.
     */
    @JvmStatic
    inline fun assertInLegacyMode() = RefactorFlagUtils.assertInLegacyMode(isEnabled, FLAG_NAME)
}
 No newline at end of file
+6 −6
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ public abstract class BaseHeadsUpManager implements HeadsUpManager {
    public void showNotification(@NonNull NotificationEntry entry) {
        mLogger.logShowNotification(entry);
        addEntry(entry);
        updateNotification(entry.getKey(), true /* show */);
        updateNotification(entry.getKey(), true /* shouldHeadsUpAgain */);
        entry.setInterruption();
    }

@@ -190,12 +190,12 @@ public abstract class BaseHeadsUpManager implements HeadsUpManager {
    /**
     * Called when the notification state has been updated.
     * @param key the key of the entry that was updated
     * @param show whether the notification should show again and force reevaluation of
     *              removal time
     * @param shouldHeadsUpAgain whether the notification should show again and force reevaluation
     *                           of removal time
     */
    public void updateNotification(@NonNull String key, boolean show) {
    public void updateNotification(@NonNull String key, boolean shouldHeadsUpAgain) {
        HeadsUpEntry headsUpEntry = mHeadsUpEntryMap.get(key);
        mLogger.logUpdateNotification(key, show, headsUpEntry != null);
        mLogger.logUpdateNotification(key, shouldHeadsUpAgain, headsUpEntry != null);
        if (headsUpEntry == null) {
            // the entry was released before this update (i.e by a listener) This can happen
            // with the groupmanager
@@ -204,7 +204,7 @@ public abstract class BaseHeadsUpManager implements HeadsUpManager {

        headsUpEntry.mEntry.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);

        if (show) {
        if (shouldHeadsUpAgain) {
            headsUpEntry.updateEntry(true /* updatePostTime */, "updateNotification");
            if (headsUpEntry != null) {
                setEntryPinned(headsUpEntry, shouldHeadsUpBecomePinned(headsUpEntry.mEntry));
+1 −1
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ interface HeadsUpManager : Dumpable {
     */
    fun unpinAll(userUnPinned: Boolean)

    fun updateNotification(key: String, alert: Boolean)
    fun updateNotification(key: String, shouldHeadsUpAgain: Boolean)
}

/** Sets the animation state of the HeadsUpManager. */