Use compact battery status string if available (1/3)

 - Add a config to switch the battery status string logic

Bug: 219650786
Test: make SettingsRoboTests
Change-Id: I5939cdc2e4e90466539f342d6d2030c1de1a94c3
diff --git a/res/values/config.xml b/res/values/config.xml
index 6a7c15b..50eddb5 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -447,6 +447,9 @@
     <!-- Whether top_level_battery should be shown or not. -->
     <bool name="config_show_top_level_battery">true</bool>
 
+    <!-- Whether to use compact battery status string. -->
+    <bool name="config_use_compact_battery_status">false</bool>
+
     <!-- Whether top_level_connected_devices should be shown or not. -->
     <bool name="config_show_top_level_connected_devices">true</bool>
 
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index efb58a5..4e90710 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -37,6 +37,7 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.UsageView;
 import com.android.settingslib.R;
+import com.android.settingslib.fuelgauge.BatteryStatus;
 import com.android.settingslib.fuelgauge.Estimate;
 import com.android.settingslib.fuelgauge.EstimateKt;
 import com.android.settingslib.utils.PowerUtil;
@@ -253,7 +254,7 @@
                 BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)
                 == BatteryManager.BATTERY_HEALTH_OVERHEAT;
 
-        info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast);
+        info.statusLabel = getBatteryStatus(context, batteryBroadcast);
         info.batteryStatus = batteryBroadcast.getIntExtra(
                 BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);
         if (!info.mCharging) {
@@ -291,7 +292,7 @@
                     R.string.power_remaining_charging_duration_only, timeString);
             info.chargeLabel = context.getString(resId, info.batteryPercentString, timeString);
         } else {
-            final String chargeStatusLabel = Utils.getBatteryStatus(context, batteryBroadcast);
+            final String chargeStatusLabel = getBatteryStatus(context, batteryBroadcast);
             info.remainingLabel = null;
             info.chargeLabel = info.batteryLevel == 100 ? info.batteryPercentString :
                     resources.getString(R.string.power_charging, info.batteryPercentString,
@@ -325,6 +326,35 @@
         }
     }
 
+    private static String getBatteryStatus(Context context, Intent batteryChangedIntent) {
+        final Resources res = context.getResources();
+        final boolean isShortStatus =
+                res.getBoolean(com.android.settings.R.bool.config_use_compact_battery_status);
+
+        if (!isShortStatus) {
+            return Utils.getBatteryStatus(context, batteryChangedIntent);
+        }
+
+        final int status = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_STATUS,
+                BatteryManager.BATTERY_STATUS_UNKNOWN);
+        final BatteryStatus batteryStatus = new BatteryStatus(batteryChangedIntent);
+        String statusString = res.getString(R.string.battery_info_status_unknown);
+
+        if (batteryStatus.isCharged()) {
+            statusString = res.getString(R.string.battery_info_status_full);
+        } else {
+            if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
+                statusString = res.getString(R.string.battery_info_status_charging);
+            } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
+                statusString = res.getString(R.string.battery_info_status_discharging);
+            } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
+                statusString = res.getString(R.string.battery_info_status_not_charging);
+            }
+        }
+
+        return statusString;
+    }
+
     public interface BatteryDataParser {
         void onParsingStarted(long startTime, long endTime);