Merge "Remove NotificationListController" into tm-qpr-dev am: 30156a84e3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19735660 Change-Id: I1b01482f700fbccbf45720d0f234ee99a56fcd7b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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.NotificationClicker
|
||||
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.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.TargetSdkResolver
|
||||
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.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.interruption.HeadsUpViewBinder
|
||||
import com.android.systemui.statusbar.notification.row.NotifBindPipelineInitializer
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController
|
||||
import com.android.wm.shell.bubbles.Bubbles
|
||||
import dagger.Lazy
|
||||
import java.io.PrintWriter
|
||||
@@ -63,7 +63,6 @@ class NotificationsControllerImpl @Inject constructor(
|
||||
private val targetSdkResolver: TargetSdkResolver,
|
||||
private val notifPipelineInitializer: Lazy<NotifPipelineInitializer>,
|
||||
private val notifBindPipelineInitializer: NotifBindPipelineInitializer,
|
||||
private val deviceProvisionedController: DeviceProvisionedController,
|
||||
private val notificationRowBinder: NotificationRowBinderImpl,
|
||||
private val headsUpViewBinder: HeadsUpViewBinder,
|
||||
private val clickerBuilder: NotificationClicker.Builder,
|
||||
@@ -81,12 +80,11 @@ class NotificationsControllerImpl @Inject constructor(
|
||||
) {
|
||||
notificationListener.registerAsSystemService()
|
||||
|
||||
val listController =
|
||||
NotificationListController(
|
||||
entryManager,
|
||||
listContainer,
|
||||
deviceProvisionedController)
|
||||
listController.bind()
|
||||
notifPipeline.get().addCollectionListener(object : NotifCollectionListener {
|
||||
override fun onEntryRemoved(entry: NotificationEntry, reason: Int) {
|
||||
listContainer.cleanUpViewStateForEntry(entry)
|
||||
}
|
||||
})
|
||||
|
||||
notificationRowBinder.setNotificationClicker(
|
||||
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