summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-12-04 15:22:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-12-04 15:22:49 +0000
commit0262136e804b0d8e806b631aede488d185b42dc8 (patch)
tree004fb1998d02c79c4346eafcc9ffeba0ffcb999d
parent6bc4d22eaf2fd7640a0269ba68c0354f0109e893 (diff)
parent0e683cd154bda2ccf523686564938554bd4770bf (diff)
Merge "Filter conversation list by current users"
-rwxr-xr-xservices/core/java/com/android/server/notification/NotificationManagerService.java3
-rw-r--r--services/core/java/com/android/server/notification/PreferencesHelper.java54
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java48
3 files changed, 76 insertions, 29 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 01d086bdf99f..9efbb6964aeb 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -3644,8 +3644,9 @@ public class NotificationManagerService extends SystemService {
public ParceledListSlice<ConversationChannelWrapper> getConversations(
boolean onlyImportant) {
enforceSystemOrSystemUI("getConversations");
+ IntArray userIds = mUserProfiles.getCurrentProfileIds();
ArrayList<ConversationChannelWrapper> conversations =
- mPreferencesHelper.getConversations(onlyImportant);
+ mPreferencesHelper.getConversations(userIds, onlyImportant);
for (ConversationChannelWrapper conversation : conversations) {
if (mShortcutHelper == null) {
conversation.setShortcutInfo(null);
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index b31c59a8eb1e..cbd973aeaf6a 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -52,6 +52,7 @@ import android.service.notification.RankingHelperProto;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.IntArray;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseBooleanArray;
@@ -1381,36 +1382,39 @@ public class PreferencesHelper implements RankingConfig {
return null;
}
- public ArrayList<ConversationChannelWrapper> getConversations(boolean onlyImportant) {
+ public ArrayList<ConversationChannelWrapper> getConversations(IntArray userIds,
+ boolean onlyImportant) {
synchronized (mPackagePreferences) {
ArrayList<ConversationChannelWrapper> conversations = new ArrayList<>();
-
for (PackagePreferences p : mPackagePreferences.values()) {
- int N = p.channels.size();
- for (int i = 0; i < N; i++) {
- final NotificationChannel nc = p.channels.valueAt(i);
- if (!TextUtils.isEmpty(nc.getConversationId()) && !nc.isDeleted()
- && !nc.isDemoted()
- && (nc.isImportantConversation() || !onlyImportant)) {
- ConversationChannelWrapper conversation = new ConversationChannelWrapper();
- conversation.setPkg(p.pkg);
- conversation.setUid(p.uid);
- conversation.setNotificationChannel(nc);
- conversation.setParentChannelLabel(
- p.channels.get(nc.getParentChannelId()).getName());
- boolean blockedByGroup = false;
- if (nc.getGroup() != null) {
- NotificationChannelGroup group = p.groups.get(nc.getGroup());
- if (group != null) {
- if (group.isBlocked()) {
- blockedByGroup = true;
- } else {
- conversation.setGroupLabel(group.getName());
+ if (userIds.binarySearch(UserHandle.getUserId(p.uid)) >= 0) {
+ int N = p.channels.size();
+ for (int i = 0; i < N; i++) {
+ final NotificationChannel nc = p.channels.valueAt(i);
+ if (!TextUtils.isEmpty(nc.getConversationId()) && !nc.isDeleted()
+ && !nc.isDemoted()
+ && (nc.isImportantConversation() || !onlyImportant)) {
+ ConversationChannelWrapper conversation =
+ new ConversationChannelWrapper();
+ conversation.setPkg(p.pkg);
+ conversation.setUid(p.uid);
+ conversation.setNotificationChannel(nc);
+ conversation.setParentChannelLabel(
+ p.channels.get(nc.getParentChannelId()).getName());
+ boolean blockedByGroup = false;
+ if (nc.getGroup() != null) {
+ NotificationChannelGroup group = p.groups.get(nc.getGroup());
+ if (group != null) {
+ if (group.isBlocked()) {
+ blockedByGroup = true;
+ } else {
+ conversation.setGroupLabel(group.getName());
+ }
}
}
- }
- if (!blockedByGroup) {
- conversations.add(conversation);
+ if (!blockedByGroup) {
+ conversations.add(conversation);
+ }
}
}
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index 98c4a2da6a4f..4d2a4784b5d9 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -97,6 +97,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import android.testing.TestableContentResolver;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.IntArray;
import android.util.Pair;
import android.util.StatsEvent;
import android.util.TypedXmlPullParser;
@@ -3320,7 +3321,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel2.setImportantConversation(true);
mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
- List<ConversationChannelWrapper> convos = mHelper.getConversations(false);
+ List<ConversationChannelWrapper> convos =
+ mHelper.getConversations(IntArray.wrap(new int[] {0}), false);
assertEquals(3, convos.size());
assertTrue(conversationWrapperContainsChannel(convos, channel));
@@ -3329,6 +3331,44 @@ public class PreferencesHelperTest extends UiServiceTestCase {
}
@Test
+ public void testGetConversations_multiUser() {
+ String convoId = "convo";
+ NotificationChannel messages =
+ new NotificationChannel("messages", "Messages", IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(PKG_O, UID_O, messages, true, false);
+
+ NotificationChannel messagesUser10 =
+ new NotificationChannel("messages", "Messages", IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(
+ PKG_O, UID_O + UserHandle.PER_USER_RANGE, messagesUser10, true, false);
+
+ NotificationChannel messagesFromB =
+ new NotificationChannel("B person msgs", "messages from B", IMPORTANCE_DEFAULT);
+ messagesFromB.setConversationId(messages.getId(), "different convo");
+ mHelper.createNotificationChannel(PKG_O, UID_O, messagesFromB, true, false);
+
+ NotificationChannel messagesFromBUser10 =
+ new NotificationChannel("B person msgs", "messages from B", IMPORTANCE_DEFAULT);
+ messagesFromBUser10.setConversationId(messagesUser10.getId(), "different convo");
+ mHelper.createNotificationChannel(
+ PKG_O, UID_O + UserHandle.PER_USER_RANGE, messagesFromBUser10, true, false);
+
+
+ List<ConversationChannelWrapper> convos =
+ mHelper.getConversations(IntArray.wrap(new int[] {0}), false);
+
+ assertEquals(1, convos.size());
+ assertTrue(conversationWrapperContainsChannel(convos, messagesFromB));
+
+ convos =
+ mHelper.getConversations(IntArray.wrap(new int[] {0, UserHandle.getUserId(UID_O + UserHandle.PER_USER_RANGE)}), false);
+
+ assertEquals(2, convos.size());
+ assertTrue(conversationWrapperContainsChannel(convos, messagesFromB));
+ assertTrue(conversationWrapperContainsChannel(convos, messagesFromBUser10));
+ }
+
+ @Test
public void testGetConversations_notDemoted() {
String convoId = "convo";
NotificationChannel messages =
@@ -3358,7 +3398,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel2.setImportantConversation(true);
mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
- List<ConversationChannelWrapper> convos = mHelper.getConversations(false);
+ List<ConversationChannelWrapper> convos =
+ mHelper.getConversations(IntArray.wrap(new int[] {0}), false);
assertEquals(2, convos.size());
assertTrue(conversationWrapperContainsChannel(convos, channel));
@@ -3396,7 +3437,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel2.setConversationId(calls.getId(), convoId);
mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false);
- List<ConversationChannelWrapper> convos = mHelper.getConversations(true);
+ List<ConversationChannelWrapper> convos =
+ mHelper.getConversations(IntArray.wrap(new int[] {0}), true);
assertEquals(2, convos.size());
assertTrue(conversationWrapperContainsChannel(convos, channel));