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

Commit 37ab1e8f authored by Julia Reynolds's avatar Julia Reynolds Committed by Presubmit Automerger Backend
Browse files

[automerge] Modify handling of notifs with invalid sounds 2p: 2210ff10

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

Bug: 227770797
Change-Id: I89ce20588533650971bb0d9349a0cb8c9c385df9
parents fb6b9075 2210ff10
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -1348,14 +1348,14 @@ public final class NotificationRecord {
    protected void calculateGrantableUris() {
        final Notification notification = getNotification();
        notification.visitUris((uri) -> {
            visitGrantableUri(uri, false);
            visitGrantableUri(uri, false, false);
        });

        if (notification.getChannelId() != null) {
            NotificationChannel channel = getChannel();
            if (channel != null) {
                visitGrantableUri(channel.getSound(), (channel.getUserLockedFields()
                        & NotificationChannel.USER_LOCKED_SOUND) != 0);
                        & NotificationChannel.USER_LOCKED_SOUND) != 0, true);
            }
        }
    }
@@ -1368,7 +1368,7 @@ public final class NotificationRecord {
     * {@link #mGrantableUris}. Otherwise, this will either log or throw
     * {@link SecurityException} depending on target SDK of enqueuing app.
     */
    private void visitGrantableUri(Uri uri, boolean userOverriddenUri) {
    private void visitGrantableUri(Uri uri, boolean userOverriddenUri, boolean isSound) {
        if (uri == null || !ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) return;

        // We can't grant Uri permissions from system
@@ -1389,10 +1389,16 @@ public final class NotificationRecord {
            mGrantableUris.add(uri);
        } catch (SecurityException e) {
            if (!userOverriddenUri) {
                if (isSound) {
                    mSound = Settings.System.DEFAULT_NOTIFICATION_URI;
                    Log.w(TAG, "Replacing " + uri + " from " + sourceUid + ": " + e.getMessage());
                } else {
                    if (mTargetSdkVersion >= Build.VERSION_CODES.P) {
                        throw e;
                    } else {
                    Log.w(TAG, "Ignoring " + uri + " from " + sourceUid + ": " + e.getMessage());
                        Log.w(TAG,
                                "Ignoring " + uri + " from " + sourceUid + ": " + e.getMessage());
                    }
                }
            }
        } finally {
+25 −2
Original line number Diff line number Diff line
@@ -816,8 +816,10 @@ public class NotificationRecordTest extends UiServiceTestCase {
        when(ugm.checkGrantUriPermission(anyInt(), eq(null), any(Uri.class),
                anyInt(), anyInt())).thenThrow(new SecurityException());

        Notification n = mock(Notification.class);
        when(n.getChannelId()).thenReturn(channel.getId());
        channel.setSound(null, null);
        Notification n = new Notification.Builder(mContext, channel.getId())
                .setSmallIcon(Icon.createWithContentUri(Uri.parse("content://something")))
                .build();
        StatusBarNotification sbn =
                new StatusBarNotification(PKG_P, PKG_P, id1, tag1, uid, uid, n, mUser, null, uid);
        NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
@@ -832,6 +834,27 @@ public class NotificationRecordTest extends UiServiceTestCase {
        }
    }

    @Test
    public void testCalculateGrantableUris_PappProvided_invalidSound() {
        IActivityManager am = mock(IActivityManager.class);
        UriGrantsManagerInternal ugm = mock(UriGrantsManagerInternal.class);
        when(ugm.checkGrantUriPermission(anyInt(), eq(null), any(Uri.class),
                anyInt(), anyInt())).thenThrow(new SecurityException());

        channel.setSound(Uri.parse("content://something"), mock(AudioAttributes.class));

        Notification n = mock(Notification.class);
        when(n.getChannelId()).thenReturn(channel.getId());
        StatusBarNotification sbn =
                new StatusBarNotification(PKG_P, PKG_P, id1, tag1, uid, uid, n, mUser, null, uid);
        NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
        record.mAm = am;
        record.mUgmInternal = ugm;

        record.calculateGrantableUris();
        assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, record.getSound());
    }

    @Test
    public void testCalculateGrantableUris_PuserOverridden() {
        IActivityManager am = mock(IActivityManager.class);