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

Commit 16e6eced authored by Antony Sargent's avatar Antony Sargent
Browse files

Fix app filter breakage caused by ag/1900403

Bug: 35726115
Test: manual, run existing robo tests by make RunSettingsRoboTests

In ag/1900403 I renumbered the int constants in ManageApplications.java
to remove a gap in the sequence without realizing that the arrays
containing strings/filters based on these constants still contained
entries for the constant whose value was removed.

In this CL I've fixed that and reorganized the initialization code slightly
to make it easier to keep things in sync going forward.

Change-Id: I6d2db6499fb7eb080570bc757bde497fcd39fead
parent 37e7c0eb
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -6903,8 +6903,6 @@
    <string name="filter_work_apps">Work</string>
    <!-- Label for showing apps with blocked notifications in list [CHAR LIMIT=30] -->
    <string name="filter_notif_blocked_apps">Blocked</string>
    <!-- Label for showing apps with domain URLs (data URI with http or https) in list [CHAR LIMIT=30] -->
    <string name="filter_with_domain_urls_apps">With domain URLs</string>
    <!-- Title for advanced application management settings [CHAR LIMIT=30] -->
    <string name="advanced_apps">Advanced</string>
+66 −38
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.applications;

import android.annotation.IdRes;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@@ -142,49 +143,76 @@ public class ManageApplications extends InstrumentedPreferenceFragment
    public static final int FILTER_APPS_WITH_OVERLAY = 10;
    public static final int FILTER_APPS_WRITE_SETTINGS = 11;
    public static final int FILTER_APPS_INSTALL_SOURCES = 12;
    public static final int FILTER_APPS_COUNT = 13;  // This should always be the last entry

    // Mapping to string labels for the FILTER_APPS_* constants above.
    public static final @IdRes int[] FILTER_LABELS = new int[FILTER_APPS_COUNT];

    // Mapping to filters for the FILTER_APPS_* constants above.
    public static final AppFilter[] FILTERS = new AppFilter[FILTER_APPS_COUNT];

    static {
        // High power whitelist, on
        FILTER_LABELS[FILTER_APPS_POWER_WHITELIST] = R.string.high_power_filter_on;
        FILTERS[FILTER_APPS_POWER_WHITELIST] = new CompoundFilter(
                AppStatePowerBridge.FILTER_POWER_WHITELISTED,
                ApplicationsState.FILTER_ALL_ENABLED);

        // Without disabled until used
        FILTER_LABELS[FILTER_APPS_POWER_WHITELIST_ALL] = R.string.filter_all_apps;
        FILTERS[FILTER_APPS_POWER_WHITELIST_ALL] = new CompoundFilter(
                ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED,
                ApplicationsState.FILTER_ALL_ENABLED);

        // All apps
        FILTER_LABELS[FILTER_APPS_ALL] = R.string.filter_all_apps;
        FILTERS[FILTER_APPS_ALL] = ApplicationsState.FILTER_EVERYTHING;

        // Enabled
        FILTER_LABELS[FILTER_APPS_ENABLED] = R.string.filter_enabled_apps;
        FILTERS[FILTER_APPS_ENABLED] = ApplicationsState.FILTER_ALL_ENABLED;

        // Disabled
        FILTER_LABELS[FILTER_APPS_DISABLED] = R.string.filter_apps_disabled;
        FILTERS[FILTER_APPS_DISABLED] = ApplicationsState.FILTER_DISABLED;

        // Instant
        FILTER_LABELS[FILTER_APPS_INSTANT] = R.string.filter_instant_apps;
        FILTERS[FILTER_APPS_INSTANT] = ApplicationsState.FILTER_INSTANT;

        // Blocked Notifications
        FILTER_LABELS[FILTER_APPS_BLOCKED] = R.string.filter_notif_blocked_apps;
        FILTERS[FILTER_APPS_BLOCKED] = AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED;

        // Personal
        FILTER_LABELS[FILTER_APPS_PERSONAL] = R.string.filter_personal_apps;
        FILTERS[FILTER_APPS_PERSONAL] = ApplicationsState.FILTER_PERSONAL;

        // Work
        FILTER_LABELS[FILTER_APPS_WORK] = R.string.filter_work_apps;
        FILTERS[FILTER_APPS_WORK] = ApplicationsState.FILTER_WORK;

        // Usage access screen, never displayed.
        FILTER_LABELS[FILTER_APPS_USAGE_ACCESS] = R.string.filter_all_apps;
        FILTERS[FILTER_APPS_USAGE_ACCESS] = AppStateUsageBridge.FILTER_APP_USAGE;

        // Apps that can draw overlays
        FILTER_LABELS[FILTER_APPS_WITH_OVERLAY] = R.string.filter_overlay_apps;
        FILTERS[FILTER_APPS_WITH_OVERLAY] = AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW;

        // Apps that can write system settings
        FILTER_LABELS[FILTER_APPS_WRITE_SETTINGS] = R.string.filter_write_settings_apps;
        FILTERS[FILTER_APPS_WRITE_SETTINGS] = AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS;

        // Apps that are trusted sources of apks
        FILTER_LABELS[FILTER_APPS_INSTALL_SOURCES] = R.string.filter_install_sources_apps;
        FILTERS[FILTER_APPS_INSTALL_SOURCES] = AppStateInstallAppsBridge.FILTER_APP_SOURCES;
    }

    // Storage types. Used to determine what the extra item in the list of preferences is.
    public static final int STORAGE_TYPE_DEFAULT = 0;
    public static final int STORAGE_TYPE_MUSIC = 1;

    // This is the string labels for the filter modes above, the order must be kept in sync.
    public static final int[] FILTER_LABELS = new int[]{
            R.string.high_power_filter_on, // High power whitelist, on
            R.string.filter_all_apps,      // Without disabled until used
            R.string.filter_all_apps,      // All apps
            R.string.filter_enabled_apps,  // Enabled
            R.string.filter_apps_disabled, // Disabled
            R.string.filter_instant_apps,  // Instant apps
            R.string.filter_notif_blocked_apps,   // Blocked Notifications
            R.string.filter_personal_apps, // Personal
            R.string.filter_work_apps,     // Work
            R.string.filter_with_domain_urls_apps,     // Domain URLs
            R.string.filter_all_apps,      // Usage access screen, never displayed
            R.string.filter_overlay_apps,   // Apps with overlay permission
            R.string.filter_write_settings_apps,   // Apps that can write system settings
            R.string.filter_install_sources_apps, // Apps that are trusted sources of apks
    };
    // This is the actual mapping to filters from FILTER_ constants above, the order must
    // be kept in sync.
    public static final AppFilter[] FILTERS = new AppFilter[]{
            new CompoundFilter(AppStatePowerBridge.FILTER_POWER_WHITELISTED,
                    ApplicationsState.FILTER_ALL_ENABLED),     // High power whitelist, on
            new CompoundFilter(ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED,
                    ApplicationsState.FILTER_ALL_ENABLED),     // Without disabled until used
            ApplicationsState.FILTER_EVERYTHING,  // All apps
            ApplicationsState.FILTER_ALL_ENABLED, // Enabled
            ApplicationsState.FILTER_DISABLED,    // Disabled
            ApplicationsState.FILTER_INSTANT,      // Instant
            AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED,   // Blocked Notifications
            ApplicationsState.FILTER_PERSONAL,    // Personal
            ApplicationsState.FILTER_WORK,        // Work
            ApplicationsState.FILTER_WITH_DOMAIN_URLS,   // Apps with Domain URLs
            AppStateUsageBridge.FILTER_APP_USAGE, // Apps with Domain URLs
            AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW,   // Apps that can draw overlays
            AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS,  // Apps that can write system settings
            AppStateInstallAppsBridge.FILTER_APP_SOURCES,
    };

    // sort order
    private int mSortOrder = R.id.sort_order_alpha;