15b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk/* 25b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * Copyright (C) 2015 The Android Open Source Project 35b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * 45b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 55b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * you may not use this file except in compliance with the License. 65b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * You may obtain a copy of the License at 75b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * 85b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 95b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * 105b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * Unless required by applicable law or agreed to in writing, software 115b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * distributed under the License is distributed on an "AS IS" BASIS, 125b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * See the License for the specific language governing permissions and 145b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk * limitations under the License. 155b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk */ 165b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkpackage com.android.settings.applications; 175b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 18d0d7b924cbecf05809d349d01fcefc5abfb3d3eaJason Monkimport android.content.BroadcastReceiver; 1991e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport android.content.Context; 2067e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganovimport android.content.Intent; 217f70ba18e6760c2539704c16cf3865bf49953d50Billy Lauimport android.os.AsyncTask; 2239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.os.Bundle; 2391e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport android.provider.SearchIndexableResource; 2439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 259d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 265b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport com.android.settings.R; 275b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport com.android.settings.SettingsPreferenceFragment; 2891e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport com.android.settings.Utils; 29e9866b6dc47201630c057f946423d572b8c46af8Jason Monkimport com.android.settings.applications.PermissionsSummaryHelper.PermissionsResultCallback; 3091e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport com.android.settings.search.BaseSearchIndexProvider; 3191e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport com.android.settings.search.Indexable; 3267cd6ab93a526fe65877743e458590f4e6f187eeTony Mantlerimport com.android.settingslib.applications.ApplicationsState; 3367cd6ab93a526fe65877743e458590f4e6f187eeTony Mantlerimport com.android.settingslib.applications.ApplicationsState.AppEntry; 3467cd6ab93a526fe65877743e458590f4e6f187eeTony Mantlerimport com.android.settingslib.applications.ApplicationsState.Session; 355b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 365b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport java.util.ArrayList; 3791e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport java.util.Arrays; 3891e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monkimport java.util.List; 395b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 4073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkpublic class AdvancedAppSettings extends SettingsPreferenceFragment implements 4191e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk ApplicationsState.Callbacks, Indexable { 425b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 435b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk static final String TAG = "AdvancedAppSettings"; 445b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 452f41aa7955e27a050155765803d3a5ae98782f26Jason Monk private static final String KEY_APP_PERM = "manage_perms"; 468b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio private static final String KEY_APP_DOMAIN_URLS = "domain_urls"; 471eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk private static final String KEY_HIGH_POWER_APPS = "high_power_apps"; 487f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau private static final String KEY_SYSTEM_ALERT_WINDOW = "system_alert_window"; 497f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau private static final String KEY_WRITE_SETTINGS_APPS = "write_settings_apps"; 505b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 515b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk private Session mSession; 52e9866b6dc47201630c057f946423d572b8c46af8Jason Monk private Preference mAppPermsPreference; 538b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio private Preference mAppDomainURLsPreference; 541eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk private Preference mHighPowerPreference; 557f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau private Preference mSystemAlertWindowPreference; 567f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau private Preference mWriteSettingsPreference; 575b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 58d0d7b924cbecf05809d349d01fcefc5abfb3d3eaJason Monk private BroadcastReceiver mPermissionReceiver; 59d0d7b924cbecf05809d349d01fcefc5abfb3d3eaJason Monk 605b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 615b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onCreate(Bundle icicle) { 625b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk super.onCreate(icicle); 635b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk addPreferencesFromResource(R.xml.advanced_apps); 645b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 6567e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov Preference permissions = getPreferenceScreen().findPreference(KEY_APP_PERM); 6667e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov permissions.setIntent(new Intent(Intent.ACTION_MANAGE_PERMISSIONS)); 6767e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov 6867e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov ApplicationsState applicationsState = ApplicationsState.getInstance( 6967e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov getActivity().getApplication()); 7067e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov mSession = applicationsState.newSession(this); 715b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 72e9866b6dc47201630c057f946423d572b8c46af8Jason Monk mAppPermsPreference = findPreference(KEY_APP_PERM); 738b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio mAppDomainURLsPreference = findPreference(KEY_APP_DOMAIN_URLS); 741eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk mHighPowerPreference = findPreference(KEY_HIGH_POWER_APPS); 757f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau mSystemAlertWindowPreference = findPreference(KEY_SYSTEM_ALERT_WINDOW); 767f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau mWriteSettingsPreference = findPreference(KEY_WRITE_SETTINGS_APPS); 775b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 785b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 795b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 808a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 819d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.APPLICATIONS_ADVANCED; 828a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 838a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 848a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 855b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onRunningStateChanged(boolean running) { 865b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 875b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 885b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 895b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 905b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onPackageListChanged() { 91c5291b87b3b21cb6621d6d29b0400aad9c3d4f40Jason Monk // No-op. 925b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 935b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 945b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 955b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onRebuildComplete(ArrayList<AppEntry> apps) { 965b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 975b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 985b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 995b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1005b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onPackageIconChanged() { 1015b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1025b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1035b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1045b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1055b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onPackageSizeChanged(String packageName) { 1065b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1075b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1085b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1095b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1105b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onAllSizesComputed() { 1115b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1125b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1135b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1145b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1155b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onLauncherInfoChanged() { 1165b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1175b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1185b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 119584b2b2bc17a4ccf42952b188722de1091c101beJason Monk @Override 120584b2b2bc17a4ccf42952b188722de1091c101beJason Monk public void onLoadEntriesCompleted() { 121584b2b2bc17a4ccf42952b188722de1091c101beJason Monk // No-op. 122584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 123e9866b6dc47201630c057f946423d572b8c46af8Jason Monk 124e9866b6dc47201630c057f946423d572b8c46af8Jason Monk private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() { 125e9866b6dc47201630c057f946423d572b8c46af8Jason Monk @Override 1267f62addc1082f5f926a04a83edf07675b1317019Svetoslav Ganov public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, 1277f62addc1082f5f926a04a83edf07675b1317019Svetoslav Ganov int standardUsedPermissionAppCount) { 128e9866b6dc47201630c057f946423d572b8c46af8Jason Monk if (getActivity() == null) { 129e9866b6dc47201630c057f946423d572b8c46af8Jason Monk return; 130e9866b6dc47201630c057f946423d572b8c46af8Jason Monk } 131d0d7b924cbecf05809d349d01fcefc5abfb3d3eaJason Monk mPermissionReceiver = null; 1327f62addc1082f5f926a04a83edf07675b1317019Svetoslav Ganov if (standardUsedPermissionAppCount != 0) { 133e9866b6dc47201630c057f946423d572b8c46af8Jason Monk mAppPermsPreference.setSummary(getContext().getString( 1347f62addc1082f5f926a04a83edf07675b1317019Svetoslav Ganov R.string.app_permissions_summary, 1357f62addc1082f5f926a04a83edf07675b1317019Svetoslav Ganov standardGrantedPermissionAppCount, 1367f62addc1082f5f926a04a83edf07675b1317019Svetoslav Ganov standardUsedPermissionAppCount)); 137e9866b6dc47201630c057f946423d572b8c46af8Jason Monk } else { 138e9866b6dc47201630c057f946423d572b8c46af8Jason Monk mAppPermsPreference.setSummary(null); 139e9866b6dc47201630c057f946423d572b8c46af8Jason Monk } 140e9866b6dc47201630c057f946423d572b8c46af8Jason Monk } 141e9866b6dc47201630c057f946423d572b8c46af8Jason Monk }; 1427f70ba18e6760c2539704c16cf3865bf49953d50Billy Lau 14391e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 14491e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk new BaseSearchIndexProvider() { 14591e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk @Override 14691e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk public List<SearchIndexableResource> getXmlResourcesToIndex( 14791e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk Context context, boolean enabled) { 14891e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk SearchIndexableResource sir = new SearchIndexableResource(context); 14991e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk sir.xmlResId = R.xml.advanced_apps; 15091e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk return Arrays.asList(sir); 15191e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk } 15291e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk 15391e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk @Override 15491e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk public List<String> getNonIndexableKeys(Context context) { 15591e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk return Utils.getNonIndexable(R.xml.advanced_apps, context); 15691e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk } 15791e2f89b0f8b440728fe395ee02a71ae59e21ffcJason Monk }; 1585b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk} 159