Merge "Remove NotificationListController" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
30156a84e3
@@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2019 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;
|
|
||||||
|
|
||||||
import com.android.internal.statusbar.NotificationVisibility;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
|
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Root controller for the list of notifications in the shade.
|
|
||||||
*
|
|
||||||
* TODO: Much of the code in NotificationPresenter should eventually move in here. It will proxy
|
|
||||||
* domain-specific behavior (ARC, etc) to subcontrollers.
|
|
||||||
*/
|
|
||||||
public class NotificationListController {
|
|
||||||
private final NotificationEntryManager mEntryManager;
|
|
||||||
private final NotificationListContainer mListContainer;
|
|
||||||
private final DeviceProvisionedController mDeviceProvisionedController;
|
|
||||||
|
|
||||||
public NotificationListController(
|
|
||||||
NotificationEntryManager entryManager,
|
|
||||||
NotificationListContainer listContainer,
|
|
||||||
DeviceProvisionedController deviceProvisionedController) {
|
|
||||||
mEntryManager = Objects.requireNonNull(entryManager);
|
|
||||||
mListContainer = Objects.requireNonNull(listContainer);
|
|
||||||
mDeviceProvisionedController = Objects.requireNonNull(deviceProvisionedController);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Causes the controller to register listeners on its dependencies. This method must be called
|
|
||||||
* before the controller is ready to perform its duties.
|
|
||||||
*/
|
|
||||||
public void bind() {
|
|
||||||
mEntryManager.addNotificationEntryListener(mEntryListener);
|
|
||||||
mDeviceProvisionedController.addCallback(mDeviceProvisionedListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("FieldCanBeLocal")
|
|
||||||
private final NotificationEntryListener mEntryListener = new NotificationEntryListener() {
|
|
||||||
@Override
|
|
||||||
public void onEntryRemoved(
|
|
||||||
NotificationEntry entry,
|
|
||||||
NotificationVisibility visibility,
|
|
||||||
boolean removedByUser,
|
|
||||||
int reason) {
|
|
||||||
mListContainer.cleanUpViewStateForEntry(entry);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: (b/145659174) remove after moving to NewNotifPipeline. Replaced by
|
|
||||||
// DeviceProvisionedCoordinator
|
|
||||||
private final DeviceProvisionedListener mDeviceProvisionedListener =
|
|
||||||
new DeviceProvisionedListener() {
|
|
||||||
@Override
|
|
||||||
public void onDeviceProvisionedChanged() {
|
|
||||||
mEntryManager.updateNotifications("device provisioned changed");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -26,19 +26,19 @@ import com.android.systemui.statusbar.notification.AnimatedImageNotificationMana
|
|||||||
import com.android.systemui.statusbar.notification.NotificationActivityStarter
|
import com.android.systemui.statusbar.notification.NotificationActivityStarter
|
||||||
import com.android.systemui.statusbar.notification.NotificationClicker
|
import com.android.systemui.statusbar.notification.NotificationClicker
|
||||||
import com.android.systemui.statusbar.notification.NotificationEntryManager
|
import com.android.systemui.statusbar.notification.NotificationEntryManager
|
||||||
import com.android.systemui.statusbar.notification.NotificationListController
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore
|
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.TargetSdkResolver
|
import com.android.systemui.statusbar.notification.collection.TargetSdkResolver
|
||||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl
|
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl
|
||||||
import com.android.systemui.statusbar.notification.collection.init.NotifPipelineInitializer
|
import com.android.systemui.statusbar.notification.collection.init.NotifPipelineInitializer
|
||||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
|
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
|
||||||
|
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
|
||||||
import com.android.systemui.statusbar.notification.collection.render.NotifStackController
|
import com.android.systemui.statusbar.notification.collection.render.NotifStackController
|
||||||
import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder
|
import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder
|
||||||
import com.android.systemui.statusbar.notification.row.NotifBindPipelineInitializer
|
import com.android.systemui.statusbar.notification.row.NotifBindPipelineInitializer
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces
|
import com.android.systemui.statusbar.phone.CentralSurfaces
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController
|
|
||||||
import com.android.wm.shell.bubbles.Bubbles
|
import com.android.wm.shell.bubbles.Bubbles
|
||||||
import dagger.Lazy
|
import dagger.Lazy
|
||||||
import java.io.PrintWriter
|
import java.io.PrintWriter
|
||||||
@@ -63,7 +63,6 @@ class NotificationsControllerImpl @Inject constructor(
|
|||||||
private val targetSdkResolver: TargetSdkResolver,
|
private val targetSdkResolver: TargetSdkResolver,
|
||||||
private val notifPipelineInitializer: Lazy<NotifPipelineInitializer>,
|
private val notifPipelineInitializer: Lazy<NotifPipelineInitializer>,
|
||||||
private val notifBindPipelineInitializer: NotifBindPipelineInitializer,
|
private val notifBindPipelineInitializer: NotifBindPipelineInitializer,
|
||||||
private val deviceProvisionedController: DeviceProvisionedController,
|
|
||||||
private val notificationRowBinder: NotificationRowBinderImpl,
|
private val notificationRowBinder: NotificationRowBinderImpl,
|
||||||
private val headsUpViewBinder: HeadsUpViewBinder,
|
private val headsUpViewBinder: HeadsUpViewBinder,
|
||||||
private val clickerBuilder: NotificationClicker.Builder,
|
private val clickerBuilder: NotificationClicker.Builder,
|
||||||
@@ -81,12 +80,11 @@ class NotificationsControllerImpl @Inject constructor(
|
|||||||
) {
|
) {
|
||||||
notificationListener.registerAsSystemService()
|
notificationListener.registerAsSystemService()
|
||||||
|
|
||||||
val listController =
|
notifPipeline.get().addCollectionListener(object : NotifCollectionListener {
|
||||||
NotificationListController(
|
override fun onEntryRemoved(entry: NotificationEntry, reason: Int) {
|
||||||
entryManager,
|
listContainer.cleanUpViewStateForEntry(entry)
|
||||||
listContainer,
|
}
|
||||||
deviceProvisionedController)
|
})
|
||||||
listController.bind()
|
|
||||||
|
|
||||||
notificationRowBinder.setNotificationClicker(
|
notificationRowBinder.setNotificationClicker(
|
||||||
clickerBuilder.build(
|
clickerBuilder.build(
|
||||||
|
|||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2019 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;
|
|
||||||
|
|
||||||
import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON;
|
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
|
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.app.Notification;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.testing.AndroidTestingRunner;
|
|
||||||
import android.testing.TestableLooper;
|
|
||||||
|
|
||||||
import androidx.test.filters.SmallTest;
|
|
||||||
|
|
||||||
import com.android.internal.statusbar.NotificationVisibility;
|
|
||||||
import com.android.systemui.R;
|
|
||||||
import com.android.systemui.SysuiTestCase;
|
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
|
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
|
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
|
|
||||||
@SmallTest
|
|
||||||
@RunWith(AndroidTestingRunner.class)
|
|
||||||
@TestableLooper.RunWithLooper
|
|
||||||
public class NotificationListControllerTest extends SysuiTestCase {
|
|
||||||
private NotificationListController mController;
|
|
||||||
|
|
||||||
@Mock private NotificationEntryManager mEntryManager;
|
|
||||||
@Mock private NotificationListContainer mListContainer;
|
|
||||||
@Mock private DeviceProvisionedController mDeviceProvisionedController;
|
|
||||||
|
|
||||||
@Captor private ArgumentCaptor<NotificationEntryListener> mEntryListenerCaptor;
|
|
||||||
@Captor private ArgumentCaptor<DeviceProvisionedListener> mProvisionedCaptor;
|
|
||||||
|
|
||||||
private NotificationEntryListener mEntryListener;
|
|
||||||
private DeviceProvisionedListener mProvisionedListener;
|
|
||||||
|
|
||||||
private int mNextNotifId = 0;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mDependency.injectMockDependency(NotificationLockscreenUserManager.class);
|
|
||||||
|
|
||||||
mController = new NotificationListController(
|
|
||||||
mEntryManager,
|
|
||||||
mListContainer,
|
|
||||||
mDeviceProvisionedController);
|
|
||||||
mController.bind();
|
|
||||||
|
|
||||||
// Capture callbacks passed to mocks
|
|
||||||
verify(mEntryManager).addNotificationEntryListener(mEntryListenerCaptor.capture());
|
|
||||||
mEntryListener = mEntryListenerCaptor.getValue();
|
|
||||||
verify(mDeviceProvisionedController).addCallback(mProvisionedCaptor.capture());
|
|
||||||
mProvisionedListener = mProvisionedCaptor.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCleanUpViewStateOnEntryRemoved() {
|
|
||||||
final NotificationEntry entry = buildEntry();
|
|
||||||
mEntryListener.onEntryRemoved(
|
|
||||||
entry,
|
|
||||||
NotificationVisibility.obtain(entry.getKey(), 0, 0, true),
|
|
||||||
false,
|
|
||||||
UNDEFINED_DISMISS_REASON);
|
|
||||||
verify(mListContainer).cleanUpViewStateForEntry(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCallUpdateNotificationsOnDeviceProvisionedChange() {
|
|
||||||
mProvisionedListener.onDeviceProvisionedChanged();
|
|
||||||
verify(mEntryManager).updateNotifications(anyString());
|
|
||||||
}
|
|
||||||
|
|
||||||
private NotificationEntry buildEntry() {
|
|
||||||
mNextNotifId++;
|
|
||||||
|
|
||||||
Notification.Builder n = new Notification.Builder(mContext, "")
|
|
||||||
.setSmallIcon(R.drawable.ic_person)
|
|
||||||
.setContentTitle("Title")
|
|
||||||
.setContentText("Text");
|
|
||||||
|
|
||||||
return new NotificationEntryBuilder()
|
|
||||||
.setPkg(TEST_PACKAGE_NAME)
|
|
||||||
.setOpPkg(TEST_PACKAGE_NAME)
|
|
||||||
.setId(mNextNotifId)
|
|
||||||
.setUid(TEST_UID)
|
|
||||||
.setNotification(n.build())
|
|
||||||
.setUser(new UserHandle(ActivityManager.getCurrentUser()))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String TEST_PACKAGE_NAME = "test";
|
|
||||||
private static final int TEST_UID = 0;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user