Display and parse numbers properly in all locales
Change-Id: Iddf74fd6ed3139eede27733b69a31ce2fa7d1a92 Fix: 37311645 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -14,13 +14,16 @@
|
|||||||
|
|
||||||
package com.android.settings.datausage;
|
package com.android.settings.datausage;
|
||||||
|
|
||||||
|
import static android.net.NetworkPolicy.LIMIT_DISABLED;
|
||||||
|
import static android.net.NetworkPolicy.WARNING_DISABLED;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.DialogFragment;
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.icu.text.NumberFormat;
|
||||||
import android.net.NetworkPolicy;
|
import android.net.NetworkPolicy;
|
||||||
import android.net.NetworkTemplate;
|
import android.net.NetworkTemplate;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -42,8 +45,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
|||||||
import com.android.settingslib.NetworkPolicyEditor;
|
import com.android.settingslib.NetworkPolicyEditor;
|
||||||
import com.android.settingslib.net.DataUsageController;
|
import com.android.settingslib.net.DataUsageController;
|
||||||
|
|
||||||
import static android.net.NetworkPolicy.LIMIT_DISABLED;
|
import java.text.ParseException;
|
||||||
import static android.net.NetworkPolicy.WARNING_DISABLED;
|
|
||||||
|
|
||||||
public class BillingCycleSettings extends DataUsageBase implements
|
public class BillingCycleSettings extends DataUsageBase implements
|
||||||
Preference.OnPreferenceChangeListener, DataUsageEditController {
|
Preference.OnPreferenceChangeListener, DataUsageEditController {
|
||||||
@@ -246,7 +248,6 @@ public class BillingCycleSettings extends DataUsageBase implements
|
|||||||
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
|
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
|
||||||
final long bytes = isLimit ? editor.getPolicyLimitBytes(template)
|
final long bytes = isLimit ? editor.getPolicyLimitBytes(template)
|
||||||
: editor.getPolicyWarningBytes(template);
|
: editor.getPolicyWarningBytes(template);
|
||||||
final long limitDisabled = isLimit ? LIMIT_DISABLED : WARNING_DISABLED;
|
|
||||||
|
|
||||||
if (bytes > 1.5f * GB_IN_BYTES) {
|
if (bytes > 1.5f * GB_IN_BYTES) {
|
||||||
final String bytesText = formatText(bytes / (float) GB_IN_BYTES);
|
final String bytesText = formatText(bytes / (float) GB_IN_BYTES);
|
||||||
@@ -265,7 +266,7 @@ public class BillingCycleSettings extends DataUsageBase implements
|
|||||||
|
|
||||||
private String formatText(float v) {
|
private String formatText(float v) {
|
||||||
v = Math.round(v * 100) / 100f;
|
v = Math.round(v * 100) / 100f;
|
||||||
return String.valueOf(v);
|
return NumberFormat.getInstance().format(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -278,14 +279,19 @@ public class BillingCycleSettings extends DataUsageBase implements
|
|||||||
|
|
||||||
final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
|
final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
|
||||||
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
|
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
|
||||||
EditText bytesField = (EditText) mView.findViewById(R.id.bytes);
|
EditText bytesField = mView.findViewById(R.id.bytes);
|
||||||
Spinner spinner = (Spinner) mView.findViewById(R.id.size_spinner);
|
Spinner spinner = mView.findViewById(R.id.size_spinner);
|
||||||
|
|
||||||
String bytesString = bytesField.getText().toString();
|
String bytesString = bytesField.getText().toString();
|
||||||
if (bytesString.isEmpty()) {
|
|
||||||
bytesString = "0";
|
double input = 0;
|
||||||
|
try {
|
||||||
|
input = NumberFormat.getInstance().parse(bytesString).doubleValue();
|
||||||
|
} catch (ParseException e) {
|
||||||
|
Log.w(TAG, "Failed to parse byte value " + bytesString);
|
||||||
}
|
}
|
||||||
final long bytes = (long) (Float.valueOf(bytesString)
|
|
||||||
|
final long bytes = (long) (input
|
||||||
* (spinner.getSelectedItemPosition() == 0 ? MB_IN_BYTES : GB_IN_BYTES));
|
* (spinner.getSelectedItemPosition() == 0 ? MB_IN_BYTES : GB_IN_BYTES));
|
||||||
|
|
||||||
// to fix the overflow problem
|
// to fix the overflow problem
|
||||||
|
@@ -16,16 +16,17 @@
|
|||||||
package com.android.settings.utils;
|
package com.android.settings.utils;
|
||||||
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.robolectric.RobolectricTestRunner;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
import com.android.settings.SettingsRobolectricTestRunner;
|
||||||
|
import com.android.settings.TestConfig;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||||
public class ThreadUtilsTest {
|
public class ThreadUtilsTest {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user