Filter conversation list by current users

Test: atest, verification in Settings multiuser
Fixes: 174582049
Change-Id: I31bfc8d1045776884676d397be03298ebe2190c3
This commit is contained in:
Julia Reynolds
2020-12-03 09:40:46 -05:00
parent 5cf119de88
commit 0e683cd154
3 changed files with 76 additions and 29 deletions

View File

@@ -3583,8 +3583,9 @@ public class NotificationManagerService extends SystemService {
public ParceledListSlice<ConversationChannelWrapper> getConversations( public ParceledListSlice<ConversationChannelWrapper> getConversations(
boolean onlyImportant) { boolean onlyImportant) {
enforceSystemOrSystemUI("getConversations"); enforceSystemOrSystemUI("getConversations");
IntArray userIds = mUserProfiles.getCurrentProfileIds();
ArrayList<ConversationChannelWrapper> conversations = ArrayList<ConversationChannelWrapper> conversations =
mPreferencesHelper.getConversations(onlyImportant); mPreferencesHelper.getConversations(userIds, onlyImportant);
for (ConversationChannelWrapper conversation : conversations) { for (ConversationChannelWrapper conversation : conversations) {
if (mShortcutHelper == null) { if (mShortcutHelper == null) {
conversation.setShortcutInfo(null); conversation.setShortcutInfo(null);

View File

@@ -52,6 +52,7 @@ import android.service.notification.RankingHelperProto;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.IntArray;
import android.util.Pair; import android.util.Pair;
import android.util.Slog; import android.util.Slog;
import android.util.SparseBooleanArray; import android.util.SparseBooleanArray;
@@ -1385,18 +1386,20 @@ public class PreferencesHelper implements RankingConfig {
return null; return null;
} }
public ArrayList<ConversationChannelWrapper> getConversations(boolean onlyImportant) { public ArrayList<ConversationChannelWrapper> getConversations(IntArray userIds,
boolean onlyImportant) {
synchronized (mPackagePreferences) { synchronized (mPackagePreferences) {
ArrayList<ConversationChannelWrapper> conversations = new ArrayList<>(); ArrayList<ConversationChannelWrapper> conversations = new ArrayList<>();
for (PackagePreferences p : mPackagePreferences.values()) { for (PackagePreferences p : mPackagePreferences.values()) {
if (userIds.binarySearch(UserHandle.getUserId(p.uid)) >= 0) {
int N = p.channels.size(); int N = p.channels.size();
for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) {
final NotificationChannel nc = p.channels.valueAt(i); final NotificationChannel nc = p.channels.valueAt(i);
if (!TextUtils.isEmpty(nc.getConversationId()) && !nc.isDeleted() if (!TextUtils.isEmpty(nc.getConversationId()) && !nc.isDeleted()
&& !nc.isDemoted() && !nc.isDemoted()
&& (nc.isImportantConversation() || !onlyImportant)) { && (nc.isImportantConversation() || !onlyImportant)) {
ConversationChannelWrapper conversation = new ConversationChannelWrapper(); ConversationChannelWrapper conversation =
new ConversationChannelWrapper();
conversation.setPkg(p.pkg); conversation.setPkg(p.pkg);
conversation.setUid(p.uid); conversation.setUid(p.uid);
conversation.setNotificationChannel(nc); conversation.setNotificationChannel(nc);
@@ -1419,6 +1422,7 @@ public class PreferencesHelper implements RankingConfig {
} }
} }
} }
}
return conversations; return conversations;
} }

View File

@@ -97,6 +97,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import android.testing.TestableContentResolver; import android.testing.TestableContentResolver;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.IntArray;
import android.util.Pair; import android.util.Pair;
import android.util.StatsEvent; import android.util.StatsEvent;
import android.util.Xml; import android.util.Xml;
@@ -3318,7 +3319,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel2.setImportantConversation(true); channel2.setImportantConversation(true);
mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false); 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()); assertEquals(3, convos.size());
assertTrue(conversationWrapperContainsChannel(convos, channel)); assertTrue(conversationWrapperContainsChannel(convos, channel));
@@ -3326,6 +3328,44 @@ public class PreferencesHelperTest extends UiServiceTestCase {
assertTrue(conversationWrapperContainsChannel(convos, channel2)); assertTrue(conversationWrapperContainsChannel(convos, channel2));
} }
@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 @Test
public void testGetConversations_notDemoted() { public void testGetConversations_notDemoted() {
String convoId = "convo"; String convoId = "convo";
@@ -3356,7 +3396,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel2.setImportantConversation(true); channel2.setImportantConversation(true);
mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false); 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()); assertEquals(2, convos.size());
assertTrue(conversationWrapperContainsChannel(convos, channel)); assertTrue(conversationWrapperContainsChannel(convos, channel));
@@ -3394,7 +3435,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel2.setConversationId(calls.getId(), convoId); channel2.setConversationId(calls.getId(), convoId);
mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false); 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()); assertEquals(2, convos.size());
assertTrue(conversationWrapperContainsChannel(convos, channel)); assertTrue(conversationWrapperContainsChannel(convos, channel));