1 /* 2 * Copyright (C) 2015 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 package com.android.settings.applications; 17 18 import android.content.BroadcastReceiver; 19 import android.content.Context; 20 import android.content.Intent; 21 import android.os.AsyncTask; 22 import android.os.Bundle; 23 import android.provider.SearchIndexableResource; 24 import android.support.v7.preference.Preference; 25 import com.android.internal.logging.MetricsProto.MetricsEvent; 26 import com.android.settings.R; 27 import com.android.settings.SettingsPreferenceFragment; 28 import com.android.settings.Utils; 29 import com.android.settings.applications.PermissionsSummaryHelper.PermissionsResultCallback; 30 import com.android.settings.search.BaseSearchIndexProvider; 31 import com.android.settings.search.Indexable; 32 import com.android.settingslib.applications.ApplicationsState; 33 import com.android.settingslib.applications.ApplicationsState.AppEntry; 34 import com.android.settingslib.applications.ApplicationsState.Session; 35 36 import java.util.ArrayList; 37 import java.util.Arrays; 38 import java.util.List; 39 40 public class AdvancedAppSettings extends SettingsPreferenceFragment implements 41 ApplicationsState.Callbacks, Indexable { 42 43 static final String TAG = "AdvancedAppSettings"; 44 45 private static final String KEY_APP_PERM = "manage_perms"; 46 private static final String KEY_APP_DOMAIN_URLS = "domain_urls"; 47 private static final String KEY_HIGH_POWER_APPS = "high_power_apps"; 48 private static final String KEY_SYSTEM_ALERT_WINDOW = "system_alert_window"; 49 private static final String KEY_WRITE_SETTINGS_APPS = "write_settings_apps"; 50 51 private Session mSession; 52 private Preference mAppPermsPreference; 53 private Preference mAppDomainURLsPreference; 54 private Preference mHighPowerPreference; 55 private Preference mSystemAlertWindowPreference; 56 private Preference mWriteSettingsPreference; 57 58 private BroadcastReceiver mPermissionReceiver; 59 60 @Override 61 public void onCreate(Bundle icicle) { 62 super.onCreate(icicle); 63 addPreferencesFromResource(R.xml.advanced_apps); 64 65 Preference permissions = getPreferenceScreen().findPreference(KEY_APP_PERM); 66 permissions.setIntent(new Intent(Intent.ACTION_MANAGE_PERMISSIONS)); 67 68 ApplicationsState applicationsState = ApplicationsState.getInstance( 69 getActivity().getApplication()); 70 mSession = applicationsState.newSession(this); 71 72 mAppPermsPreference = findPreference(KEY_APP_PERM); 73 mAppDomainURLsPreference = findPreference(KEY_APP_DOMAIN_URLS); 74 mHighPowerPreference = findPreference(KEY_HIGH_POWER_APPS); 75 mSystemAlertWindowPreference = findPreference(KEY_SYSTEM_ALERT_WINDOW); 76 mWriteSettingsPreference = findPreference(KEY_WRITE_SETTINGS_APPS); 77 } 78 79 @Override 80 protected int getMetricsCategory() { 81 return MetricsEvent.APPLICATIONS_ADVANCED; 82 } 83 84 @Override 85 public void onRunningStateChanged(boolean running) { 86 // No-op. 87 } 88 89 @Override 90 public void onPackageListChanged() { 91 // No-op. 92 } 93 94 @Override 95 public void onRebuildComplete(ArrayList<AppEntry> apps) { 96 // No-op. 97 } 98 99 @Override 100 public void onPackageIconChanged() { 101 // No-op. 102 } 103 104 @Override 105 public void onPackageSizeChanged(String packageName) { 106 // No-op. 107 } 108 109 @Override 110 public void onAllSizesComputed() { 111 // No-op. 112 } 113 114 @Override 115 public void onLauncherInfoChanged() { 116 // No-op. 117 } 118 119 @Override 120 public void onLoadEntriesCompleted() { 121 // No-op. 122 } 123 124 private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() { 125 @Override 126 public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, 127 int standardUsedPermissionAppCount) { 128 if (getActivity() == null) { 129 return; 130 } 131 mPermissionReceiver = null; 132 if (standardUsedPermissionAppCount != 0) { 133 mAppPermsPreference.setSummary(getContext().getString( 134 R.string.app_permissions_summary, 135 standardGrantedPermissionAppCount, 136 standardUsedPermissionAppCount)); 137 } else { 138 mAppPermsPreference.setSummary(null); 139 } 140 } 141 }; 142 143 public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 144 new BaseSearchIndexProvider() { 145 @Override 146 public List<SearchIndexableResource> getXmlResourcesToIndex( 147 Context context, boolean enabled) { 148 SearchIndexableResource sir = new SearchIndexableResource(context); 149 sir.xmlResId = R.xml.advanced_apps; 150 return Arrays.asList(sir); 151 } 152 153 @Override 154 public List<String> getNonIndexableKeys(Context context) { 155 return Utils.getNonIndexable(R.xml.advanced_apps, context); 156 } 157 }; 158 } 159