DataSaverSummary.java revision a8b0366a028b321e41ee40b3c1372de77254b24d
1764f45db9168b4f19623b72db8429016d1226cbeJason Monk/* 2764f45db9168b4f19623b72db8429016d1226cbeJason Monk * Copyright (C) 2016 The Android Open Source Project 3764f45db9168b4f19623b72db8429016d1226cbeJason Monk * 4764f45db9168b4f19623b72db8429016d1226cbeJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5764f45db9168b4f19623b72db8429016d1226cbeJason Monk * except in compliance with the License. You may obtain a copy of the License at 6764f45db9168b4f19623b72db8429016d1226cbeJason Monk * 7764f45db9168b4f19623b72db8429016d1226cbeJason Monk * http://www.apache.org/licenses/LICENSE-2.0 8764f45db9168b4f19623b72db8429016d1226cbeJason Monk * 9764f45db9168b4f19623b72db8429016d1226cbeJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 10764f45db9168b4f19623b72db8429016d1226cbeJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11764f45db9168b4f19623b72db8429016d1226cbeJason Monk * KIND, either express or implied. See the License for the specific language governing 12764f45db9168b4f19623b72db8429016d1226cbeJason Monk * permissions and limitations under the License. 13764f45db9168b4f19623b72db8429016d1226cbeJason Monk */ 14764f45db9168b4f19623b72db8429016d1226cbeJason Monk 15764f45db9168b4f19623b72db8429016d1226cbeJason Monkpackage com.android.settings.datausage; 16764f45db9168b4f19623b72db8429016d1226cbeJason Monk 17a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport android.app.Application; 18764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport android.os.Bundle; 19764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport android.support.v7.preference.Preference; 20764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport android.widget.Switch; 21764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport com.android.settings.InstrumentedFragment; 22764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport com.android.settings.R; 23764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport com.android.settings.SettingsActivity; 24764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport com.android.settings.SettingsPreferenceFragment; 25a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settings.applications.AppStateBaseBridge.Callback; 26a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settings.datausage.DataSaverBackend.Listener; 27764f45db9168b4f19623b72db8429016d1226cbeJason Monkimport com.android.settings.widget.SwitchBar; 28a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settings.widget.SwitchBar.OnSwitchChangeListener; 29a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settingslib.applications.ApplicationsState; 30a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settingslib.applications.ApplicationsState.AppEntry; 31a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settingslib.applications.ApplicationsState.Callbacks; 32a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport com.android.settingslib.applications.ApplicationsState.Session; 33a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 34a8b0366a028b321e41ee40b3c1372de77254b24dJason Monkimport java.util.ArrayList; 35764f45db9168b4f19623b72db8429016d1226cbeJason Monk 36764f45db9168b4f19623b72db8429016d1226cbeJason Monkpublic class DataSaverSummary extends SettingsPreferenceFragment 37a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk implements OnSwitchChangeListener, Listener, Callback, Callbacks { 38764f45db9168b4f19623b72db8429016d1226cbeJason Monk 39764f45db9168b4f19623b72db8429016d1226cbeJason Monk private static final String KEY_UNRESTRICTED_ACCESS = "unrestricted_access"; 40764f45db9168b4f19623b72db8429016d1226cbeJason Monk 41764f45db9168b4f19623b72db8429016d1226cbeJason Monk private SwitchBar mSwitchBar; 42764f45db9168b4f19623b72db8429016d1226cbeJason Monk private DataSaverBackend mDataSaverBackend; 43764f45db9168b4f19623b72db8429016d1226cbeJason Monk private Preference mUnrestrictedAccess; 44a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk private ApplicationsState mApplicationsState; 45a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk private AppStateDataUsageBridge mDataUsageBridge; 46a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk private Session mSession; 47764f45db9168b4f19623b72db8429016d1226cbeJason Monk 48764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 49764f45db9168b4f19623b72db8429016d1226cbeJason Monk public void onCreate(Bundle icicle) { 50764f45db9168b4f19623b72db8429016d1226cbeJason Monk super.onCreate(icicle); 51764f45db9168b4f19623b72db8429016d1226cbeJason Monk 52764f45db9168b4f19623b72db8429016d1226cbeJason Monk addPreferencesFromResource(R.xml.data_saver); 53764f45db9168b4f19623b72db8429016d1226cbeJason Monk mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS); 54a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mApplicationsState = ApplicationsState.getInstance( 55a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk (Application) getContext().getApplicationContext()); 56764f45db9168b4f19623b72db8429016d1226cbeJason Monk mDataSaverBackend = new DataSaverBackend(getContext()); 57a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend); 58a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mSession = mApplicationsState.newSession(this); 59764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 60764f45db9168b4f19623b72db8429016d1226cbeJason Monk 61764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 62764f45db9168b4f19623b72db8429016d1226cbeJason Monk public void onActivityCreated(Bundle savedInstanceState) { 63764f45db9168b4f19623b72db8429016d1226cbeJason Monk super.onActivityCreated(savedInstanceState); 64764f45db9168b4f19623b72db8429016d1226cbeJason Monk mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar(); 65764f45db9168b4f19623b72db8429016d1226cbeJason Monk mSwitchBar.show(); 66764f45db9168b4f19623b72db8429016d1226cbeJason Monk mSwitchBar.addOnSwitchChangeListener(this); 67764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 68764f45db9168b4f19623b72db8429016d1226cbeJason Monk 69764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 70764f45db9168b4f19623b72db8429016d1226cbeJason Monk public void onResume() { 71764f45db9168b4f19623b72db8429016d1226cbeJason Monk super.onResume(); 72764f45db9168b4f19623b72db8429016d1226cbeJason Monk mDataSaverBackend.refreshWhitelist(); 73a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mSession.resume(); 74a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mDataUsageBridge.resume(); 75764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 76764f45db9168b4f19623b72db8429016d1226cbeJason Monk 77764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 78764f45db9168b4f19623b72db8429016d1226cbeJason Monk public void onPause() { 79764f45db9168b4f19623b72db8429016d1226cbeJason Monk super.onPause(); 80a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mDataUsageBridge.pause(); 81a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mSession.pause(); 82764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 83764f45db9168b4f19623b72db8429016d1226cbeJason Monk 84764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 85764f45db9168b4f19623b72db8429016d1226cbeJason Monk public void onSwitchChanged(Switch switchView, boolean isChecked) { 86764f45db9168b4f19623b72db8429016d1226cbeJason Monk mDataSaverBackend.setDataSaverEnabled(isChecked); 87764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 88764f45db9168b4f19623b72db8429016d1226cbeJason Monk 89764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 90764f45db9168b4f19623b72db8429016d1226cbeJason Monk protected int getMetricsCategory() { 91764f45db9168b4f19623b72db8429016d1226cbeJason Monk return InstrumentedFragment.DATA_SAVER_SUMMARY; 92764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 93764f45db9168b4f19623b72db8429016d1226cbeJason Monk 94764f45db9168b4f19623b72db8429016d1226cbeJason Monk @Override 95764f45db9168b4f19623b72db8429016d1226cbeJason Monk public void onDataSaverChanged(boolean isDataSaving) { 96764f45db9168b4f19623b72db8429016d1226cbeJason Monk mSwitchBar.setChecked(isDataSaving); 97764f45db9168b4f19623b72db8429016d1226cbeJason Monk } 98a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 99a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 100a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onExtraInfoUpdated() { 101a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk int count = 0; 102a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk final ArrayList<AppEntry> allApps = mSession.getAllApps(); 103a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk final int N = allApps.size(); 104a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk for (int i = 0; i < N; i++) { 105a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk final AppEntry entry = allApps.get(i); 106a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) { 107a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk continue; 108a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 109a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk if (entry.extraInfo != null && ((AppStateDataUsageBridge.DataUsageState) 110a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk entry.extraInfo).isDataSaverWhitelisted) { 111a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk count++; 112a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 113a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 114a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk mUnrestrictedAccess.setSummary(getResources().getQuantityString( 115a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk R.plurals.data_saver_unrestricted_summary, count, count)); 116a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 117a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 118a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 119a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onRunningStateChanged(boolean running) { 120a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 121a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 122a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 123a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 124a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onPackageListChanged() { 125a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 126a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 127a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 128a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 129a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onRebuildComplete(ArrayList<AppEntry> apps) { 130a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 131a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 132a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 133a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 134a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onPackageIconChanged() { 135a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 136a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 137a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 138a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 139a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onPackageSizeChanged(String packageName) { 140a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 141a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 142a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 143a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 144a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onAllSizesComputed() { 145a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 146a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 147a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 148a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 149a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onLauncherInfoChanged() { 150a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 151a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 152a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 153a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk @Override 154a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk public void onLoadEntriesCompleted() { 155a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk 156a8b0366a028b321e41ee40b3c1372de77254b24dJason Monk } 157764f45db9168b4f19623b72db8429016d1226cbeJason Monk} 158