AdvancedAppSettings.java revision 67e067fff4e4ef1eb54f9c238dbf07312434a07e
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 1867e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganovimport android.content.Intent; 195b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport android.content.pm.ApplicationInfo; 205b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport android.os.Bundle; 215b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport android.preference.Preference; 225b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 238a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger; 245b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport com.android.settings.R; 255b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport com.android.settings.SettingsPreferenceFragment; 265b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport com.android.settings.applications.ApplicationsState.AppEntry; 275b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport com.android.settings.applications.ApplicationsState.Session; 281eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monkimport com.android.settings.fuelgauge.PowerWhitelistBackend; 295b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 305b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monkimport java.util.ArrayList; 315b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 3273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkpublic class AdvancedAppSettings extends SettingsPreferenceFragment implements 3367e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov ApplicationsState.Callbacks { 345b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 355b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk static final String TAG = "AdvancedAppSettings"; 365b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 372f41aa7955e27a050155765803d3a5ae98782f26Jason Monk private static final String KEY_APP_PERM = "manage_perms"; 388b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio private static final String KEY_APP_DOMAIN_URLS = "domain_urls"; 391eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk private static final String KEY_HIGH_POWER_APPS = "high_power_apps"; 405b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 415b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk private Session mSession; 428b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio private Preference mAppDomainURLsPreference; 431eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk private Preference mHighPowerPreference; 445b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 455b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 465b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onCreate(Bundle icicle) { 475b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk super.onCreate(icicle); 485b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk addPreferencesFromResource(R.xml.advanced_apps); 495b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 5067e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov Preference permissions = getPreferenceScreen().findPreference(KEY_APP_PERM); 5167e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov permissions.setIntent(new Intent(Intent.ACTION_MANAGE_PERMISSIONS)); 5267e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov 5367e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov ApplicationsState applicationsState = ApplicationsState.getInstance( 5467e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov getActivity().getApplication()); 5567e067fff4e4ef1eb54f9c238dbf07312434a07eSvet Ganov mSession = applicationsState.newSession(this); 565b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 578b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio mAppDomainURLsPreference = findPreference(KEY_APP_DOMAIN_URLS); 581eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk mHighPowerPreference = findPreference(KEY_HIGH_POWER_APPS); 598b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio updateUI(); 605b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 615b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 628b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio private void updateUI() { 638b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio ArrayList<AppEntry> allApps = mSession.getAllApps(); 648b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio 658b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio int countAppWithDomainURLs = 0; 668b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio for (AppEntry entry : allApps) { 678b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio boolean hasDomainURLs = 688b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio (entry.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) != 0; 698b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio if (hasDomainURLs) countAppWithDomainURLs++; 708b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio } 718b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio String summary = getResources().getQuantityString( 728b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio R.plurals.domain_urls_apps_summary, countAppWithDomainURLs, countAppWithDomainURLs); 738b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio mAppDomainURLsPreference.setSummary(summary); 741eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk 751eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk int highPowerCount = PowerWhitelistBackend.getInstance().getWhitelistSize(); 761eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk mHighPowerPreference.setSummary(getResources().getQuantityString(R.plurals.high_power_count, 771eb54eb2ff250eccdd700601011bd6457ddcbec1Jason Monk highPowerCount, highPowerCount)); 785b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 795b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 805b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 818a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 828a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren return MetricsLogger.APPLICATIONS_ADVANCED; 838a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 848a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 858a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 865b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onRunningStateChanged(boolean running) { 875b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 885b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 895b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 905b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 915b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onPackageListChanged() { 928b2ea39cbc5b0923646b5ad4d5f66ff3c66a9f7fFabrice Di Meglio updateUI(); 935b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 945b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 955b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 965b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onRebuildComplete(ArrayList<AppEntry> apps) { 975b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 985b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 995b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1005b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1015b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onPackageIconChanged() { 1025b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1035b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1045b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1055b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1065b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onPackageSizeChanged(String packageName) { 1075b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1085b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1095b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1105b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1115b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onAllSizesComputed() { 1125b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1135b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1145b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 1155b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk @Override 1165b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk public void onLauncherInfoChanged() { 1175b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk // No-op. 1185b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk } 1195b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk 120584b2b2bc17a4ccf42952b188722de1091c101beJason Monk @Override 121584b2b2bc17a4ccf42952b188722de1091c101beJason Monk public void onLoadEntriesCompleted() { 122584b2b2bc17a4ccf42952b188722de1091c101beJason Monk // No-op. 123584b2b2bc17a4ccf42952b188722de1091c101beJason Monk } 1245b3aa36e6fd17db995a31f9549b8fe628754a750Jason Monk} 125