summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2011-08-17 17:08:19 -0700
committerJeff Sharkey <jsharkey@android.com>2011-08-18 12:01:29 -0700
commit131f9d6e0f82017ceca8777bff00f7b65bcfd3a9 (patch)
treeecfb18397b43a6d211109befa56d8127f27acd68 /src
parent30dde0f5a07e1b15de21d6a278721d918c5900be (diff)
downloadpackages_apps_settings-131f9d6e0f82017ceca8777bff00f7b65bcfd3a9.zip
packages_apps_settings-131f9d6e0f82017ceca8777bff00f7b65bcfd3a9.tar.gz
packages_apps_settings-131f9d6e0f82017ceca8777bff00f7b65bcfd3a9.tar.bz2
Allow data usage policy on Wi-Fi networks.
Create NetworkPolicy when it doesn't already exist. Bug: 4646471, 5085110 Change-Id: I38b8b03689710df06d1734a4b4d9e12d98794154
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/DataUsageSummary.java72
-rw-r--r--src/com/android/settings/net/NetworkPolicyEditor.java36
2 files changed, 71 insertions, 37 deletions
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index ac9300f..b99264f 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -585,22 +585,8 @@ public class DataUsageSummary extends Fragment {
if (LOGD) Log.d(TAG, "updateBody() with currentTab=" + currentTab);
- if (TAB_WIFI.equals(currentTab)) {
- // wifi doesn't have any controls
- mDataEnabledView.setVisibility(View.GONE);
- mDisableAtLimitView.setVisibility(View.GONE);
- mTemplate = buildTemplateWifi();
-
- } else if (TAB_ETHERNET.equals(currentTab)) {
- // ethernet doesn't have any controls
- mDataEnabledView.setVisibility(View.GONE);
- mDisableAtLimitView.setVisibility(View.GONE);
- mTemplate = buildTemplateEthernet();
-
- } else {
- mDataEnabledView.setVisibility(View.VISIBLE);
- mDisableAtLimitView.setVisibility(View.VISIBLE);
- }
+ mDataEnabledView.setVisibility(View.VISIBLE);
+ mDisableAtLimitView.setVisibility(View.VISIBLE);
if (TAB_MOBILE.equals(currentTab)) {
setPreferenceTitle(mDataEnabledView, R.string.data_usage_enable_mobile);
@@ -619,6 +605,20 @@ public class DataUsageSummary extends Fragment {
setPreferenceTitle(mDisableAtLimitView, R.string.data_usage_disable_4g_limit);
// TODO: bind mDataEnabled to 4G radio state
mTemplate = buildTemplateMobile4g(getActiveSubscriberId(context));
+
+ } else if (TAB_WIFI.equals(currentTab)) {
+ mDataEnabledView.setVisibility(View.GONE);
+ setPreferenceTitle(mDisableAtLimitView, R.string.data_usage_disable_wifi_limit);
+ mTemplate = buildTemplateWifi();
+
+ } else if (TAB_ETHERNET.equals(currentTab)) {
+ // ethernet doesn't have any controls
+ mDataEnabledView.setVisibility(View.GONE);
+ mDisableAtLimitView.setVisibility(View.GONE);
+ mTemplate = buildTemplateEthernet();
+
+ } else {
+ throw new IllegalStateException("unknown tab: " + currentTab);
}
try {
@@ -847,7 +847,7 @@ public class DataUsageSummary extends Fragment {
}
}
- final NetworkPolicy policy = mPolicyEditor.getPolicy(mTemplate);
+ final NetworkPolicy policy = mPolicyEditor.getPolicy(mTemplate, true);
if (isNetworkPolicyModifiable()) {
mDisableAtLimitView.setVisibility(View.VISIBLE);
mDisableAtLimit.setChecked(policy != null && policy.limitBytes != LIMIT_DISABLED);
@@ -1365,41 +1365,57 @@ public class DataUsageSummary extends Fragment {
* {@link NetworkPolicy#limitBytes}.
*/
public static class ConfirmLimitFragment extends DialogFragment {
- private static final String EXTRA_MESSAGE_ID = "messageId";
+ private static final String EXTRA_MESSAGE = "message";
private static final String EXTRA_LIMIT_BYTES = "limitBytes";
public static void show(DataUsageSummary parent) {
- final Bundle args = new Bundle();
+ final Resources res = parent.getResources();
+
+ final CharSequence message;
+ final long limitBytes;
// TODO: customize default limits based on network template
final String currentTab = parent.mCurrentTab;
if (TAB_3G.equals(currentTab)) {
- args.putInt(EXTRA_MESSAGE_ID, R.string.data_usage_limit_dialog_3g);
- args.putLong(EXTRA_LIMIT_BYTES, 5 * GB_IN_BYTES);
+ message = buildDialogMessage(res, R.string.data_usage_tab_3g);
+ limitBytes = 5 * GB_IN_BYTES;
} else if (TAB_4G.equals(currentTab)) {
- args.putInt(EXTRA_MESSAGE_ID, R.string.data_usage_limit_dialog_4g);
- args.putLong(EXTRA_LIMIT_BYTES, 5 * GB_IN_BYTES);
+ message = buildDialogMessage(res, R.string.data_usage_tab_4g);
+ limitBytes = 5 * GB_IN_BYTES;
} else if (TAB_MOBILE.equals(currentTab)) {
- args.putInt(EXTRA_MESSAGE_ID, R.string.data_usage_limit_dialog_mobile);
- args.putLong(EXTRA_LIMIT_BYTES, 5 * GB_IN_BYTES);
+ message = buildDialogMessage(res, R.string.data_usage_list_mobile);
+ limitBytes = 5 * GB_IN_BYTES;
+ } else if (TAB_WIFI.equals(currentTab)) {
+ message = buildDialogMessage(res, R.string.data_usage_tab_wifi);
+ limitBytes = 5 * GB_IN_BYTES;
+ } else {
+ throw new IllegalArgumentException("unknown current tab: " + currentTab);
}
+ final Bundle args = new Bundle();
+ args.putCharSequence(EXTRA_MESSAGE, message);
+ args.putLong(EXTRA_LIMIT_BYTES, limitBytes);
+
final ConfirmLimitFragment dialog = new ConfirmLimitFragment();
dialog.setArguments(args);
dialog.setTargetFragment(parent, 0);
dialog.show(parent.getFragmentManager(), TAG_CONFIRM_LIMIT);
}
+ private static CharSequence buildDialogMessage(Resources res, int networkResId) {
+ return res.getString(R.string.data_usage_limit_dialog, res.getString(networkResId));
+ }
+
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Context context = getActivity();
- final int messageId = getArguments().getInt(EXTRA_MESSAGE_ID);
+ final CharSequence message = getArguments().getCharSequence(EXTRA_MESSAGE);
final long limitBytes = getArguments().getLong(EXTRA_LIMIT_BYTES);
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.data_usage_limit_dialog_title);
- builder.setMessage(messageId);
+ builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
@@ -1421,7 +1437,7 @@ public class DataUsageSummary extends Fragment {
private static final String EXTRA_CYCLE_DAY = "cycleDay";
public static void show(DataUsageSummary parent) {
- final NetworkPolicy policy = parent.mPolicyEditor.getPolicy(parent.mTemplate);
+ final NetworkPolicy policy = parent.mPolicyEditor.getPolicy(parent.mTemplate, false);
final Bundle args = new Bundle();
args.putInt(CycleEditorFragment.EXTRA_CYCLE_DAY, policy.cycleDay);
diff --git a/src/com/android/settings/net/NetworkPolicyEditor.java b/src/com/android/settings/net/NetworkPolicyEditor.java
index 9699bec..723c5cc 100644
--- a/src/com/android/settings/net/NetworkPolicyEditor.java
+++ b/src/com/android/settings/net/NetworkPolicyEditor.java
@@ -31,6 +31,7 @@ import android.net.NetworkPolicy;
import android.net.NetworkTemplate;
import android.os.AsyncTask;
import android.os.RemoteException;
+import android.text.format.Time;
import com.android.internal.util.Objects;
import com.google.android.collect.Lists;
@@ -92,35 +93,52 @@ public class NetworkPolicyEditor {
}
public boolean hasLimitedPolicy(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
+ final NetworkPolicy policy = getPolicy(template, false);
return policy != null && policy.limitBytes != LIMIT_DISABLED;
}
- public NetworkPolicy getPolicy(NetworkTemplate template) {
+ public NetworkPolicy getPolicy(NetworkTemplate template, boolean createDefault) {
for (NetworkPolicy policy : mPolicies) {
if (policy.template.equals(template)) {
return policy;
}
}
- return null;
+
+ if (createDefault) {
+ final NetworkPolicy policy = buildDefaultPolicy(template);
+ mPolicies.add(policy);
+ return policy;
+ } else {
+ return null;
+ }
+ }
+
+ private static NetworkPolicy buildDefaultPolicy(NetworkTemplate template) {
+ // TODO: move this into framework to share with NetworkPolicyManagerService
+ final Time time = new Time();
+ time.setToNow();
+ final int cycleDay = time.monthDay;
+
+ return new NetworkPolicy(
+ template, cycleDay, WARNING_DISABLED, LIMIT_DISABLED, SNOOZE_NEVER);
}
public void setPolicyCycleDay(NetworkTemplate template, int cycleDay) {
- final NetworkPolicy policy = getPolicy(template);
+ final NetworkPolicy policy = getPolicy(template, true);
policy.cycleDay = cycleDay;
policy.lastSnooze = SNOOZE_NEVER;
writeAsync();
}
public void setPolicyWarningBytes(NetworkTemplate template, long warningBytes) {
- final NetworkPolicy policy = getPolicy(template);
+ final NetworkPolicy policy = getPolicy(template, true);
policy.warningBytes = warningBytes;
policy.lastSnooze = SNOOZE_NEVER;
writeAsync();
}
public void setPolicyLimitBytes(NetworkTemplate template, long limitBytes) {
- final NetworkPolicy policy = getPolicy(template);
+ final NetworkPolicy policy = getPolicy(template, true);
policy.limitBytes = limitBytes;
policy.lastSnooze = SNOOZE_NEVER;
writeAsync();
@@ -158,8 +176,8 @@ public class NetworkPolicyEditor {
} else if (beforeSplit && !split) {
// combine, picking most restrictive policy
- final NetworkPolicy policy3g = getPolicy(template3g);
- final NetworkPolicy policy4g = getPolicy(template4g);
+ final NetworkPolicy policy3g = getPolicy(template3g, false);
+ final NetworkPolicy policy4g = getPolicy(template4g, false);
final NetworkPolicy restrictive = policy3g.compareTo(policy4g) < 0 ? policy3g
: policy4g;
@@ -172,7 +190,7 @@ public class NetworkPolicyEditor {
} else if (!beforeSplit && split) {
// duplicate existing policy into two rules
- final NetworkPolicy policyAll = getPolicy(templateAll);
+ final NetworkPolicy policyAll = getPolicy(templateAll, false);
mPolicies.remove(policyAll);
mPolicies.add(
new NetworkPolicy(template3g, policyAll.cycleDay, policyAll.warningBytes,