DO NOT MERGE Allow the Car Setup Wizard appl to send CAR_INFORMATION notifications am: f9574845a6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13496867

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I0c72f632fc3cb890b468893d7d6d4cb7f12931d0
This commit is contained in:
Sandra Alfaro
2021-03-03 01:34:16 +00:00
committed by Automerger Merge Worker
2 changed files with 41 additions and 4 deletions

View File

@@ -5694,7 +5694,7 @@ public class NotificationManagerService extends SystemService {
+ " trying to post for invalid pkg " + pkg + " in user " + incomingUserId);
}
checkRestrictedCategories(notification);
checkRestrictedCategories(pkg, notification);
// Fix the notification as best we can.
try {
@@ -8541,7 +8541,7 @@ public class NotificationManagerService extends SystemService {
* Check if the notification is of a category type that is restricted to system use only,
* if so throw SecurityException
*/
private void checkRestrictedCategories(final Notification notification) {
private void checkRestrictedCategories(final String pkg, final Notification notification) {
try {
if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0)) {
return;
@@ -8551,10 +8551,24 @@ public class NotificationManagerService extends SystemService {
+ "restrictions check thus the check will be done anyway");
}
if (Notification.CATEGORY_CAR_EMERGENCY.equals(notification.category)
|| Notification.CATEGORY_CAR_WARNING.equals(notification.category)
|| Notification.CATEGORY_CAR_INFORMATION.equals(notification.category)) {
|| Notification.CATEGORY_CAR_WARNING.equals(notification.category)) {
checkCallerIsSystem();
}
if (Notification.CATEGORY_CAR_INFORMATION.equals(notification.category)) {
checkCallerIsSystemOrSUW(pkg);
}
}
private void checkCallerIsSystemOrSUW(final String pkg) {
final PackageManagerInternal pmi = LocalServices.getService(
PackageManagerInternal.class);
String suwPkg = pmi.getSetupWizardPackageName();
if (suwPkg != null && suwPkg.equals(pkg)) {
return;
}
checkCallerIsSystem();
}
@VisibleForTesting

View File

@@ -111,6 +111,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.ParceledListSlice;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutServiceInternal;
@@ -243,6 +244,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
Resources mResources;
@Mock
RankingHandler mRankingHandler;
@Mock
protected PackageManagerInternal mPackageManagerInternal;
private static final int MAX_POST_DELAY = 1000;
@@ -1186,6 +1189,26 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
assertEquals(0, mBinderService.getActiveNotifications(PKG).length);
}
@Test
public void testEnqueuedRestrictedNotifications_asSuwApp() throws Exception {
LocalServices.removeServiceForTest(PackageManagerInternal.class);
LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
when(mPackageManagerInternal.getSetupWizardPackageName()).thenReturn(PKG);
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0))
.thenReturn(true);
final StatusBarNotification sbn =
generateNotificationRecord(mTestNotificationChannel, 0, "", false).getSbn();
sbn.getNotification().category = Notification.CATEGORY_CAR_INFORMATION;
mBinderService.enqueueNotificationWithTag(PKG, PKG,
"testEnqueuedRestrictedNotifications_asSuwApp",
sbn.getId(), sbn.getNotification(), sbn.getUserId());
waitForIdle();
assertEquals(1, mBinderService.getActiveNotifications(PKG).length);
}
@Test
public void testBlockedNotifications_blockedByAssistant() throws Exception {
when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);