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

Commit 9d1e05c6 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Ensure package context used by System UI has a valid userId.

Fixes: 189924598
Bug: 194356170
Test: atest SystemUITests
Test: atest android.service.notification.StatusBarNotificationTest#testGetPackageContext_worksWithUserAll
Change-Id: Ic43a0301cb62ab27e276c2938012a27c3a9a6fff
parent c20398b8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -436,7 +436,7 @@ public class StatusBarNotification implements Parcelable {
            try {
                ApplicationInfo ai = context.getPackageManager()
                        .getApplicationInfoAsUser(pkg, PackageManager.MATCH_UNINSTALLED_PACKAGES,
                                getUserId());
                                getNormalizedUserId());
                mContext = context.createApplicationContext(ai,
                        Context.CONTEXT_RESTRICTED);
            } catch (PackageManager.NameNotFoundException e) {
+18 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.service.notification;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNotSame;
import static junit.framework.Assert.assertNull;

import static org.junit.Assert.assertFalse;
@@ -51,6 +53,7 @@ public class StatusBarNotificationTest {

    private final Context mMockContext = mock(Context.class);
    @Mock
    private Context mRealContext;
    private PackageManager mPm;

    private static final String PKG = "com.example.o";
@@ -75,6 +78,8 @@ public class StatusBarNotificationTest {
                InstrumentationRegistry.getContext().getResources());
        when(mMockContext.getPackageManager()).thenReturn(mPm);
        when(mMockContext.getApplicationInfo()).thenReturn(new ApplicationInfo());

        mRealContext = InstrumentationRegistry.getContext();
    }

    @Test
@@ -199,6 +204,19 @@ public class StatusBarNotificationTest {

    }

    @Test
    public void testGetPackageContext_worksWithUserAll() {
        String pkg = "com.android.systemui";
        int uid = 1000;
        Notification notification = getNotificationBuilder(GROUP_ID_1, CHANNEL_ID).build();
        StatusBarNotification sbn = new StatusBarNotification(
                pkg, pkg, ID, TAG, uid, uid, notification, UserHandle.ALL, null, UID);
        Context resultContext = sbn.getPackageContext(mRealContext);
        assertNotNull(resultContext);
        assertNotSame(mRealContext, resultContext);
        assertEquals(pkg, resultContext.getPackageName());
    }

    private StatusBarNotification getNotification(String pkg, String group, String channelId) {
        return getNotification(pkg, getNotificationBuilder(group, channelId));
    }