From 5dc1f365994375c97340c89eee68616c40457623 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Fri, 17 Feb 2017 14:41:05 -0800 Subject: [PATCH] Make precentage calculation round up by 0.5% So we will show 1% when actually number is 0.5% Bug: 35305983 Test: RunSettingsLibRoboTests Change-Id: I26f11f25a7d78cc6b09cb358abd82017fa7cea00 --- .../src/com/android/settingslib/Utils.java | 8 ++- .../src/com/android/settingslib/UtilsTest.java | 57 ++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index ee7f927e67ae..7a4514a0af5e 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -112,6 +112,12 @@ public class Utils { UserIcons.getDefaultUserIcon(user.id, /* light= */ false)).bake(); } + /** Formats a double from 0.0..100.0 with an option to round **/ + public static String formatPercentage(double percentage, boolean round) { + final int localPercentage = round ? Math.round((float) percentage) : (int) percentage; + return formatPercentage(localPercentage); + } + /** Formats the ratio of amount/total as a percentage. */ public static String formatPercentage(long amount, long total) { return formatPercentage(((double) amount) / total); @@ -124,7 +130,7 @@ public class Utils { /** Formats a double from 0.0..1.0 as a percentage. */ private static String formatPercentage(double percentage) { - return NumberFormat.getPercentInstance().format(percentage); + return NumberFormat.getPercentInstance().format(percentage); } public static int getBatteryLevel(Intent batteryChangedIntent) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java new file mode 100644 index 000000000000..e42c35bc8d8b --- /dev/null +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settingslib; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +import static com.google.common.truth.Truth.assertThat; + +@RunWith(SettingLibRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class UtilsTest { + private static final double[] TEST_PERCENTAGES = {0, 0.4, 0.5, 0.6, 49, 49.3, 49.8, 50, 100}; + private static final String PERCENTAGE_0 = "0%"; + private static final String PERCENTAGE_1 = "1%"; + private static final String PERCENTAGE_49 = "49%"; + private static final String PERCENTAGE_50 = "50%"; + private static final String PERCENTAGE_100 = "100%"; + + @Test + public void testFormatPercentage_RoundTrue_RoundUpIfPossible() { + final String[] expectedPercentages = {PERCENTAGE_0, PERCENTAGE_0, PERCENTAGE_1, + PERCENTAGE_1, PERCENTAGE_49, PERCENTAGE_49, PERCENTAGE_50, PERCENTAGE_50, + PERCENTAGE_100}; + + for (int i = 0, size = TEST_PERCENTAGES.length; i < size; i++) { + final String percentage = Utils.formatPercentage(TEST_PERCENTAGES[i], true); + assertThat(percentage).isEqualTo(expectedPercentages[i]); + } + } + + @Test + public void testFormatPercentage_RoundFalse_NoRound() { + final String[] expectedPercentages = {PERCENTAGE_0, PERCENTAGE_0, PERCENTAGE_0, + PERCENTAGE_0, PERCENTAGE_49, PERCENTAGE_49, PERCENTAGE_49, PERCENTAGE_50, + PERCENTAGE_100}; + + for (int i = 0, size = TEST_PERCENTAGES.length; i < size; i++) { + final String percentage = Utils.formatPercentage(TEST_PERCENTAGES[i], false); + assertThat(percentage).isEqualTo(expectedPercentages[i]); + } + } +} -- 2.11.0