diff --git a/src/com/android/settings/datausage/BillingCyclePreference.java b/src/com/android/settings/datausage/BillingCyclePreference.java index beb0ba14530..202dc80d038 100644 --- a/src/com/android/settings/datausage/BillingCyclePreference.java +++ b/src/com/android/settings/datausage/BillingCyclePreference.java @@ -14,9 +14,10 @@ package com.android.settings.datausage; +import static android.net.NetworkPolicy.CYCLE_NONE; + import android.content.Context; import android.content.Intent; -import android.net.NetworkPolicy; import android.net.NetworkTemplate; import android.os.Bundle; import android.os.RemoteException; @@ -32,7 +33,6 @@ public class BillingCyclePreference extends Preference implements TemplatePrefer private NetworkTemplate mTemplate; private NetworkServices mServices; - private NetworkPolicy mPolicy; private int mSubId; public BillingCyclePreference(Context context, AttributeSet attrs) { @@ -57,16 +57,18 @@ public class BillingCyclePreference extends Preference implements TemplatePrefer mTemplate = template; mSubId = subId; mServices = services; - mPolicy = services.mPolicyEditor.getPolicy(mTemplate); - setSummary(getContext().getString(R.string.billing_cycle_fragment_summary, mPolicy != null - ? mPolicy.cycleDay - : "1")); + final int cycleDay = services.mPolicyEditor.getPolicyCycleDay(mTemplate); + if (cycleDay != CYCLE_NONE) { + setSummary(getContext().getString(R.string.billing_cycle_fragment_summary, cycleDay)); + } else { + setSummary(null); + } setIntent(getIntent()); } private void updateEnabled() { try { - setEnabled(mPolicy != null && mServices.mNetworkService.isBandwidthControlEnabled() + setEnabled(mServices.mNetworkService.isBandwidthControlEnabled() && mServices.mTelephonyManager.getDataEnabled(mSubId) && mServices.mUserManager.isAdminUser()); } catch (RemoteException e) { diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java index 1025ad7e7dc..050e4fccca8 100644 --- a/src/com/android/settings/datausage/BillingCycleSettings.java +++ b/src/com/android/settings/datausage/BillingCycleSettings.java @@ -14,9 +14,12 @@ 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.Dialog; -import android.app.DialogFragment; import android.app.Fragment; import android.content.Context; import android.content.DialogInterface; @@ -42,9 +45,6 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settingslib.NetworkPolicyEditor; 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 Preference.OnPreferenceChangeListener, DataUsageEditController { @@ -100,11 +100,15 @@ public class BillingCycleSettings extends DataUsageBase implements } private void updatePrefs() { - NetworkPolicy policy = services.mPolicyEditor.getPolicy(mNetworkTemplate); - mBillingCycle.setSummary(getString(R.string.billing_cycle_fragment_summary, policy != null ? - policy.cycleDay : 1)); - if (policy != null && policy.warningBytes != WARNING_DISABLED) { - mDataWarning.setSummary(Formatter.formatFileSize(getContext(), policy.warningBytes)); + final int cycleDay = services.mPolicyEditor.getPolicyCycleDay(mNetworkTemplate); + if (cycleDay != CYCLE_NONE) { + mBillingCycle.setSummary(getString(R.string.billing_cycle_fragment_summary, cycleDay)); + } else { + mBillingCycle.setSummary(null); + } + final long warningBytes = services.mPolicyEditor.getPolicyWarningBytes(mNetworkTemplate); + if (warningBytes != WARNING_DISABLED) { + mDataWarning.setSummary(Formatter.formatFileSize(getContext(), warningBytes)); mDataWarning.setEnabled(true); mEnableDataWarning.setChecked(true); } else { @@ -112,8 +116,9 @@ public class BillingCycleSettings extends DataUsageBase implements mDataWarning.setEnabled(false); mEnableDataWarning.setChecked(false); } - if (policy != null && policy.limitBytes != LIMIT_DISABLED) { - mDataLimit.setSummary(Formatter.formatFileSize(getContext(), policy.limitBytes)); + final long limitBytes = services.mPolicyEditor.getPolicyWarningBytes(mNetworkTemplate); + if (limitBytes != LIMIT_DISABLED) { + mDataLimit.setSummary(Formatter.formatFileSize(getContext(), limitBytes)); mDataLimit.setEnabled(true); mEnableDataLimit.setChecked(true); } 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 DialogInterface.OnClickListener { diff --git a/src/com/android/settings/datausage/CycleAdapter.java b/src/com/android/settings/datausage/CycleAdapter.java index 67e62cbbaa9..01ba0b592be 100644 --- a/src/com/android/settings/datausage/CycleAdapter.java +++ b/src/com/android/settings/datausage/CycleAdapter.java @@ -15,17 +15,21 @@ package com.android.settings.datausage; import android.content.Context; import android.net.NetworkPolicy; +import android.net.NetworkPolicyManager; import android.net.NetworkStatsHistory; import android.text.format.DateUtils; +import android.util.Pair; import android.widget.AdapterView; import android.widget.ArrayAdapter; + import com.android.settings.R; import com.android.settings.Utils; import com.android.settingslib.net.ChartData; + import libcore.util.Objects; -import static android.net.NetworkPolicyManager.computeLastCycleBoundary; -import static android.net.NetworkPolicyManager.computeNextCycleBoundary; +import java.time.ZonedDateTime; +import java.util.Iterator; public class CycleAdapter extends ArrayAdapter { @@ -61,9 +65,9 @@ public class CycleAdapter extends ArrayAdapter { } /** - * Rebuild list based on {@link NetworkPolicy#cycleDay} - * and available {@link NetworkStatsHistory} data. Always selects the newest - * item, updating the inspection range on chartData. + * Rebuild list based on {@link NetworkPolicy} and available + * {@link NetworkStatsHistory} data. Always selects the newest item, + * updating the inspection range on chartData. */ public boolean updateCycleList(NetworkPolicy policy, ChartData chartData) { // stash away currently selected cycle to try restoring below @@ -87,12 +91,12 @@ public class CycleAdapter extends ArrayAdapter { boolean hasCycles = false; if (policy != null) { - // find the next cycle boundary - long cycleEnd = computeNextCycleBoundary(historyEnd, policy); - - // walk backwards, generating all valid cycle ranges - while (cycleEnd > historyStart) { - final long cycleStart = computeLastCycleBoundary(cycleEnd, policy); + final Iterator> it = NetworkPolicyManager + .cycleIterator(policy); + while (it.hasNext()) { + final Pair cycle = it.next(); + final long cycleStart = cycle.first.toInstant().toEpochMilli(); + final long cycleEnd = cycle.second.toInstant().toEpochMilli(); final boolean includeCycle; if (chartData != null) { @@ -106,7 +110,6 @@ public class CycleAdapter extends ArrayAdapter { add(new CycleAdapter.CycleItem(context, cycleStart, cycleEnd)); hasCycles = true; } - cycleEnd = cycleStart; } }