AppFilterRegistry.java revision 3f04897a197c84e7f149efc0d2172d3a628d85dc
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 17package com.android.settings.applications.manageapplications; 18 19import android.support.annotation.IntDef; 20 21import com.android.settings.R; 22import com.android.settings.applications.AppStateInstallAppsBridge; 23import com.android.settings.applications.AppStateNotificationBridge; 24import com.android.settings.applications.AppStateOverlayBridge; 25import com.android.settings.applications.AppStatePowerBridge; 26import com.android.settings.applications.AppStateDirectoryAccessBridge; 27import com.android.settings.applications.AppStateUsageBridge; 28import com.android.settings.applications.AppStateWriteSettingsBridge; 29import com.android.settings.wifi.AppStateChangeWifiStateBridge; 30import com.android.settingslib.applications.ApplicationsState; 31 32/** 33 * A registry and helper class that manages all {@link AppFilterItem}s for ManageApplications UI. 34 */ 35public class AppFilterRegistry { 36 37 @IntDef(value = { 38 FILTER_APPS_POWER_WHITELIST, 39 FILTER_APPS_POWER_WHITELIST_ALL, 40 FILTER_APPS_ALL, 41 FILTER_APPS_ENABLED, 42 FILTER_APPS_INSTANT, 43 FILTER_APPS_DISABLED, 44 FILTER_APPS_BLOCKED, 45 FILTER_APPS_PERSONAL, 46 FILTER_APPS_WORK, 47 FILTER_APPS_USAGE_ACCESS, 48 FILTER_APPS_WITH_OVERLAY, 49 FILTER_APPS_WRITE_SETTINGS, 50 FILTER_APPS_INSTALL_SOURCES, 51 }) 52 @interface FilterType { 53 } 54 55 // Filter options used for displayed list of applications 56 // Filters will appear sorted based on their value defined here. 57 public static final int FILTER_APPS_POWER_WHITELIST = 0; 58 public static final int FILTER_APPS_POWER_WHITELIST_ALL = 1; 59 public static final int FILTER_APPS_ALL = 2; 60 public static final int FILTER_APPS_ENABLED = 3; 61 public static final int FILTER_APPS_INSTANT = 4; 62 public static final int FILTER_APPS_DISABLED = 5; 63 public static final int FILTER_APPS_BLOCKED = 6; 64 public static final int FILTER_APPS_PERSONAL = 7; 65 public static final int FILTER_APPS_WORK = 8; 66 public static final int FILTER_APPS_USAGE_ACCESS = 9; 67 public static final int FILTER_APPS_WITH_OVERLAY = 10; 68 public static final int FILTER_APPS_WRITE_SETTINGS = 11; 69 public static final int FILTER_APPS_INSTALL_SOURCES = 12; 70 public static final int FILTER_APP_HAS_DIRECTORY_ACCESS = 13; 71 public static final int FILTER_APP_CAN_CHANGE_WIFI_STATE = 14; 72 // Next id: 15 73 74 private static AppFilterRegistry sRegistry; 75 76 private final AppFilterItem[] mFilters; 77 78 private AppFilterRegistry() { 79 mFilters = new AppFilterItem[15]; 80 81 // High power whitelist, on 82 mFilters[FILTER_APPS_POWER_WHITELIST] = new AppFilterItem( 83 new ApplicationsState.CompoundFilter( 84 AppStatePowerBridge.FILTER_POWER_WHITELISTED, 85 ApplicationsState.FILTER_ALL_ENABLED), 86 FILTER_APPS_POWER_WHITELIST, 87 R.string.high_power_filter_on); 88 89 // Without disabled until used 90 mFilters[FILTER_APPS_POWER_WHITELIST_ALL] = new AppFilterItem( 91 new ApplicationsState.CompoundFilter( 92 ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED, 93 ApplicationsState.FILTER_ALL_ENABLED), 94 FILTER_APPS_POWER_WHITELIST_ALL, 95 R.string.filter_all_apps); 96 97 // All apps 98 mFilters[FILTER_APPS_ALL] = new AppFilterItem( 99 ApplicationsState.FILTER_EVERYTHING, 100 FILTER_APPS_ALL, 101 R.string.filter_all_apps); 102 103 // Enabled 104 mFilters[FILTER_APPS_ENABLED] = new AppFilterItem( 105 ApplicationsState.FILTER_ALL_ENABLED, 106 FILTER_APPS_ENABLED, 107 R.string.filter_enabled_apps); 108 109 // Disabled 110 mFilters[FILTER_APPS_DISABLED] = new AppFilterItem( 111 ApplicationsState.FILTER_DISABLED, 112 FILTER_APPS_DISABLED, 113 R.string.filter_apps_disabled); 114 115 // Instant 116 mFilters[FILTER_APPS_INSTANT] = new AppFilterItem( 117 ApplicationsState.FILTER_INSTANT, 118 FILTER_APPS_INSTANT, 119 R.string.filter_instant_apps); 120 121 // Blocked Notifications 122 mFilters[FILTER_APPS_BLOCKED] = new AppFilterItem( 123 AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, 124 FILTER_APPS_BLOCKED, 125 R.string.filter_notif_blocked_apps); 126 127 // Personal 128 mFilters[FILTER_APPS_PERSONAL] = new AppFilterItem( 129 ApplicationsState.FILTER_PERSONAL, 130 FILTER_APPS_PERSONAL, 131 R.string.filter_personal_apps); 132 133 // Work 134 mFilters[FILTER_APPS_WORK] = new AppFilterItem( 135 ApplicationsState.FILTER_WORK, 136 FILTER_APPS_WORK, 137 R.string.filter_work_apps); 138 139 // Usage access screen, never displayed. 140 mFilters[FILTER_APPS_USAGE_ACCESS] = new AppFilterItem( 141 AppStateUsageBridge.FILTER_APP_USAGE, 142 FILTER_APPS_USAGE_ACCESS, 143 R.string.filter_all_apps); 144 145 // Apps that can draw overlays 146 mFilters[FILTER_APPS_WITH_OVERLAY] = new AppFilterItem( 147 AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW, 148 FILTER_APPS_WITH_OVERLAY, 149 R.string.filter_overlay_apps); 150 151 // Apps that can write system settings 152 mFilters[FILTER_APPS_WRITE_SETTINGS] = new AppFilterItem( 153 AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS, 154 FILTER_APPS_WRITE_SETTINGS, 155 R.string.filter_write_settings_apps); 156 157 // Apps that are trusted sources of apks 158 mFilters[FILTER_APPS_INSTALL_SOURCES] = new AppFilterItem( 159 AppStateInstallAppsBridge.FILTER_APP_SOURCES, 160 FILTER_APPS_INSTALL_SOURCES, 161 R.string.filter_install_sources_apps); 162 163 // Apps that interacted with directory access permissions (A.K.A. Scoped Directory Access) 164 mFilters[FILTER_APP_HAS_DIRECTORY_ACCESS] = new AppFilterItem( 165 AppStateDirectoryAccessBridge.FILTER_APP_HAS_DIRECTORY_ACCESS, 166 FILTER_APP_HAS_DIRECTORY_ACCESS, 167 R.string.filter_install_sources_apps); 168 169 mFilters[FILTER_APP_CAN_CHANGE_WIFI_STATE] = new AppFilterItem( 170 AppStateChangeWifiStateBridge.FILTER_CHANGE_WIFI_STATE, 171 FILTER_APP_CAN_CHANGE_WIFI_STATE, 172 R.string.filter_write_settings_apps); 173 } 174 175 public static AppFilterRegistry getInstance() { 176 if (sRegistry == null) { 177 sRegistry = new AppFilterRegistry(); 178 } 179 return sRegistry; 180 } 181 182 @FilterType 183 public int getDefaultFilterType(int listType) { 184 switch (listType) { 185 case ManageApplications.LIST_TYPE_USAGE_ACCESS: 186 return FILTER_APPS_USAGE_ACCESS; 187 case ManageApplications.LIST_TYPE_HIGH_POWER: 188 return FILTER_APPS_POWER_WHITELIST; 189 case ManageApplications.LIST_TYPE_OVERLAY: 190 return FILTER_APPS_WITH_OVERLAY; 191 case ManageApplications.LIST_TYPE_WRITE_SETTINGS: 192 return FILTER_APPS_WRITE_SETTINGS; 193 case ManageApplications.LIST_TYPE_MANAGE_SOURCES: 194 return FILTER_APPS_INSTALL_SOURCES; 195 case ManageApplications.LIST_TYPE_DIRECTORY_ACCESS: 196 return FILTER_APP_HAS_DIRECTORY_ACCESS; 197 case ManageApplications.LIST_TYPE_WIFI_ACCESS: 198 return FILTER_APP_CAN_CHANGE_WIFI_STATE; 199 default: 200 return FILTER_APPS_ALL; 201 } 202 } 203 204 public AppFilterItem get(@FilterType int filterType) { 205 return mFilters[filterType]; 206 } 207} 208