Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b1706a7 authored by Sandra Alfaro's avatar Sandra Alfaro Committed by Automerger Merge Worker
Browse files

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

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I0c72f632fc3cb890b468893d7d6d4cb7f12931d0
parents e364276b f9574845
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -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
+23 −0
Original line number Diff line number Diff line
@@ -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);