1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.applications.manageapplications; 18 19 import androidx.annotation.IntDef; 20 21 import com.android.settings.R; 22 import com.android.settings.applications.AppStateAlarmsAndRemindersBridge; 23 import com.android.settings.applications.AppStateInstallAppsBridge; 24 import com.android.settings.applications.AppStateManageExternalStorageBridge; 25 import com.android.settings.applications.AppStateMediaManagementAppsBridge; 26 import com.android.settings.applications.AppStateNotificationBridge; 27 import com.android.settings.applications.AppStateOverlayBridge; 28 import com.android.settings.applications.AppStatePowerBridge; 29 import com.android.settings.applications.AppStateUsageBridge; 30 import com.android.settings.applications.AppStateWriteSettingsBridge; 31 import com.android.settings.wifi.AppStateChangeWifiStateBridge; 32 import com.android.settingslib.applications.ApplicationsState; 33 34 /** 35 * A registry and helper class that manages all {@link AppFilterItem}s for ManageApplications UI. 36 */ 37 public class AppFilterRegistry { 38 39 @IntDef(value = { 40 FILTER_APPS_POWER_ALLOWLIST, 41 FILTER_APPS_POWER_ALLOWLIST_ALL, 42 FILTER_APPS_ALL, 43 FILTER_APPS_ENABLED, 44 FILTER_APPS_INSTANT, 45 FILTER_APPS_DISABLED, 46 FILTER_APPS_RECENT, 47 FILTER_APPS_FREQUENT, 48 FILTER_APPS_PERSONAL, 49 FILTER_APPS_WORK, 50 FILTER_APPS_USAGE_ACCESS, 51 FILTER_APPS_WITH_OVERLAY, 52 FILTER_APPS_WRITE_SETTINGS, 53 FILTER_APPS_INSTALL_SOURCES, 54 FILTER_APPS_BLOCKED, 55 FILTER_ALARMS_AND_REMINDERS, 56 FILTER_APPS_MEDIA_MANAGEMENT, 57 }) 58 @interface FilterType { 59 } 60 61 // Filter options used for displayed list of applications 62 // Filters will appear sorted based on their value defined here. 63 public static final int FILTER_APPS_POWER_ALLOWLIST = 0; 64 public static final int FILTER_APPS_POWER_ALLOWLIST_ALL = 1; 65 public static final int FILTER_APPS_RECENT = 2; 66 public static final int FILTER_APPS_FREQUENT = 3; 67 public static final int FILTER_APPS_ALL = 4; 68 public static final int FILTER_APPS_ENABLED = 5; 69 public static final int FILTER_APPS_INSTANT = 6; 70 public static final int FILTER_APPS_DISABLED = 7; 71 public static final int FILTER_APPS_PERSONAL = 8; 72 public static final int FILTER_APPS_WORK = 9; 73 public static final int FILTER_APPS_USAGE_ACCESS = 10; 74 public static final int FILTER_APPS_WITH_OVERLAY = 11; 75 public static final int FILTER_APPS_WRITE_SETTINGS = 12; 76 public static final int FILTER_APPS_INSTALL_SOURCES = 13; 77 public static final int FILTER_APP_CAN_CHANGE_WIFI_STATE = 15; 78 public static final int FILTER_APPS_BLOCKED = 16; 79 public static final int FILTER_MANAGE_EXTERNAL_STORAGE = 17; 80 public static final int FILTER_ALARMS_AND_REMINDERS = 18; 81 public static final int FILTER_APPS_MEDIA_MANAGEMENT = 19; 82 // Next id: 20. If you add an entry here, length of mFilters should be updated 83 84 private static AppFilterRegistry sRegistry; 85 86 private final AppFilterItem[] mFilters; 87 AppFilterRegistry()88 private AppFilterRegistry() { 89 mFilters = new AppFilterItem[20]; 90 91 // High power allowlist, on 92 mFilters[FILTER_APPS_POWER_ALLOWLIST] = new AppFilterItem( 93 new ApplicationsState.CompoundFilter( 94 AppStatePowerBridge.FILTER_POWER_ALLOWLISTED, 95 ApplicationsState.FILTER_ALL_ENABLED), 96 FILTER_APPS_POWER_ALLOWLIST, 97 R.string.high_power_filter_on); 98 99 // Without disabled until used 100 mFilters[FILTER_APPS_POWER_ALLOWLIST_ALL] = new AppFilterItem( 101 new ApplicationsState.CompoundFilter( 102 ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED, 103 ApplicationsState.FILTER_ALL_ENABLED), 104 FILTER_APPS_POWER_ALLOWLIST_ALL, 105 R.string.filter_all_apps); 106 107 // All apps 108 mFilters[FILTER_APPS_ALL] = new AppFilterItem( 109 ApplicationsState.FILTER_EVERYTHING, 110 FILTER_APPS_ALL, 111 R.string.filter_all_apps); 112 113 // Enabled 114 mFilters[FILTER_APPS_ENABLED] = new AppFilterItem( 115 ApplicationsState.FILTER_ALL_ENABLED, 116 FILTER_APPS_ENABLED, 117 R.string.filter_enabled_apps); 118 119 // Disabled 120 mFilters[FILTER_APPS_DISABLED] = new AppFilterItem( 121 ApplicationsState.FILTER_DISABLED, 122 FILTER_APPS_DISABLED, 123 R.string.filter_apps_disabled); 124 125 // Instant 126 mFilters[FILTER_APPS_INSTANT] = new AppFilterItem( 127 ApplicationsState.FILTER_INSTANT, 128 FILTER_APPS_INSTANT, 129 R.string.filter_instant_apps); 130 131 // Recent Notifications 132 mFilters[FILTER_APPS_RECENT] = new AppFilterItem( 133 AppStateNotificationBridge.FILTER_APP_NOTIFICATION_RECENCY, 134 FILTER_APPS_RECENT, 135 R.string.sort_order_recent_notification); 136 137 // Frequent Notifications 138 mFilters[FILTER_APPS_FREQUENT] = new AppFilterItem( 139 AppStateNotificationBridge.FILTER_APP_NOTIFICATION_FREQUENCY, 140 FILTER_APPS_FREQUENT, 141 R.string.sort_order_frequent_notification); 142 143 // Personal 144 mFilters[FILTER_APPS_PERSONAL] = new AppFilterItem( 145 ApplicationsState.FILTER_PERSONAL, 146 FILTER_APPS_PERSONAL, 147 R.string.category_personal); 148 149 // Work 150 mFilters[FILTER_APPS_WORK] = new AppFilterItem( 151 ApplicationsState.FILTER_WORK, 152 FILTER_APPS_WORK, 153 R.string.category_work); 154 155 // Usage access screen, never displayed. 156 mFilters[FILTER_APPS_USAGE_ACCESS] = new AppFilterItem( 157 AppStateUsageBridge.FILTER_APP_USAGE, 158 FILTER_APPS_USAGE_ACCESS, 159 R.string.filter_all_apps); 160 161 // Apps that can draw overlays 162 mFilters[FILTER_APPS_WITH_OVERLAY] = new AppFilterItem( 163 AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW, 164 FILTER_APPS_WITH_OVERLAY, 165 R.string.filter_overlay_apps); 166 167 // Apps that can write system settings 168 mFilters[FILTER_APPS_WRITE_SETTINGS] = new AppFilterItem( 169 AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS, 170 FILTER_APPS_WRITE_SETTINGS, 171 R.string.filter_write_settings_apps); 172 173 // Apps that are trusted sources of apks 174 mFilters[FILTER_APPS_INSTALL_SOURCES] = new AppFilterItem( 175 AppStateInstallAppsBridge.FILTER_APP_SOURCES, 176 FILTER_APPS_INSTALL_SOURCES, 177 R.string.filter_install_sources_apps); 178 179 mFilters[FILTER_APP_CAN_CHANGE_WIFI_STATE] = new AppFilterItem( 180 AppStateChangeWifiStateBridge.FILTER_CHANGE_WIFI_STATE, 181 FILTER_APP_CAN_CHANGE_WIFI_STATE, 182 R.string.filter_write_settings_apps); 183 184 // Blocked Notifications 185 mFilters[FILTER_APPS_BLOCKED] = new AppFilterItem( 186 AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, 187 FILTER_APPS_BLOCKED, 188 R.string.filter_notif_blocked_apps); 189 190 mFilters[FILTER_MANAGE_EXTERNAL_STORAGE] = new AppFilterItem( 191 AppStateManageExternalStorageBridge.FILTER_MANAGE_EXTERNAL_STORAGE, 192 FILTER_MANAGE_EXTERNAL_STORAGE, 193 R.string.filter_manage_external_storage); 194 195 // Apps that can schedule alarms and reminders 196 mFilters[FILTER_ALARMS_AND_REMINDERS] = new AppFilterItem( 197 AppStateAlarmsAndRemindersBridge.FILTER_CLOCK_APPS, 198 FILTER_ALARMS_AND_REMINDERS, 199 R.string.alarms_and_reminders_title); 200 201 // Apps that can manage media files 202 mFilters[FILTER_APPS_MEDIA_MANAGEMENT] = new AppFilterItem( 203 AppStateMediaManagementAppsBridge.FILTER_MEDIA_MANAGEMENT_APPS, 204 FILTER_APPS_MEDIA_MANAGEMENT, 205 R.string.media_management_apps_title); 206 } 207 getInstance()208 public static AppFilterRegistry getInstance() { 209 if (sRegistry == null) { 210 sRegistry = new AppFilterRegistry(); 211 } 212 return sRegistry; 213 } 214 215 @FilterType getDefaultFilterType(int listType)216 public int getDefaultFilterType(int listType) { 217 switch (listType) { 218 case ManageApplications.LIST_TYPE_USAGE_ACCESS: 219 return FILTER_APPS_USAGE_ACCESS; 220 case ManageApplications.LIST_TYPE_HIGH_POWER: 221 return FILTER_APPS_POWER_ALLOWLIST; 222 case ManageApplications.LIST_TYPE_OVERLAY: 223 return FILTER_APPS_WITH_OVERLAY; 224 case ManageApplications.LIST_TYPE_WRITE_SETTINGS: 225 return FILTER_APPS_WRITE_SETTINGS; 226 case ManageApplications.LIST_TYPE_MANAGE_SOURCES: 227 return FILTER_APPS_INSTALL_SOURCES; 228 case ManageApplications.LIST_TYPE_WIFI_ACCESS: 229 return FILTER_APP_CAN_CHANGE_WIFI_STATE; 230 case ManageApplications.LIST_TYPE_NOTIFICATION: 231 return FILTER_APPS_RECENT; 232 case ManageApplications.LIST_MANAGE_EXTERNAL_STORAGE: 233 return FILTER_MANAGE_EXTERNAL_STORAGE; 234 case ManageApplications.LIST_TYPE_ALARMS_AND_REMINDERS: 235 return FILTER_ALARMS_AND_REMINDERS; 236 case ManageApplications.LIST_TYPE_MEDIA_MANAGEMENT_APPS: 237 return FILTER_APPS_MEDIA_MANAGEMENT; 238 default: 239 return FILTER_APPS_ALL; 240 } 241 } 242 get(@ilterType int filterType)243 public AppFilterItem get(@FilterType int filterType) { 244 return mFilters[filterType]; 245 } 246 } 247