Merge "Check group channels for FGSes" into qt-qpr1-dev

This commit is contained in:
TreeHugger Robot
2022-01-12 16:37:07 +00:00
committed by Android (Google) Code Review
2 changed files with 58 additions and 3 deletions

View File

@@ -2054,7 +2054,7 @@ public class NotificationManagerService extends SystemService {
} }
} }
private void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group, void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group,
boolean fromApp, boolean fromListener) { boolean fromApp, boolean fromListener) {
Preconditions.checkNotNull(group); Preconditions.checkNotNull(group);
Preconditions.checkNotNull(pkg); Preconditions.checkNotNull(pkg);
@@ -2835,7 +2835,8 @@ public class NotificationManagerService extends SystemService {
final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid();
NotificationChannelGroup groupToDelete = NotificationChannelGroup groupToDelete =
mPreferencesHelper.getNotificationChannelGroup(groupId, pkg, callingUid); mPreferencesHelper.getNotificationChannelGroupWithChannels(
pkg, callingUid, groupId, false);
if (groupToDelete != null) { if (groupToDelete != null) {
// Preflight for allowability // Preflight for allowability
final int userId = UserHandle.getUserId(callingUid); final int userId = UserHandle.getUserId(callingUid);

View File

@@ -150,6 +150,8 @@ import com.android.server.notification.NotificationManagerService.NotificationLi
import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.uri.UriGrantsManagerInternal;
import com.android.server.wm.WindowManagerInternal; import com.android.server.wm.WindowManagerInternal;
import com.google.common.collect.ImmutableList;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -168,6 +170,8 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.function.Consumer; import java.util.function.Consumer;
@SmallTest @SmallTest
@@ -1817,7 +1821,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations);
NotificationChannelGroup ncg = new NotificationChannelGroup("a", "b/c"); NotificationChannelGroup ncg = new NotificationChannelGroup("a", "b/c");
mService.setPreferencesHelper(mPreferencesHelper); mService.setPreferencesHelper(mPreferencesHelper);
when(mPreferencesHelper.getNotificationChannelGroup(eq(ncg.getId()), eq(PKG), anyInt())) when(mPreferencesHelper.getNotificationChannelGroupWithChannels(
eq(PKG), anyInt(), eq(ncg.getId()), anyBoolean()))
.thenReturn(ncg); .thenReturn(ncg);
reset(mListeners); reset(mListeners);
mBinderService.deleteNotificationChannelGroup(PKG, ncg.getId()); mBinderService.deleteNotificationChannelGroup(PKG, ncg.getId());
@@ -1826,6 +1831,55 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED)); eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED));
} }
@Test
public void testDeleteChannelGroupChecksForFgses() throws Exception {
List<String> associations = new ArrayList<>();
associations.add("a");
when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations);
CountDownLatch latch = new CountDownLatch(2);
mService.createNotificationChannelGroup(
PKG, mUid, new NotificationChannelGroup("group", "group"), true, false);
new Thread(() -> {
NotificationChannel notificationChannel = new NotificationChannel("id", "id",
NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setGroup("group");
ParceledListSlice<NotificationChannel> pls =
new ParceledListSlice(ImmutableList.of(notificationChannel));
try {
mBinderService.createNotificationChannelsForPackage(PKG, mUid, pls);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
latch.countDown();
}).start();
new Thread(() -> {
try {
synchronized (this) {
wait(5000);
}
mService.createNotificationChannelGroup(PKG, mUid,
new NotificationChannelGroup("new", "new group"), true, false);
NotificationChannel notificationChannel =
new NotificationChannel("id", "id", NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setGroup("new");
ParceledListSlice<NotificationChannel> pls =
new ParceledListSlice(ImmutableList.of(notificationChannel));
try {
mBinderService.createNotificationChannelsForPackage(PKG, mUid, pls);
mBinderService.deleteNotificationChannelGroup(PKG, "group");
} catch (RemoteException e) {
throw new RuntimeException(e);
}
} catch (Exception e) {
e.printStackTrace();
}
latch.countDown();
}).start();
latch.await();
verify(mAmi).hasForegroundServiceNotification(anyString(), anyInt(), anyString());
}
@Test @Test
public void testUpdateNotificationChannelFromPrivilegedListener_success() throws Exception { public void testUpdateNotificationChannelFromPrivilegedListener_success() throws Exception {
mService.setPreferencesHelper(mPreferencesHelper); mService.setPreferencesHelper(mPreferencesHelper);