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

Commit baafc8b1 authored by Jeff DeCew's avatar Jeff DeCew Committed by Android (Google) Code Review
Browse files

Merge "New pipeline: Separate stability rules for group pruning from group changing" into tm-dev

parents 3600867c f5adb86e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -749,7 +749,7 @@ public class ShadeListBuilder implements Dumpable {
                        continue;
                    }
                    if (group.wasAttachedInPreviousPass()
                            && !getStabilityManager().isGroupChangeAllowed(group.getSummary())) {
                            && !getStabilityManager().isGroupPruneAllowed(group)) {
                        checkState(!children.isEmpty(), "empty group should have been pruned");
                        // This group was previously attached and group changes aren't
                        //  allowed; keep it around until group changes are allowed again.
+8 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -138,6 +139,13 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
                    return isGroupChangeAllowedForEntry;
                }

                @Override
                public boolean isGroupPruneAllowed(@NonNull GroupEntry entry) {
                    final boolean isGroupPruneAllowedForEntry = mReorderingAllowed;
                    mIsSuppressingGroupChange |= !isGroupPruneAllowedForEntry;
                    return isGroupPruneAllowedForEntry;
                }

                @Override
                public boolean isSectionChangeAllowed(@NonNull NotificationEntry entry) {
                    final boolean isSectionChangeAllowedForEntry =
+10 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.systemui.statusbar.notification.collection.listbuilder.pluggable

import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry

@@ -51,6 +52,14 @@ abstract class NotifStabilityManager protected constructor(name: String) :
     */
    abstract fun isGroupChangeAllowed(entry: NotificationEntry): Boolean

    /**
     * Returns whether this notification group can be pruned for not having enough children.
     * Per iteration of the notification pipeline, locally stores this information until the next
     * run of the pipeline. When this method returns false, it's expected that a group prune for
     * this entry is being suppressed.
     */
    abstract fun isGroupPruneAllowed(entry: GroupEntry): Boolean

    /**
     * Returns whether this notification entry can currently change sections.
     * Per iteration of the notification pipeline, locally stores this information until the next
@@ -89,6 +98,7 @@ object DefaultNotifStabilityManager : NotifStabilityManager("DefaultNotifStabili
    override fun isPipelineRunAllowed(): Boolean = true
    override fun onBeginRun() {}
    override fun isGroupChangeAllowed(entry: NotificationEntry): Boolean = true
    override fun isGroupPruneAllowed(entry: GroupEntry): Boolean = true
    override fun isSectionChangeAllowed(entry: NotificationEntry): Boolean = true
    override fun isEntryReorderingAllowed(entry: ListEntry): Boolean = true
    override fun isEveryChangeAllowed(): Boolean = true
+14 −1
Original line number Diff line number Diff line
@@ -1439,14 +1439,16 @@ public class ShadeListBuilderTest extends SysuiTestCase {

        // WHEN a new child is added and the old one gets filtered while group changes are disabled.
        mStabilityManager.setAllowGroupChanges(false);
        mStabilityManager.setAllowGroupPruning(false);
        mFinalizeFilter.mIndicesToFilter.add(1);
        addGroupChild(2, PACKAGE_1, GROUP_1);

        dispatchBuild();

        // THEN the new child should be shown without a group
        // (Note that this is the same as the expected result if there were no stability rules.)
        verifyBuiltList(
                notif(2)  // previously promoted child
                notif(2)  // new child
        );
    }

@@ -2250,6 +2252,7 @@ public class ShadeListBuilderTest extends SysuiTestCase {
    private static class TestableStabilityManager extends NotifStabilityManager {
        boolean mAllowPipelineRun = true;
        boolean mAllowGroupChanges = true;
        boolean mAllowGroupPruning = true;
        boolean mAllowSectionChanges = true;
        boolean mAllowEntryReodering = true;

@@ -2262,6 +2265,11 @@ public class ShadeListBuilderTest extends SysuiTestCase {
            return this;
        }

        TestableStabilityManager setAllowGroupPruning(boolean allowGroupPruning) {
            mAllowGroupPruning = allowGroupPruning;
            return this;
        }

        TestableStabilityManager setAllowSectionChanges(boolean allowSectionChanges) {
            mAllowSectionChanges = allowSectionChanges;
            return this;
@@ -2291,6 +2299,11 @@ public class ShadeListBuilderTest extends SysuiTestCase {
            return mAllowGroupChanges;
        }

        @Override
        public boolean isGroupPruneAllowed(@NonNull GroupEntry entry) {
            return mAllowGroupPruning;
        }

        @Override
        public boolean isSectionChangeAllowed(@NonNull NotificationEntry entry) {
            return mAllowSectionChanges;
+17 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
@@ -83,6 +85,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
    private NotifPanelEvents.Listener mNotifPanelEventsCallback;
    private NotifStabilityManager mNotifStabilityManager;
    private NotificationEntry mEntry;
    private GroupEntry mGroupEntry;

    @Before
    public void setUp() {
@@ -117,6 +120,10 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
                .setPkg("testPkg1")
                .build();

        mGroupEntry = new GroupEntryBuilder()
                .setSummary(mEntry)
                .build();

        when(mHeadsUpManager.isAlerting(mEntry.getKey())).thenReturn(false);

        // Whenever we invalidate, the pipeline runs again, so we invalidate the state
@@ -135,6 +142,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {

        // THEN group changes are allowed
        assertTrue(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertTrue(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // THEN section changes are allowed
        assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -149,6 +157,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {

        // THEN group changes are allowed
        assertTrue(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertTrue(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // THEN section changes are allowed
        assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -163,6 +172,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {

        // THEN group changes are NOT allowed
        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // THEN section changes are NOT allowed
        assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -176,6 +186,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {

        // THEN group changes are NOT allowed
        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // THEN section changes are NOT allowed
        assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -190,6 +201,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {

        // THEN group changes are NOT allowed
        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // THEN section changes are NOT allowed
        assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -208,6 +220,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {

        // THEN group changes aren't allowed
        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // THEN section changes are allowed for this notification but not other notifications
        assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -321,6 +334,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
        setPanelExpanded(true);

        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));

        // WHEN the panel isn't expanded anymore
        setPanelExpanded(false);
@@ -422,6 +436,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
        setPanelExpanded(true);
        setPulsing(true);
        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
        assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));

        // GIVEN mEntry is a HUN
@@ -431,6 +446,8 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
        assertTrue(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
        assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));

        // BUT pruning the group for which this is the summary would still NOT be allowed.
        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
    }

    private void setActivityLaunching(boolean activityLaunching) {