DO NOT MERGE Allow the Car Setup Wizard appl to send CAR_INFORMATION notifications
Bug: 171739119 Test: atest NotificationManagerServiceTest NotificationManagerTest Change-Id: I3a7eb3197e3bc1d239b87c0f50a7db3e8b17d63b
This commit is contained in:
@@ -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 {
|
||||
@@ -8537,7 +8537,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;
|
||||
@@ -8547,10 +8547,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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user