Merge "Fix battery percentage is inconsistent in settings" into udc-dev
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index e7a18d0..d686594 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -39,10 +39,12 @@
     private static final String TAG = "TopLvBatteryPrefControl";
 
     @VisibleForTesting
-    protected boolean mIsBatteryPresent = true;
-    @VisibleForTesting
     Preference mPreference;
+    @VisibleForTesting
+    protected boolean mIsBatteryPresent = true;
+
     private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
+
     private BatteryInfo mBatteryInfo;
     private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
     private String mBatteryStatusLabel;
@@ -56,8 +58,11 @@
                 mIsBatteryPresent = false;
             }
             BatteryInfo.getBatteryInfo(mContext, info -> {
+                Log.d(TAG, "getBatteryInfo: " + info);
                 mBatteryInfo = info;
                 updateState(mPreference);
+                // Update the preference summary text to the latest state.
+                setSummaryAsync(info);
             }, true /* shortString */);
         });
 
@@ -105,18 +110,19 @@
         if (info == null || context == null) {
             return null;
         }
-
-        Log.d(TAG, "getDashboardLabel: batteryStatusUpdate=" + batteryStatusUpdate);
+        Log.d(TAG, "getDashboardLabel: " + mBatteryStatusLabel + " batteryStatusUpdate="
+                + batteryStatusUpdate);
 
         if (batteryStatusUpdate) {
             setSummaryAsync(info);
         }
-
-        return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel;
+        return mBatteryStatusLabel == null ? generateLabel(info) : mBatteryStatusLabel;
     }
 
     private void setSummaryAsync(BatteryInfo info) {
         ThreadUtils.postOnBackgroundThread(() -> {
+            // Return false if built-in status should be used, will use updateBatteryStatus()
+            // method to inject the customized battery status label.
             final boolean triggerBatteryStatusUpdate =
                     mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info);
             ThreadUtils.postOnMainThread(() -> {
@@ -124,14 +130,14 @@
                     mBatteryStatusLabel = null; // will generateLabel()
                 }
                 mPreference.setSummary(
-                        (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel);
+                        mBatteryStatusLabel == null ? generateLabel(info) : mBatteryStatusLabel);
             });
         });
     }
 
     private CharSequence generateLabel(BatteryInfo info) {
         if (Utils.containsIncompatibleChargers(mContext, TAG)) {
-            return mContext.getString(R.string.battery_tip_incompatible_charging_title);
+            return mContext.getString(R.string.battery_info_status_not_charging);
         }
         if (!info.discharging && info.chargeLabel != null) {
             return info.chargeLabel;
@@ -150,13 +156,13 @@
     @Override
     public void updateBatteryStatus(String label, BatteryInfo info) {
         mBatteryStatusLabel = label; // Null if adaptive charging is not active
-
-        if (mPreference != null) {
-            // Do not triggerBatteryStatusUpdate(), otherwise there will be an infinite loop
-            final CharSequence summary = getSummary(false /* batteryStatusUpdate */);
-            if (summary != null) {
-                mPreference.setSummary(summary);
-            }
+        if (mPreference == null) {
+            return;
+        }
+        // Do not triggerBatteryStatusUpdate() here to cause infinite loop
+        final CharSequence summary = getSummary(false /* batteryStatusUpdate */);
+        if (summary != null) {
+            mPreference.setSummary(summary);
         }
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
index 55fe8b8..5f825ae 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
@@ -141,7 +141,7 @@
         BatteryInfo info = new BatteryInfo();
 
         assertThat(mController.getDashboardLabel(mContext, info, true))
-                .isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_title));
+                .isEqualTo(mContext.getString(R.string.battery_info_status_not_charging));
     }
 
     @Test