Move NetworkPolicyEditor from Settings packge to settingslib.
Change-Id: I3a2f69c73d983643e65a0d4266cb98a203d5a813
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 7a5a60a..a10e1a8 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -134,7 +134,6 @@
import com.android.settings.net.ChartData;
import com.android.settings.net.ChartDataLoader;
import com.android.settings.net.DataUsageMeteredSettings;
-import com.android.settings.net.NetworkPolicyEditor;
import com.android.settings.net.SummaryForAllUidLoader;
import com.android.settings.net.UidDetail;
import com.android.settings.net.UidDetailProvider;
@@ -144,6 +143,7 @@
import com.android.settings.widget.ChartDataUsageView;
import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener;
import com.android.settings.widget.ChartNetworkSeriesView;
+import com.android.settingslib.NetworkPolicyEditor;
import com.google.android.collect.Lists;
import libcore.util.Objects;
diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java
index ec1dd38..59a8b92 100644
--- a/src/com/android/settings/net/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java
@@ -40,6 +40,7 @@
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.NetworkPolicyEditor;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/com/android/settings/net/NetworkPolicyEditor.java b/src/com/android/settings/net/NetworkPolicyEditor.java
deleted file mode 100644
index 1268c3f..0000000
--- a/src/com/android/settings/net/NetworkPolicyEditor.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.net;
-
-import static android.net.NetworkPolicy.CYCLE_NONE;
-import static android.net.NetworkPolicy.LIMIT_DISABLED;
-import static android.net.NetworkPolicy.SNOOZE_NEVER;
-import static android.net.NetworkPolicy.WARNING_DISABLED;
-import static android.net.NetworkTemplate.MATCH_WIFI;
-import static com.android.internal.util.Preconditions.checkNotNull;
-
-import android.net.NetworkPolicy;
-import android.net.NetworkPolicyManager;
-import android.net.NetworkTemplate;
-import android.net.wifi.WifiInfo;
-import android.os.AsyncTask;
-import android.text.TextUtils;
-import android.text.format.Time;
-
-import com.google.android.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Utility class to modify list of {@link NetworkPolicy}. Specifically knows
- * about which policies can coexist. This editor offers thread safety when
- * talking with {@link NetworkPolicyManager}.
- */
-public class NetworkPolicyEditor {
- // TODO: be more robust when missing policies from service
-
- public static final boolean ENABLE_SPLIT_POLICIES = false;
-
- private NetworkPolicyManager mPolicyManager;
- private ArrayList<NetworkPolicy> mPolicies = Lists.newArrayList();
-
- public NetworkPolicyEditor(NetworkPolicyManager policyManager) {
- mPolicyManager = checkNotNull(policyManager);
- }
-
- public void read() {
- final NetworkPolicy[] policies = mPolicyManager.getNetworkPolicies();
-
- boolean modified = false;
- mPolicies.clear();
- for (NetworkPolicy policy : policies) {
- // TODO: find better place to clamp these
- if (policy.limitBytes < -1) {
- policy.limitBytes = LIMIT_DISABLED;
- modified = true;
- }
- if (policy.warningBytes < -1) {
- policy.warningBytes = WARNING_DISABLED;
- modified = true;
- }
-
- mPolicies.add(policy);
- }
-
- // when we cleaned policies above, write back changes
- if (modified) writeAsync();
- }
-
- public void writeAsync() {
- // TODO: consider making more robust by passing through service
- final NetworkPolicy[] policies = mPolicies.toArray(new NetworkPolicy[mPolicies.size()]);
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- write(policies);
- return null;
- }
- }.execute();
- }
-
- public void write(NetworkPolicy[] policies) {
- mPolicyManager.setNetworkPolicies(policies);
- }
-
- public boolean hasLimitedPolicy(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return policy != null && policy.limitBytes != LIMIT_DISABLED;
- }
-
- public NetworkPolicy getOrCreatePolicy(NetworkTemplate template) {
- NetworkPolicy policy = getPolicy(template);
- if (policy == null) {
- policy = buildDefaultPolicy(template);
- mPolicies.add(policy);
- }
- return policy;
- }
-
- public NetworkPolicy getPolicy(NetworkTemplate template) {
- for (NetworkPolicy policy : mPolicies) {
- if (policy.template.equals(template)) {
- return policy;
- }
- }
- return null;
- }
-
- public NetworkPolicy getPolicyMaybeUnquoted(NetworkTemplate template) {
- NetworkPolicy policy = getPolicy(template);
- if (policy != null) {
- return policy;
- } else {
- return getPolicy(buildUnquotedNetworkTemplate(template));
- }
- }
-
- @Deprecated
- private static NetworkPolicy buildDefaultPolicy(NetworkTemplate template) {
- // TODO: move this into framework to share with NetworkPolicyManagerService
- final int cycleDay;
- final String cycleTimezone;
- final boolean metered;
-
- if (template.getMatchRule() == MATCH_WIFI) {
- cycleDay = CYCLE_NONE;
- cycleTimezone = Time.TIMEZONE_UTC;
- metered = false;
- } else {
- final Time time = new Time();
- time.setToNow();
- cycleDay = time.monthDay;
- cycleTimezone = time.timezone;
- metered = true;
- }
-
- return new NetworkPolicy(template, cycleDay, cycleTimezone, WARNING_DISABLED,
- LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, metered, true);
- }
-
- public int getPolicyCycleDay(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return (policy != null) ? policy.cycleDay : -1;
- }
-
- public void setPolicyCycleDay(NetworkTemplate template, int cycleDay, String cycleTimezone) {
- final NetworkPolicy policy = getOrCreatePolicy(template);
- policy.cycleDay = cycleDay;
- policy.cycleTimezone = cycleTimezone;
- policy.inferred = false;
- policy.clearSnooze();
- writeAsync();
- }
-
- public long getPolicyWarningBytes(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return (policy != null) ? policy.warningBytes : WARNING_DISABLED;
- }
-
- public void setPolicyWarningBytes(NetworkTemplate template, long warningBytes) {
- final NetworkPolicy policy = getOrCreatePolicy(template);
- policy.warningBytes = warningBytes;
- policy.inferred = false;
- policy.clearSnooze();
- writeAsync();
- }
-
- public long getPolicyLimitBytes(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return (policy != null) ? policy.limitBytes : LIMIT_DISABLED;
- }
-
- public void setPolicyLimitBytes(NetworkTemplate template, long limitBytes) {
- final NetworkPolicy policy = getOrCreatePolicy(template);
- policy.limitBytes = limitBytes;
- policy.inferred = false;
- policy.clearSnooze();
- writeAsync();
- }
-
- public boolean getPolicyMetered(NetworkTemplate template) {
- NetworkPolicy policy = getPolicy(template);
- if (policy != null) {
- return policy.metered;
- } else {
- return false;
- }
- }
-
- public void setPolicyMetered(NetworkTemplate template, boolean metered) {
- boolean modified = false;
-
- NetworkPolicy policy = getPolicy(template);
- if (metered) {
- if (policy == null) {
- policy = buildDefaultPolicy(template);
- policy.metered = true;
- policy.inferred = false;
- mPolicies.add(policy);
- modified = true;
- } else if (!policy.metered) {
- policy.metered = true;
- policy.inferred = false;
- modified = true;
- }
-
- } else {
- if (policy == null) {
- // ignore when policy doesn't exist
- } else if (policy.metered) {
- policy.metered = false;
- policy.inferred = false;
- modified = true;
- }
- }
-
- // Remove legacy unquoted policies while we're here
- final NetworkTemplate unquoted = buildUnquotedNetworkTemplate(template);
- final NetworkPolicy unquotedPolicy = getPolicy(unquoted);
- if (unquotedPolicy != null) {
- mPolicies.remove(unquotedPolicy);
- modified = true;
- }
-
- if (modified) writeAsync();
- }
-
- /**
- * Build a revised {@link NetworkTemplate} that matches the same rule, but
- * with an unquoted {@link NetworkTemplate#getNetworkId()}. Used to work
- * around legacy bugs.
- */
- private static NetworkTemplate buildUnquotedNetworkTemplate(NetworkTemplate template) {
- if (template == null) return null;
- final String networkId = template.getNetworkId();
- final String strippedNetworkId = WifiInfo.removeDoubleQuotes(networkId);
- if (!TextUtils.equals(strippedNetworkId, networkId)) {
- return new NetworkTemplate(
- template.getMatchRule(), template.getSubscriberId(), strippedNetworkId);
- } else {
- return null;
- }
- }
-}