Iterate NetworkPolicy towards SubscriptionPlan.
As part of getting Settings ready to roll towards SubscriptionPlan, reduce references to NetworkPolicy internal fields. All usage cycle details are now obtained from an Iterator which converts to SubscriptionPlan under the hood. Bug: 63391323 Test: bit FrameworksServicesTests:com.android.server.NetworkPolicyManagerServiceTest Exempt-From-Owner-Approval: Bug 63673347 Change-Id: I0e1357eef092a328c05f6a709aba0f106554631e
This commit is contained in:
@@ -14,9 +14,10 @@
|
|||||||
|
|
||||||
package com.android.settings.datausage;
|
package com.android.settings.datausage;
|
||||||
|
|
||||||
|
import static android.net.NetworkPolicy.CYCLE_NONE;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.NetworkPolicy;
|
|
||||||
import android.net.NetworkTemplate;
|
import android.net.NetworkTemplate;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
@@ -32,7 +33,6 @@ public class BillingCyclePreference extends Preference implements TemplatePrefer
|
|||||||
|
|
||||||
private NetworkTemplate mTemplate;
|
private NetworkTemplate mTemplate;
|
||||||
private NetworkServices mServices;
|
private NetworkServices mServices;
|
||||||
private NetworkPolicy mPolicy;
|
|
||||||
private int mSubId;
|
private int mSubId;
|
||||||
|
|
||||||
public BillingCyclePreference(Context context, AttributeSet attrs) {
|
public BillingCyclePreference(Context context, AttributeSet attrs) {
|
||||||
@@ -57,16 +57,18 @@ public class BillingCyclePreference extends Preference implements TemplatePrefer
|
|||||||
mTemplate = template;
|
mTemplate = template;
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mServices = services;
|
mServices = services;
|
||||||
mPolicy = services.mPolicyEditor.getPolicy(mTemplate);
|
final int cycleDay = services.mPolicyEditor.getPolicyCycleDay(mTemplate);
|
||||||
setSummary(getContext().getString(R.string.billing_cycle_fragment_summary, mPolicy != null
|
if (cycleDay != CYCLE_NONE) {
|
||||||
? mPolicy.cycleDay
|
setSummary(getContext().getString(R.string.billing_cycle_fragment_summary, cycleDay));
|
||||||
: "1"));
|
} else {
|
||||||
|
setSummary(null);
|
||||||
|
}
|
||||||
setIntent(getIntent());
|
setIntent(getIntent());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateEnabled() {
|
private void updateEnabled() {
|
||||||
try {
|
try {
|
||||||
setEnabled(mPolicy != null && mServices.mNetworkService.isBandwidthControlEnabled()
|
setEnabled(mServices.mNetworkService.isBandwidthControlEnabled()
|
||||||
&& mServices.mTelephonyManager.getDataEnabled(mSubId)
|
&& mServices.mTelephonyManager.getDataEnabled(mSubId)
|
||||||
&& mServices.mUserManager.isAdminUser());
|
&& mServices.mUserManager.isAdminUser());
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
@@ -14,9 +14,12 @@
|
|||||||
|
|
||||||
package com.android.settings.datausage;
|
package com.android.settings.datausage;
|
||||||
|
|
||||||
|
import static android.net.NetworkPolicy.CYCLE_NONE;
|
||||||
|
import static android.net.NetworkPolicy.LIMIT_DISABLED;
|
||||||
|
import static android.net.NetworkPolicy.WARNING_DISABLED;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.DialogFragment;
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -42,9 +45,6 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
|||||||
import com.android.settingslib.NetworkPolicyEditor;
|
import com.android.settingslib.NetworkPolicyEditor;
|
||||||
import com.android.settingslib.net.DataUsageController;
|
import com.android.settingslib.net.DataUsageController;
|
||||||
|
|
||||||
import static android.net.NetworkPolicy.LIMIT_DISABLED;
|
|
||||||
import static android.net.NetworkPolicy.WARNING_DISABLED;
|
|
||||||
|
|
||||||
public class BillingCycleSettings extends DataUsageBase implements
|
public class BillingCycleSettings extends DataUsageBase implements
|
||||||
Preference.OnPreferenceChangeListener, DataUsageEditController {
|
Preference.OnPreferenceChangeListener, DataUsageEditController {
|
||||||
|
|
||||||
@@ -100,11 +100,15 @@ public class BillingCycleSettings extends DataUsageBase implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updatePrefs() {
|
private void updatePrefs() {
|
||||||
NetworkPolicy policy = services.mPolicyEditor.getPolicy(mNetworkTemplate);
|
final int cycleDay = services.mPolicyEditor.getPolicyCycleDay(mNetworkTemplate);
|
||||||
mBillingCycle.setSummary(getString(R.string.billing_cycle_fragment_summary, policy != null ?
|
if (cycleDay != CYCLE_NONE) {
|
||||||
policy.cycleDay : 1));
|
mBillingCycle.setSummary(getString(R.string.billing_cycle_fragment_summary, cycleDay));
|
||||||
if (policy != null && policy.warningBytes != WARNING_DISABLED) {
|
} else {
|
||||||
mDataWarning.setSummary(Formatter.formatFileSize(getContext(), policy.warningBytes));
|
mBillingCycle.setSummary(null);
|
||||||
|
}
|
||||||
|
final long warningBytes = services.mPolicyEditor.getPolicyWarningBytes(mNetworkTemplate);
|
||||||
|
if (warningBytes != WARNING_DISABLED) {
|
||||||
|
mDataWarning.setSummary(Formatter.formatFileSize(getContext(), warningBytes));
|
||||||
mDataWarning.setEnabled(true);
|
mDataWarning.setEnabled(true);
|
||||||
mEnableDataWarning.setChecked(true);
|
mEnableDataWarning.setChecked(true);
|
||||||
} else {
|
} else {
|
||||||
@@ -112,8 +116,9 @@ public class BillingCycleSettings extends DataUsageBase implements
|
|||||||
mDataWarning.setEnabled(false);
|
mDataWarning.setEnabled(false);
|
||||||
mEnableDataWarning.setChecked(false);
|
mEnableDataWarning.setChecked(false);
|
||||||
}
|
}
|
||||||
if (policy != null && policy.limitBytes != LIMIT_DISABLED) {
|
final long limitBytes = services.mPolicyEditor.getPolicyWarningBytes(mNetworkTemplate);
|
||||||
mDataLimit.setSummary(Formatter.formatFileSize(getContext(), policy.limitBytes));
|
if (limitBytes != LIMIT_DISABLED) {
|
||||||
|
mDataLimit.setSummary(Formatter.formatFileSize(getContext(), limitBytes));
|
||||||
mDataLimit.setEnabled(true);
|
mDataLimit.setEnabled(true);
|
||||||
mEnableDataLimit.setChecked(true);
|
mEnableDataLimit.setChecked(true);
|
||||||
} else {
|
} else {
|
||||||
@@ -305,7 +310,7 @@ public class BillingCycleSettings extends DataUsageBase implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to edit {@link NetworkPolicy#cycleDay}.
|
* Dialog to edit {@link NetworkPolicy}.
|
||||||
*/
|
*/
|
||||||
public static class CycleEditorFragment extends InstrumentedDialogFragment implements
|
public static class CycleEditorFragment extends InstrumentedDialogFragment implements
|
||||||
DialogInterface.OnClickListener {
|
DialogInterface.OnClickListener {
|
||||||
|
@@ -15,17 +15,21 @@ package com.android.settings.datausage;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.NetworkPolicy;
|
import android.net.NetworkPolicy;
|
||||||
|
import android.net.NetworkPolicyManager;
|
||||||
import android.net.NetworkStatsHistory;
|
import android.net.NetworkStatsHistory;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
import android.util.Pair;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settingslib.net.ChartData;
|
import com.android.settingslib.net.ChartData;
|
||||||
|
|
||||||
import libcore.util.Objects;
|
import libcore.util.Objects;
|
||||||
|
|
||||||
import static android.net.NetworkPolicyManager.computeLastCycleBoundary;
|
import java.time.ZonedDateTime;
|
||||||
import static android.net.NetworkPolicyManager.computeNextCycleBoundary;
|
import java.util.Iterator;
|
||||||
|
|
||||||
public class CycleAdapter extends ArrayAdapter<CycleAdapter.CycleItem> {
|
public class CycleAdapter extends ArrayAdapter<CycleAdapter.CycleItem> {
|
||||||
|
|
||||||
@@ -61,9 +65,9 @@ public class CycleAdapter extends ArrayAdapter<CycleAdapter.CycleItem> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rebuild list based on {@link NetworkPolicy#cycleDay}
|
* Rebuild list based on {@link NetworkPolicy} and available
|
||||||
* and available {@link NetworkStatsHistory} data. Always selects the newest
|
* {@link NetworkStatsHistory} data. Always selects the newest item,
|
||||||
* item, updating the inspection range on chartData.
|
* updating the inspection range on chartData.
|
||||||
*/
|
*/
|
||||||
public boolean updateCycleList(NetworkPolicy policy, ChartData chartData) {
|
public boolean updateCycleList(NetworkPolicy policy, ChartData chartData) {
|
||||||
// stash away currently selected cycle to try restoring below
|
// stash away currently selected cycle to try restoring below
|
||||||
@@ -87,12 +91,12 @@ public class CycleAdapter extends ArrayAdapter<CycleAdapter.CycleItem> {
|
|||||||
|
|
||||||
boolean hasCycles = false;
|
boolean hasCycles = false;
|
||||||
if (policy != null) {
|
if (policy != null) {
|
||||||
// find the next cycle boundary
|
final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = NetworkPolicyManager
|
||||||
long cycleEnd = computeNextCycleBoundary(historyEnd, policy);
|
.cycleIterator(policy);
|
||||||
|
while (it.hasNext()) {
|
||||||
// walk backwards, generating all valid cycle ranges
|
final Pair<ZonedDateTime, ZonedDateTime> cycle = it.next();
|
||||||
while (cycleEnd > historyStart) {
|
final long cycleStart = cycle.first.toInstant().toEpochMilli();
|
||||||
final long cycleStart = computeLastCycleBoundary(cycleEnd, policy);
|
final long cycleEnd = cycle.second.toInstant().toEpochMilli();
|
||||||
|
|
||||||
final boolean includeCycle;
|
final boolean includeCycle;
|
||||||
if (chartData != null) {
|
if (chartData != null) {
|
||||||
@@ -106,7 +110,6 @@ public class CycleAdapter extends ArrayAdapter<CycleAdapter.CycleItem> {
|
|||||||
add(new CycleAdapter.CycleItem(context, cycleStart, cycleEnd));
|
add(new CycleAdapter.CycleItem(context, cycleStart, cycleEnd));
|
||||||
hasCycles = true;
|
hasCycles = true;
|
||||||
}
|
}
|
||||||
cycleEnd = cycleStart;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user