Home | History | Annotate | Download | only in datausage
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
      5  * except in compliance with the License. You may obtain a copy of the License at
      6  *
      7  *      http://www.apache.org/licenses/LICENSE-2.0
      8  *
      9  * Unless required by applicable law or agreed to in writing, software distributed under the
     10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     11  * KIND, either express or implied. See the License for the specific language governing
     12  * permissions and limitations under the License.
     13  */
     14 
     15 package com.android.settings.datausage;
     16 
     17 import android.app.Application;
     18 import android.os.Bundle;
     19 import android.support.v7.preference.Preference;
     20 import android.widget.Switch;
     21 
     22 import com.android.internal.logging.MetricsProto.MetricsEvent;
     23 import com.android.settings.R;
     24 import com.android.settings.SettingsActivity;
     25 import com.android.settings.SettingsPreferenceFragment;
     26 import com.android.settings.applications.AppStateBaseBridge.Callback;
     27 import com.android.settings.datausage.DataSaverBackend.Listener;
     28 import com.android.settings.widget.SwitchBar;
     29 import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
     30 import com.android.settingslib.applications.ApplicationsState;
     31 import com.android.settingslib.applications.ApplicationsState.AppEntry;
     32 import com.android.settingslib.applications.ApplicationsState.Callbacks;
     33 import com.android.settingslib.applications.ApplicationsState.Session;
     34 
     35 import java.util.ArrayList;
     36 
     37 public class DataSaverSummary extends SettingsPreferenceFragment
     38         implements OnSwitchChangeListener, Listener, Callback, Callbacks {
     39 
     40     private static final String KEY_UNRESTRICTED_ACCESS = "unrestricted_access";
     41 
     42     private SwitchBar mSwitchBar;
     43     private DataSaverBackend mDataSaverBackend;
     44     private Preference mUnrestrictedAccess;
     45     private ApplicationsState mApplicationsState;
     46     private AppStateDataUsageBridge mDataUsageBridge;
     47     private Session mSession;
     48 
     49     // Flag used to avoid infinite loop due if user switch it on/off too quicky.
     50     private boolean mSwitching;
     51 
     52     @Override
     53     public void onCreate(Bundle icicle) {
     54         super.onCreate(icicle);
     55 
     56         addPreferencesFromResource(R.xml.data_saver);
     57         mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS);
     58         mApplicationsState = ApplicationsState.getInstance(
     59                 (Application) getContext().getApplicationContext());
     60         mDataSaverBackend = new DataSaverBackend(getContext());
     61         mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend);
     62         mSession = mApplicationsState.newSession(this);
     63     }
     64 
     65     @Override
     66     public void onActivityCreated(Bundle savedInstanceState) {
     67         super.onActivityCreated(savedInstanceState);
     68         mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
     69         mSwitchBar.show();
     70         mSwitchBar.addOnSwitchChangeListener(this);
     71     }
     72 
     73     @Override
     74     public void onResume() {
     75         super.onResume();
     76         mDataSaverBackend.refreshWhitelist();
     77         mDataSaverBackend.refreshBlacklist();
     78         mDataSaverBackend.addListener(this);
     79         mSession.resume();
     80         mDataUsageBridge.resume();
     81     }
     82 
     83     @Override
     84     public void onPause() {
     85         super.onPause();
     86         mDataSaverBackend.remListener(this);
     87         mDataUsageBridge.pause();
     88         mSession.pause();
     89     }
     90 
     91     @Override
     92     public void onSwitchChanged(Switch switchView, boolean isChecked) {
     93         synchronized(this) {
     94             if (mSwitching) {
     95                 return;
     96             }
     97             mSwitching = true;
     98             mDataSaverBackend.setDataSaverEnabled(isChecked);
     99         }
    100     }
    101 
    102     @Override
    103     protected int getMetricsCategory() {
    104         return MetricsEvent.DATA_SAVER_SUMMARY;
    105     }
    106 
    107     @Override
    108     protected int getHelpResource() {
    109         return R.string.help_url_data_saver;
    110     }
    111 
    112     @Override
    113     public void onDataSaverChanged(boolean isDataSaving) {
    114         synchronized(this) {
    115             mSwitchBar.setChecked(isDataSaving);
    116             mSwitching = false;
    117         }
    118     }
    119 
    120     @Override
    121     public void onWhitelistStatusChanged(int uid, boolean isWhitelisted) {
    122     }
    123 
    124     @Override
    125     public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) {
    126     }
    127 
    128     @Override
    129     public void onExtraInfoUpdated() {
    130         if (!isAdded()) {
    131             return;
    132         }
    133         int count = 0;
    134         final ArrayList<AppEntry> allApps = mSession.getAllApps();
    135         final int N = allApps.size();
    136         for (int i = 0; i < N; i++) {
    137             final AppEntry entry = allApps.get(i);
    138             if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) {
    139                 continue;
    140             }
    141             if (entry.extraInfo != null && ((AppStateDataUsageBridge.DataUsageState)
    142                     entry.extraInfo).isDataSaverWhitelisted) {
    143                 count++;
    144             }
    145         }
    146         mUnrestrictedAccess.setSummary(getResources().getQuantityString(
    147                 R.plurals.data_saver_unrestricted_summary, count, count));
    148     }
    149 
    150     @Override
    151     public void onRunningStateChanged(boolean running) {
    152 
    153     }
    154 
    155     @Override
    156     public void onPackageListChanged() {
    157 
    158     }
    159 
    160     @Override
    161     public void onRebuildComplete(ArrayList<AppEntry> apps) {
    162 
    163     }
    164 
    165     @Override
    166     public void onPackageIconChanged() {
    167 
    168     }
    169 
    170     @Override
    171     public void onPackageSizeChanged(String packageName) {
    172 
    173     }
    174 
    175     @Override
    176     public void onAllSizesComputed() {
    177 
    178     }
    179 
    180     @Override
    181     public void onLauncherInfoChanged() {
    182 
    183     }
    184 
    185     @Override
    186     public void onLoadEntriesCompleted() {
    187 
    188     }
    189 }
    190