Merge "Add policy transparency for metered data related settings."
This commit is contained in:
committed by
Android (Google) Code Review
commit
67ddb0ae00
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user