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