Listen to INetworkPolicyManager events and update UI accordingly.

BUG: 27481520

Change-Id: I09c4c586188d754ddd3ac3dcb3903217842ea0a5
This commit is contained in:
Felipe Leme
2016-04-19 10:00:20 -07:00
parent ed74511cb1
commit 85c63f348f
5 changed files with 134 additions and 16 deletions

View File

@@ -54,7 +54,8 @@ import com.android.settingslib.net.UidDetailProvider;
import static android.net.NetworkPolicyManager.POLICY_NONE;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener {
public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
DataSaverBackend.Listener {
public static final String ARG_APP_ITEM = "app_item";
public static final String ARG_NETWORK_TEMPLATE = "network_template";
@@ -207,17 +208,23 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
@Override
public void onResume() {
super.onResume();
mDataSaverBackend.addListener(this);
mPolicy = services.mPolicyEditor.getPolicy(mTemplate);
getLoaderManager().restartLoader(LOADER_CHART_DATA,
ChartDataLoader.buildArgs(mTemplate, mAppItem), mChartDataCallbacks);
updatePrefs();
}
@Override
public void onPause() {
super.onPause();
mDataSaverBackend.remListener(this);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference == mRestrictBackground) {
mDataSaverBackend.setIsBlacklisted(mAppItem.key, mPackageName, !(Boolean) newValue);
updatePrefs(); // TODO: should have been notified by NPMS instead
return true;
} else if (preference == mUnrestrictedData) {
mDataSaverBackend.setIsWhitelisted(mAppItem.key, mPackageName, (Boolean) newValue);
@@ -238,15 +245,19 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
}
private void updatePrefs() {
updatePrefs(getAppRestrictBackground(), getUnrestrictData());
}
private void updatePrefs(boolean restrictBackground, boolean unrestrictData) {
if (mRestrictBackground != null) {
mRestrictBackground.setChecked(!getAppRestrictBackground());
mRestrictBackground.setChecked(!restrictBackground);
}
if (mUnrestrictedData != null) {
if (getAppRestrictBackground()) {
if (restrictBackground) {
mUnrestrictedData.setVisible(false);
} else {
mUnrestrictedData.setVisible(true);
mUnrestrictedData.setChecked(mDataSaverBackend.isWhitelisted(mAppItem.key));
mUnrestrictedData.setChecked(unrestrictData);
}
}
}
@@ -288,6 +299,10 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
return (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0;
}
private boolean getUnrestrictData() {
return mDataSaverBackend.isWhitelisted(mAppItem.key);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
@@ -368,4 +383,23 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
}
}
}
@Override
public void onDataSaverChanged(boolean isDataSaving) {
}
@Override
public void onWhitelistStatusChanged(int uid, boolean isWhitelisted) {
if (mAppItem.uids.get(uid, false)) {
updatePrefs(getAppRestrictBackground(), isWhitelisted);
}
}
@Override
public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) {
if (mAppItem.uids.get(uid, false)) {
updatePrefs(isBlacklisted, getUnrestrictData());
}
}
}