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