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