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

Commit e5791f3c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent non-blockable app from being blocked"

parents 29aaf624 7217c442
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -78,6 +78,12 @@ public class NotificationBackend {
        return row;
    }

    public boolean isBlockable(Context context, ApplicationInfo info) {
        final boolean blocked = getNotificationsBanned(info.packageName, info.uid);
        final boolean systemApp = isSystemApp(context, info);
        return !systemApp || (systemApp && blocked);
    }

    public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) {
        final AppRow row = loadAppRow(context, pm, app.applicationInfo);
        recordCanBeBlocked(context, pm, app, row);
+1 −15
Original line number Diff line number Diff line
@@ -82,17 +82,6 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC
    private Preference mSeeAllPref;
    private Preference mDivider;

    static {
        SKIP_SYSTEM_PACKAGES.addAll(Arrays.asList(
                "android",
                "com.android.phone",
                "com.android.settings",
                "com.android.systemui",
                "com.android.providers.calendar",
                "com.android.providers.media"
        ));
    }

    public RecentNotifyingAppsPreferenceController(Context context, NotificationBackend backend,
            Application app, Fragment host) {
        this(context, backend, app == null ? null : ApplicationsState.getInstance(app), host);
@@ -226,6 +215,7 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC
                    .setSourceMetricsCategory(
                            MetricsProto.MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS)
                    .toIntent());
            pref.setEnabled(mNotificationBackend.isBlockable(mContext, appEntry.info));
            pref.setOnPreferenceChangeListener((preference, newValue) -> {
                boolean blocked = !(Boolean) newValue;
                mNotificationBackend.setNotificationsEnabledForPackage(
@@ -272,10 +262,6 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC
     * Whether or not the app should be included in recent list.
     */
    private boolean shouldIncludePkgInRecents(String pkgName) {
         if (SKIP_SYSTEM_PACKAGES.contains(pkgName)) {
            Log.d(TAG, "System package, skipping " + pkgName);
            return false;
        }
        final Intent launchIntent = new Intent().addCategory(Intent.CATEGORY_LAUNCHER)
                .setPackage(pkgName);

+2 −32
Original line number Diff line number Diff line
@@ -189,9 +189,8 @@ public class RecentNotifyingAppsPreferenceControllerTest {
        mController.displayPreference(mScreen);

        verify(mCategory).setTitle(R.string.recent_notifications);
        // Only add app1. app2 is skipped because of the package name, app3 skipped because
        // it's invalid app.
        verify(mCategory, times(1)).addPreference(any(Preference.class));
        // Only add app1 & app2. app3 skipped because it's invalid app.
        verify(mCategory, times(2)).addPreference(any(Preference.class));

        verify(mSeeAllPref).setSummary(null);
        verify(mSeeAllPref).setIcon(R.drawable.ic_chevron_right_24dp);
@@ -246,35 +245,6 @@ public class RecentNotifyingAppsPreferenceControllerTest {
        assertThat(prefs.get(0).getKey()).isEqualTo(app2.getPackage());
    }

    @Test
    public void display_hasRecentButNoneDisplayable_showAppInfo() {
        final List<NotifyingApp> apps = new ArrayList<>();
        final NotifyingApp app1 = new NotifyingApp()
                .setPackage("com.android.phone")
                .setLastNotified(System.currentTimeMillis());
        final NotifyingApp app2 = new NotifyingApp()
                .setPackage("com.android.settings")
                .setLastNotified(System.currentTimeMillis());
        apps.add(app1);
        apps.add(app2);

        // app1, app2 are not displayable
        when(mAppState.getEntry(app1.getPackage(), UserHandle.myUserId()))
                .thenReturn(mock(ApplicationsState.AppEntry.class));
        when(mAppState.getEntry(app2.getPackage(), UserHandle.myUserId()))
                .thenReturn(mock(ApplicationsState.AppEntry.class));
        when(mPackageManager.resolveActivity(any(Intent.class), anyInt())).thenReturn(
                new ResolveInfo());
        when(mBackend.getRecentApps()).thenReturn(apps);

        mController.displayPreference(mScreen);

        verify(mCategory, never()).addPreference(any(Preference.class));
        verify(mCategory).setTitle(null);
        verify(mSeeAllPref).setTitle(R.string.notifications_title);
        verify(mSeeAllPref).setIcon(null);
    }

    @Test
    public void display_showRecents_formatSummary() {
        final List<NotifyingApp> apps = new ArrayList<>();