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

Commit 7af51c56 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Update clearData flow for notification settings

Some settings need to be maintained (like whether the app
is the default dialer), so don't just wipe away all of the settings.

Test: atest; clear data on default dialer and ensure missed call
notification is still in priority bucket
Fixes: 127855529

Change-Id: I9e0c2fa1ceb371fe98a4f25f3573f043e9e2c1c9
parent fc0f0ea6
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -2863,8 +2863,7 @@ public class NotificationManagerService extends SystemService {

            // Reset notification preferences
            if (!fromApp) {
                mPreferencesHelper.onPackagesChanged(
                        true, UserHandle.getCallingUserId(), packages, uids);
                mPreferencesHelper.clearData(packageName, uid);
            }

            handleSavePolicyFile();
+17 −0
Original line number Diff line number Diff line
@@ -1717,6 +1717,23 @@ public class PreferencesHelper implements RankingConfig {
        }
    }

    public void clearData(String pkg, int uid) {
        synchronized (mPackagePreferences) {
            PackagePreferences p = getPackagePreferencesLocked(pkg, uid);
            if (p != null) {
                p.channels = new ArrayMap<>();
                p.groups = new ArrayMap<>();
                p.delegate = null;
                p.lockedAppFields = DEFAULT_LOCKED_APP_FIELDS;
                p.allowBubble = DEFAULT_ALLOW_BUBBLE;
                p.importance = DEFAULT_IMPORTANCE;
                p.priority = DEFAULT_PRIORITY;
                p.visibility = DEFAULT_VISIBILITY;
                p.showBadge = DEFAULT_SHOW_BADGE;
            }
        }
    }

    private LogMaker getChannelLog(NotificationChannel channel, String pkg) {
        return new LogMaker(
                com.android.internal.logging.nano.MetricsProto.MetricsEvent
+32 −0
Original line number Diff line number Diff line
@@ -1643,6 +1643,38 @@ public class PreferencesHelperTest extends UiServiceTestCase {
                PKG_O, UID_O, NotificationChannel.DEFAULT_CHANNEL_ID, false));
    }

    @Test
    public void testClearData() {
        ArraySet<String> pkg = new ArraySet<>();
        pkg.add(PKG_O);
        mHelper.createNotificationChannel(PKG_O, UID_O, getChannel(), true, false);
        mHelper.createNotificationChannelGroup(
                PKG_O, UID_O, new NotificationChannelGroup("1", "bye"), true);
        mHelper.lockChannelsForOEM(pkg.toArray(new String[]{}));
        mHelper.updateDefaultApps(UserHandle.getUserId(UID_O), null, pkg);
        mHelper.setNotificationDelegate(PKG_O, UID_O, "", 1);
        mHelper.setImportance(PKG_O, UID_O, IMPORTANCE_NONE);
        mHelper.setBubblesAllowed(PKG_O, UID_O, false);
        mHelper.setShowBadge(PKG_O, UID_O, false);
        mHelper.setAppImportanceLocked(PKG_O, UID_O);

        mHelper.clearData(PKG_O, UID_O);

        assertEquals(IMPORTANCE_UNSPECIFIED, mHelper.getImportance(PKG_O, UID_O));
        assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O));
        assertTrue(mHelper.canShowBadge(PKG_O, UID_O));
        assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O));
        assertEquals(0, mHelper.getAppLockedFields(PKG_O, UID_O));
        assertEquals(0, mHelper.getNotificationChannels(PKG_O, UID_O, true).getList().size());
        assertEquals(0, mHelper.getNotificationChannelGroups(PKG_O, UID_O).size());

        NotificationChannel channel = getChannel();
        mHelper.createNotificationChannel(PKG_O, UID_O, channel, true, false);

        assertTrue(channel.isImportanceLockedByCriticalDeviceFunction());
        assertTrue(channel.isImportanceLockedByOEM());
    }

    @Test
    public void testRecordDefaults() throws Exception {
        assertEquals(NotificationManager.IMPORTANCE_UNSPECIFIED, mHelper.getImportance(PKG_N_MR1,