Merge "Add policy transparency for metered data related settings."

This commit is contained in:
Sudheer Shanka
2018-01-29 22:01:35 +00:00
committed by Android (Google) Code Review
6 changed files with 267 additions and 21 deletions

View File

@@ -33,7 +33,6 @@ import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.support.annotation.VisibleForTesting;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.text.format.Formatter;
@@ -48,6 +47,9 @@ import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.AppItem;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader;
import com.android.settingslib.net.UidDetail;
@@ -80,7 +82,7 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
private Preference mForegroundUsage;
private Preference mBackgroundUsage;
private Preference mAppSettings;
private SwitchPreference mRestrictBackground;
private RestrictedSwitchPreference mRestrictBackground;
private PreferenceCategory mAppList;
private Drawable mIcon;
@@ -97,7 +99,7 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
private AppItem mAppItem;
private Intent mAppSettingsIntent;
private SpinnerPreference mCycle;
private SwitchPreference mUnrestrictedData;
private RestrictedSwitchPreference mUnrestrictedData;
private DataSaverBackend mDataSaverBackend;
@Override
@@ -160,9 +162,11 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
removePreference(KEY_UNRESTRICTED_DATA);
removePreference(KEY_RESTRICT_BACKGROUND);
} else {
mRestrictBackground = (SwitchPreference) findPreference(KEY_RESTRICT_BACKGROUND);
mRestrictBackground = (RestrictedSwitchPreference) findPreference(
KEY_RESTRICT_BACKGROUND);
mRestrictBackground.setOnPreferenceChangeListener(this);
mUnrestrictedData = (SwitchPreference) findPreference(KEY_UNRESTRICTED_DATA);
mUnrestrictedData = (RestrictedSwitchPreference) findPreference(
KEY_UNRESTRICTED_DATA);
mUnrestrictedData.setOnPreferenceChangeListener(this);
}
mDataSaverBackend = new DataSaverBackend(getContext());
@@ -261,8 +265,11 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
}
private void updatePrefs(boolean restrictBackground, boolean unrestrictData) {
final EnforcedAdmin admin = RestrictedLockUtils.checkIfMeteredDataRestricted(
getContext(), mPackageName, UserHandle.getUserId(mAppItem.key));
if (mRestrictBackground != null) {
mRestrictBackground.setChecked(!restrictBackground);
mRestrictBackground.setDisabledByAdmin(admin);
}
if (mUnrestrictedData != null) {
if (restrictBackground) {
@@ -270,6 +277,7 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
} else {
mUnrestrictedData.setVisible(true);
mUnrestrictedData.setChecked(unrestrictData);
mUnrestrictedData.setDisabledByAdmin(admin);
}
}
}

View File

@@ -14,6 +14,8 @@
package com.android.settings.datausage;
import static com.android.settingslib.RestrictedLockUtils.checkIfMeteredDataRestricted;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
@@ -37,6 +39,8 @@ import com.android.settings.core.FeatureFlags;
import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.AppSwitchPreference;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedPreferenceHelper;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter;
@@ -172,6 +176,8 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment
preference.setOnPreferenceChangeListener(this);
getPreferenceScreen().addPreference(preference);
} else {
preference.setDisabledByAdmin(checkIfMeteredDataRestricted(getContext(),
entry.info.packageName, UserHandle.getUserId(entry.info.uid)));
preference.reuse();
}
preference.setOrder(i);
@@ -242,16 +248,22 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment
return app != null && UserHandle.isApp(app.info.uid);
}
private class AccessPreference extends AppSwitchPreference
@VisibleForTesting
class AccessPreference extends AppSwitchPreference
implements DataSaverBackend.Listener {
private final AppEntry mEntry;
private final DataUsageState mState;
private final RestrictedPreferenceHelper mHelper;
public AccessPreference(final Context context, AppEntry entry) {
super(context);
setWidgetLayoutResource(R.layout.restricted_switch_widget);
mHelper = new RestrictedPreferenceHelper(context, this, null);
mEntry = entry;
mState = (DataUsageState) mEntry.extraInfo;
mEntry.ensureLabel(getContext());
setDisabledByAdmin(checkIfMeteredDataRestricted(context, entry.info.packageName,
UserHandle.getUserId(entry.info.uid)));
setState();
if (mEntry.icon != null) {
setIcon(mEntry.icon);
@@ -291,12 +303,21 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment
}
}
@Override
public void performClick() {
if (!mHelper.performClick()) {
super.performClick();
}
}
// Sets UI state based on whitelist/blacklist status.
private void setState() {
setTitle(mEntry.label);
if (mState != null) {
setChecked(mState.isDataSaverWhitelisted);
if (mState.isDataSaverBlacklisted) {
if (isDisabledByAdmin()) {
setSummary(R.string.disabled_by_admin);
} else if (mState.isDataSaverBlacklisted) {
setSummary(R.string.restrict_background_blacklisted);
} else {
setSummary("");
@@ -323,10 +344,21 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment
}
});
}
holder.findViewById(android.R.id.widget_frame)
.setVisibility(mState != null && mState.isDataSaverBlacklisted
? View.INVISIBLE : View.VISIBLE);
final boolean disabledByAdmin = isDisabledByAdmin();
final View widgetFrame = holder.findViewById(android.R.id.widget_frame);
if (disabledByAdmin) {
widgetFrame.setVisibility(View.VISIBLE);
} else {
widgetFrame.setVisibility(mState != null && mState.isDataSaverBlacklisted
? View.INVISIBLE : View.VISIBLE);
}
super.onBindViewHolder(holder);
mHelper.onBindViewHolder(holder);
holder.findViewById(R.id.restricted_icon).setVisibility(
disabledByAdmin ? View.VISIBLE : View.GONE);
holder.findViewById(android.R.id.switch_widget).setVisibility(
disabledByAdmin ? View.GONE : View.VISIBLE);
}
@Override
@@ -348,6 +380,19 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment
reuse();
}
}
public void setDisabledByAdmin(EnforcedAdmin admin) {
mHelper.setDisabledByAdmin(admin);
}
public boolean isDisabledByAdmin() {
return mHelper.isDisabledByAdmin();
}
@VisibleForTesting
public AppEntry getEntryForTest() {
return mEntry;
}
}
}