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;
|
||||
|
||||
import static android.net.NetworkPolicy.LIMIT_DISABLED;
|
||||
import static android.net.NetworkPolicy.WARNING_DISABLED;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.Resources;
|
||||
import android.icu.text.NumberFormat;
|
||||
import android.net.NetworkPolicy;
|
||||
import android.net.NetworkTemplate;
|
||||
import android.os.Bundle;
|
||||
@@ -42,8 +45,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
import com.android.settingslib.NetworkPolicyEditor;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
|
||||
import static android.net.NetworkPolicy.LIMIT_DISABLED;
|
||||
import static android.net.NetworkPolicy.WARNING_DISABLED;
|
||||
import java.text.ParseException;
|
||||
|
||||
public class BillingCycleSettings extends DataUsageBase implements
|
||||
Preference.OnPreferenceChangeListener, DataUsageEditController {
|
||||
@@ -246,7 +248,6 @@ public class BillingCycleSettings extends DataUsageBase implements
|
||||
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
|
||||
final long bytes = isLimit ? editor.getPolicyLimitBytes(template)
|
||||
: editor.getPolicyWarningBytes(template);
|
||||
final long limitDisabled = isLimit ? LIMIT_DISABLED : WARNING_DISABLED;
|
||||
|
||||
if (bytes > 1.5f * 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) {
|
||||
v = Math.round(v * 100) / 100f;
|
||||
return String.valueOf(v);
|
||||
return NumberFormat.getInstance().format(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -278,15 +279,20 @@ public class BillingCycleSettings extends DataUsageBase implements
|
||||
|
||||
final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
|
||||
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
|
||||
EditText bytesField = (EditText) mView.findViewById(R.id.bytes);
|
||||
Spinner spinner = (Spinner) mView.findViewById(R.id.size_spinner);
|
||||
EditText bytesField = mView.findViewById(R.id.bytes);
|
||||
Spinner spinner = mView.findViewById(R.id.size_spinner);
|
||||
|
||||
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)
|
||||
* (spinner.getSelectedItemPosition() == 0 ? MB_IN_BYTES : GB_IN_BYTES));
|
||||
|
||||
final long bytes = (long) (input
|
||||
* (spinner.getSelectedItemPosition() == 0 ? MB_IN_BYTES : GB_IN_BYTES));
|
||||
|
||||
// to fix the overflow problem
|
||||
final long correctedBytes = Math.min(MAX_DATA_LIMIT_BYTES, bytes);
|
||||
|
@@ -16,16 +16,17 @@
|
||||
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 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)
|
||||
public class ThreadUtilsTest {
|
||||
|
||||
|
Reference in New Issue
Block a user