OSDN Git Service

Make precentage calculation round up by 0.5%
authorjackqdyulei <jackqdyulei@google.com>
Fri, 17 Feb 2017 22:41:05 +0000 (14:41 -0800)
committerjackqdyulei <jackqdyulei@google.com>
Wed, 22 Feb 2017 00:40:01 +0000 (16:40 -0800)
So we will show 1% when actually number is 0.5%

Bug: 35305983
Test: RunSettingsLibRoboTests
Change-Id: I26f11f25a7d78cc6b09cb358abd82017fa7cea00

packages/SettingsLib/src/com/android/settingslib/Utils.java
packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java [new file with mode: 0644]

index ee7f927..7a4514a 100644 (file)
@@ -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 (file)
index 0000000..e42c35b
--- /dev/null
@@ -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]);
+        }
+    }
+}