Merge "Clear content from tile when conversation opened in bubble" into sc-dev

This commit is contained in:
Flavio Fiszman
2021-06-07 13:13:57 +00:00
committed by Android (Google) Code Review
3 changed files with 52 additions and 7 deletions

View File

@@ -31,12 +31,14 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.wm.shell.bubbles.Bubbles;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.Set; import java.util.Set;
/** Helper functions to handle notifications in People Tiles. */ /** Helper functions to handle notifications in People Tiles. */
@@ -234,5 +236,13 @@ public class NotificationHelper {
if (DEBUG) Log.d(TAG, "Returning sender from group conversation notification."); if (DEBUG) Log.d(TAG, "Returning sender from group conversation notification.");
return person.getName(); return person.getName();
} }
/** Returns whether {@code entry} is suppressed from shade, meaning we should not show it. */
public static boolean shouldFilterOut(
Optional<Bubbles> bubblesOptional, NotificationEntry entry) {
return bubblesOptional.isPresent()
&& bubblesOptional.get().isBubbleNotificationSuppressedFromShade(
entry.getKey(), entry.getSbn().getGroupKey());
}
} }

View File

@@ -26,6 +26,7 @@ import static android.service.notification.ZenPolicy.CONVERSATION_SENDERS_ANYONE
import static com.android.systemui.people.NotificationHelper.getContactUri; import static com.android.systemui.people.NotificationHelper.getContactUri;
import static com.android.systemui.people.NotificationHelper.getHighestPriorityNotification; import static com.android.systemui.people.NotificationHelper.getHighestPriorityNotification;
import static com.android.systemui.people.NotificationHelper.shouldFilterOut;
import static com.android.systemui.people.NotificationHelper.shouldMatchNotificationByUri; import static com.android.systemui.people.NotificationHelper.shouldMatchNotificationByUri;
import static com.android.systemui.people.PeopleSpaceUtils.EMPTY_STRING; import static com.android.systemui.people.PeopleSpaceUtils.EMPTY_STRING;
import static com.android.systemui.people.PeopleSpaceUtils.INVALID_USER_ID; import static com.android.systemui.people.PeopleSpaceUtils.INVALID_USER_ID;
@@ -87,6 +88,7 @@ import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener.NotificationHandler; import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.wm.shell.bubbles.Bubbles;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -119,6 +121,7 @@ public class PeopleSpaceWidgetManager {
private NotificationEntryManager mNotificationEntryManager; private NotificationEntryManager mNotificationEntryManager;
private PackageManager mPackageManager; private PackageManager mPackageManager;
private INotificationManager mINotificationManager; private INotificationManager mINotificationManager;
private Optional<Bubbles> mBubblesOptional;
private UserManager mUserManager; private UserManager mUserManager;
private PeopleSpaceWidgetManager mManager; private PeopleSpaceWidgetManager mManager;
public UiEventLogger mUiEventLogger = new UiEventLoggerImpl(); public UiEventLogger mUiEventLogger = new UiEventLoggerImpl();
@@ -142,9 +145,9 @@ public class PeopleSpaceWidgetManager {
@Inject @Inject
public PeopleSpaceWidgetManager(Context context, LauncherApps launcherApps, public PeopleSpaceWidgetManager(Context context, LauncherApps launcherApps,
NotificationEntryManager notificationEntryManager, NotificationEntryManager notificationEntryManager,
PackageManager packageManager, UserManager userManager, PackageManager packageManager, Optional<Bubbles> bubblesOptional,
NotificationManager notificationManager, BroadcastDispatcher broadcastDispatcher, UserManager userManager, NotificationManager notificationManager,
@Background Executor bgExecutor) { BroadcastDispatcher broadcastDispatcher, @Background Executor bgExecutor) {
if (DEBUG) Log.d(TAG, "constructor"); if (DEBUG) Log.d(TAG, "constructor");
mContext = context; mContext = context;
mAppWidgetManager = AppWidgetManager.getInstance(context); mAppWidgetManager = AppWidgetManager.getInstance(context);
@@ -157,6 +160,7 @@ public class PeopleSpaceWidgetManager {
mPackageManager = packageManager; mPackageManager = packageManager;
mINotificationManager = INotificationManager.Stub.asInterface( mINotificationManager = INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE)); ServiceManager.getService(Context.NOTIFICATION_SERVICE));
mBubblesOptional = bubblesOptional;
mUserManager = userManager; mUserManager = userManager;
mNotificationManager = notificationManager; mNotificationManager = notificationManager;
mManager = this; mManager = this;
@@ -207,8 +211,9 @@ public class PeopleSpaceWidgetManager {
AppWidgetManager appWidgetManager, IPeopleManager iPeopleManager, AppWidgetManager appWidgetManager, IPeopleManager iPeopleManager,
PeopleManager peopleManager, LauncherApps launcherApps, PeopleManager peopleManager, LauncherApps launcherApps,
NotificationEntryManager notificationEntryManager, PackageManager packageManager, NotificationEntryManager notificationEntryManager, PackageManager packageManager,
UserManager userManager, INotificationManager iNotificationManager, Optional<Bubbles> bubblesOptional, UserManager userManager,
NotificationManager notificationManager, @Background Executor executor) { INotificationManager iNotificationManager, NotificationManager notificationManager,
@Background Executor executor) {
mContext = context; mContext = context;
mAppWidgetManager = appWidgetManager; mAppWidgetManager = appWidgetManager;
mIPeopleManager = iPeopleManager; mIPeopleManager = iPeopleManager;
@@ -216,6 +221,7 @@ public class PeopleSpaceWidgetManager {
mLauncherApps = launcherApps; mLauncherApps = launcherApps;
mNotificationEntryManager = notificationEntryManager; mNotificationEntryManager = notificationEntryManager;
mPackageManager = packageManager; mPackageManager = packageManager;
mBubblesOptional = bubblesOptional;
mUserManager = userManager; mUserManager = userManager;
mINotificationManager = iNotificationManager; mINotificationManager = iNotificationManager;
mNotificationManager = notificationManager; mNotificationManager = notificationManager;
@@ -483,7 +489,8 @@ public class PeopleSpaceWidgetManager {
notifications notifications
.stream() .stream()
.filter(entry -> NotificationHelper.isValid(entry) .filter(entry -> NotificationHelper.isValid(entry)
&& NotificationHelper.isMissedCallOrHasContent(entry)) && NotificationHelper.isMissedCallOrHasContent(entry)
&& !shouldFilterOut(mBubblesOptional, entry))
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
PeopleTileKey::new, PeopleTileKey::new,
Collectors.mapping(Function.identity(), Collectors.toSet()))); Collectors.mapping(Function.identity(), Collectors.toSet())));

View File

@@ -95,6 +95,7 @@ import android.service.notification.ConversationChannelWrapper;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.text.TextUtils;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -112,6 +113,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.FakeSystemClock;
import com.android.wm.shell.bubbles.Bubbles;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -224,6 +226,8 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
private NotificationManager mNotificationManager; private NotificationManager mNotificationManager;
@Mock @Mock
private NotificationManager.Policy mNotificationPolicy; private NotificationManager.Policy mNotificationPolicy;
@Mock
private Bubbles mBubbles;
@Captor @Captor
private ArgumentCaptor<NotificationHandler> mListenerCaptor; private ArgumentCaptor<NotificationHandler> mListenerCaptor;
@@ -242,7 +246,8 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
mDependency.injectTestDependency(NotificationEntryManager.class, mNotificationEntryManager); mDependency.injectTestDependency(NotificationEntryManager.class, mNotificationEntryManager);
mManager = new PeopleSpaceWidgetManager(mContext, mAppWidgetManager, mIPeopleManager, mManager = new PeopleSpaceWidgetManager(mContext, mAppWidgetManager, mIPeopleManager,
mPeopleManager, mLauncherApps, mNotificationEntryManager, mPackageManager, mPeopleManager, mLauncherApps, mNotificationEntryManager, mPackageManager,
mUserManager, mINotificationManager, mNotificationManager, mFakeExecutor); Optional.of(mBubbles), mUserManager, mINotificationManager, mNotificationManager,
mFakeExecutor);
mManager.attach(mListenerService); mManager.attach(mListenerService);
verify(mListenerService).addNotificationHandler(mListenerCaptor.capture()); verify(mListenerService).addNotificationHandler(mListenerCaptor.capture());
@@ -267,6 +272,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
INTERRUPTION_FILTER_ALL); INTERRUPTION_FILTER_ALL);
int[] widgetIdsArray = {WIDGET_ID_WITH_SHORTCUT}; int[] widgetIdsArray = {WIDGET_ID_WITH_SHORTCUT};
when(mAppWidgetManager.getAppWidgetIds(any())).thenReturn(widgetIdsArray); when(mAppWidgetManager.getAppWidgetIds(any())).thenReturn(widgetIdsArray);
when(mBubbles.isBubbleNotificationSuppressedFromShade(any(), any())).thenReturn(false);
when(mMockContext.getPackageName()).thenReturn(TEST_PACKAGE_A); when(mMockContext.getPackageName()).thenReturn(TEST_PACKAGE_A);
when(mMockContext.getUserId()).thenReturn(0); when(mMockContext.getUserId()).thenReturn(0);
@@ -1192,6 +1198,28 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.getVisibleNotifications(); .getVisibleNotifications();
} }
@Test
public void testAugmentTileFromNotificationEntryManager_notificationHidden() {
when(mBubbles.isBubbleNotificationSuppressedFromShade(any(), any())).thenReturn(true);
PeopleSpaceTile tile =
new PeopleSpaceTile
.Builder(SHORTCUT_ID, "userName", ICON, new Intent())
.setPackageName(TEST_PACKAGE_A)
.setUserHandle(new UserHandle(0))
.build();
when(mNotificationEntryManager.getVisibleNotifications())
.thenReturn(List.of(mNotificationEntry));
PeopleSpaceTile actual =
mManager.augmentTileFromNotificationEntryManager(tile,
Optional.of(WIDGET_ID_WITH_SHORTCUT));
assertThat(TextUtils.isEmpty(actual.getNotificationContent())).isTrue();
verify(mNotificationEntryManager, times(1))
.getVisibleNotifications();
}
@Test @Test
public void testUpdateWidgetsOnStateChange() { public void testUpdateWidgetsOnStateChange() {
mManager.updateWidgetsOnStateChange(ACTION_BOOT_COMPLETED); mManager.updateWidgetsOnStateChange(ACTION_BOOT_COMPLETED);