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

Commit 5b9098dc authored by Gus Prevas's avatar Gus Prevas
Browse files

Moves minimization change handling into NotificationEntryListeners.

This change moves the logic in NotificationEntryManager which was
explicitly handling changes in whether a row was minimized or not after
it was reinflated into the target components through the normal listener
mechanism.  This involves VisualStabilityManager registering a
NotificationEntryListener and allows us to remove the dependency of
NotificationEntryManager on VisualStabilityManager.

Test: atest SystemUITests, manual
Change-Id: I4bfdbda49c1cdff4a78fabeb2343843edc509fb0
parent 26d91270
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ public interface NotificationEntryListener {
    /**
     * Called when an existing notification's views are reinflated (usually due to an update being
     * posted to that notification).
     *
     * @param entry notification data entry that was reinflated.
     */
    default void onEntryReinflated(NotificationData.Entry entry) {
    }
+0 −6
Original line number Diff line number Diff line
@@ -85,8 +85,6 @@ public class NotificationEntryManager implements
            Dependency.get(NotificationGutsManager.class);
    private final DeviceProvisionedController mDeviceProvisionedController =
            Dependency.get(DeviceProvisionedController.class);
    private final VisualStabilityManager mVisualStabilityManager =
            Dependency.get(VisualStabilityManager.class);
    private final ForegroundServiceController mForegroundServiceController =
            Dependency.get(ForegroundServiceController.class);
    private final AmbientPulseManager mAmbientPulseManager =
@@ -324,10 +322,6 @@ public class NotificationEntryManager implements
                }
                addEntry(entry);
            } else {
                if (entry.getRow().hasLowPriorityStateUpdated()) {
                    mVisualStabilityManager.onLowPriorityUpdated(entry);
                    mPresenter.updateNotificationViews();
                }
                for (NotificationEntryListener listener : mNotificationEntryListeners) {
                    listener.onEntryReinflated(entry);
                }
+19 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.view.View;

import androidx.collection.ArraySet;

import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;

@@ -37,6 +38,7 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener {

    private final ArrayList<Callback> mCallbacks =  new ArrayList<>();

    private NotificationPresenter mPresenter;
    private boolean mPanelExpanded;
    private boolean mScreenOn;
    private boolean mReorderingAllowed;
@@ -47,7 +49,22 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener {
    private boolean mPulsing;

    @Inject
    public VisualStabilityManager() {
    public VisualStabilityManager(NotificationEntryManager notificationEntryManager) {
        notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
            @Override
            public void onEntryReinflated(NotificationData.Entry entry) {
                if (entry.hasLowPriorityStateUpdated()) {
                    onLowPriorityUpdated(entry);
                    if (mPresenter != null) {
                        mPresenter.updateNotificationViews();
                    }
                }
            }
        });
    }

    public void setUpWithPresenter(NotificationPresenter presenter) {
        mPresenter = presenter;
    }

    /**
@@ -154,7 +171,7 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener {
        }
    }

    public void onLowPriorityUpdated(NotificationData.Entry entry) {
    private void onLowPriorityUpdated(NotificationData.Entry entry) {
        mLowPriorityReorderingViews.add(entry.getRow());
    }

+4 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
import com.android.systemui.statusbar.notification.NotificationRowBinder;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
@@ -98,6 +99,8 @@ public class StatusBarNotificationPresenter implements NotificationPresenter,
            Dependency.get(NotificationInterruptionStateProvider.class);
    private final NotificationMediaManager mMediaManager =
            Dependency.get(NotificationMediaManager.class);
    private final VisualStabilityManager mVisualStabilityManager =
            Dependency.get(VisualStabilityManager.class);
    protected AmbientPulseManager mAmbientPulseManager = Dependency.get(AmbientPulseManager.class);

    private final NotificationPanelView mNotificationPanel;
@@ -212,6 +215,7 @@ public class StatusBarNotificationPresenter implements NotificationPresenter,
                    this, mHeadsUpManager, this::canHeadsUp);
            mLockscreenUserManager.setUpWithPresenter(this);
            mMediaManager.setUpWithPresenter(this);
            mVisualStabilityManager.setUpWithPresenter(this);
            Dependency.get(NotificationGutsManager.class).setUpWithPresenter(this,
                    notifListContainer, mCheckSaveListener, mOnSettingsClickListener);

+11 −7
Original line number Diff line number Diff line
@@ -16,28 +16,31 @@

package com.android.systemui.statusbar.notification;

import static junit.framework.Assert.assertEquals;

import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.service.notification.StatusBarNotification;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import static junit.framework.Assert.assertEquals;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class VisualStabilityManagerTest extends SysuiTestCase {

    private VisualStabilityManager mVisualStabilityManager = new VisualStabilityManager();
    private VisualStabilityManager mVisualStabilityManager = new VisualStabilityManager(
            mock(NotificationEntryManager.class));
    private VisualStabilityManager.Callback mCallback = mock(VisualStabilityManager.Callback.class);
    private VisibilityLocationProvider mLocationProvider = mock(VisibilityLocationProvider.class);
    private ExpandableNotificationRow mRow = mock(ExpandableNotificationRow.class);
@@ -45,6 +48,7 @@ public class VisualStabilityManagerTest extends SysuiTestCase {

    @Before
    public void setUp() {
        mVisualStabilityManager.setUpWithPresenter(mock(NotificationPresenter.class));
        mVisualStabilityManager.setVisibilityLocationProvider(mLocationProvider);
        mEntry = new NotificationData.Entry(mock(StatusBarNotification.class));
        mEntry.setRow(mRow);