diff --git a/res/layout/data_usage_bytes_editor.xml b/res/layout/data_usage_bytes_editor.xml
index 8de74505319..2878c3e4560 100644
--- a/res/layout/data_usage_bytes_editor.xml
+++ b/res/layout/data_usage_bytes_editor.xml
@@ -17,25 +17,27 @@
-
+ android:focusableInTouchMode="true"
+ android:inputType="numberDecimal" />
-
+ android:entries="@array/bytes_picker_sizes" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a0a0c978cda..fd21db1f297 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7178,4 +7178,9 @@
Not using battery optimization
+
+ - @*android:string/megabyteShort
+ - @*android:string/gigabyteShort
+
+
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 58079925e45..e00170db256 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -30,7 +30,9 @@ import android.text.format.Time;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.widget.EditText;
import android.widget.NumberPicker;
+import android.widget.Spinner;
import com.android.settings.InstrumentedFragment;
import com.android.settings.R;
import com.android.settingslib.NetworkPolicyEditor;
@@ -172,7 +174,8 @@ public class BillingCycleSettings extends DataUsageBase implements
final LayoutInflater dialogInflater = LayoutInflater.from(context);
mView = dialogInflater.inflate(R.layout.data_usage_bytes_editor, null, false);
- setupPicker((NumberPicker) mView.findViewById(R.id.bytes));
+ setupPicker((EditText) mView.findViewById(R.id.bytes),
+ (Spinner) mView.findViewById(R.id.size_spinner));
return new AlertDialog.Builder(context)
.setTitle(R.string.data_usage_warning_editor_title)
.setView(mView)
@@ -180,32 +183,28 @@ public class BillingCycleSettings extends DataUsageBase implements
.create();
}
- private void setupPicker(NumberPicker bytesPicker) {
+ private void setupPicker(EditText bytesPicker, Spinner type) {
final BillingCycleSettings target = (BillingCycleSettings) getTargetFragment();
final NetworkPolicyEditor editor = target.services.mPolicyEditor;
final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
- final long warningBytes = editor.getPolicyWarningBytes(template);
- final long limitBytes = editor.getPolicyLimitBytes(template);
+ final long bytes = isLimit ? editor.getPolicyLimitBytes(template)
+ : editor.getPolicyWarningBytes(template);
+ final long limitDisabled = isLimit ? LIMIT_DISABLED : WARNING_DISABLED;
- if (isLimit) {
- bytesPicker.setMaxValue(Integer.MAX_VALUE);
- if (warningBytes != WARNING_DISABLED) {
- bytesPicker.setMinValue((int) (warningBytes / MB_IN_BYTES) + 1);
- } else {
- bytesPicker.setMinValue(0);
- }
+ if (bytes > 1.5f * GB_IN_BYTES) {
+ bytesPicker.setText(formatText(bytes / (float) GB_IN_BYTES));
+ type.setSelection(1);
} else {
- bytesPicker.setMinValue(0);
- if (limitBytes != LIMIT_DISABLED) {
- bytesPicker.setMaxValue((int) (limitBytes / MB_IN_BYTES) - 1);
- } else {
- bytesPicker.setMaxValue(Integer.MAX_VALUE);
- }
+ bytesPicker.setText(formatText(bytes / (float) MB_IN_BYTES));
+ type.setSelection(0);
}
- bytesPicker.setValue((int) ((isLimit ? limitBytes : warningBytes) / MB_IN_BYTES));
- bytesPicker.setWrapSelectorWheel(false);
+ }
+
+ private String formatText(float v) {
+ v = Math.round(v * 100) / 100f;
+ return String.valueOf(v);
}
@Override
@@ -218,11 +217,15 @@ public class BillingCycleSettings extends DataUsageBase implements
final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
- NumberPicker bytesPicker = (NumberPicker) mView.findViewById(R.id.bytes);
- // clear focus to finish pending text edits
- bytesPicker.clearFocus();
+ EditText bytesField = (EditText) mView.findViewById(R.id.bytes);
+ Spinner spinner = (Spinner) mView.findViewById(R.id.size_spinner);
- final long bytes = bytesPicker.getValue() * MB_IN_BYTES;
+ String bytesString = bytesField.getText().toString();
+ if (bytesString.isEmpty()) {
+ bytesString = "0";
+ }
+ final long bytes = (long) (Float.valueOf(bytesString)
+ * (spinner.getSelectedItemPosition() == 0 ? MB_IN_BYTES : GB_IN_BYTES));
if (isLimit) {
editor.setPolicyLimitBytes(template, bytes);
} else {