diff options
author | Jeff Sharkey <jsharkey@android.com> | 2011-08-17 17:08:19 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2011-08-18 12:01:29 -0700 |
commit | 131f9d6e0f82017ceca8777bff00f7b65bcfd3a9 (patch) | |
tree | ecfb18397b43a6d211109befa56d8127f27acd68 /src | |
parent | 30dde0f5a07e1b15de21d6a278721d918c5900be (diff) | |
download | packages_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.java | 72 | ||||
-rw-r--r-- | src/com/android/settings/net/NetworkPolicyEditor.java | 36 |
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, |