From 47f51fac3548c31cf318997fff2dd6fbcd64bb34 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 13 Jul 2017 16:47:51 -0600 Subject: [PATCH] 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 --- .../datausage/BillingCyclePreference.java | 16 +++++----- .../datausage/BillingCycleSettings.java | 29 +++++++++++-------- .../settings/datausage/CycleAdapter.java | 27 +++++++++-------- 3 files changed, 41 insertions(+), 31 deletions(-) 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; } }