Merge "Clear static icon and label cache if ui mode is changed" into sc-dev
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index f75094d..1b5c779 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.fuelgauge;
 
 import android.content.Context;
+import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
@@ -39,6 +40,7 @@
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnCreate;
 import com.android.settingslib.core.lifecycle.events.OnDestroy;
+import com.android.settingslib.core.lifecycle.events.OnResume;
 import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
 import com.android.settingslib.utils.StringUtil;
 
@@ -53,7 +55,7 @@
 /** Controls the update for chart graph and the list items. */
 public class BatteryChartPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy,
-                OnSaveInstanceState, BatteryChartView.OnSelectListener,
+                OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume,
                 ExpandDividerPreference.OnExpandListener {
     private static final String TAG = "BatteryChartPreferenceController";
     /** Desired battery history size for timestamp slots. */
@@ -67,6 +69,8 @@
     private static final String KEY_EXPAND_SYSTEM_INFO = "expand_system_info";
     private static final String KEY_CURRENT_TIME_SLOT = "current_time_slot";
 
+    private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
+
     @VisibleForTesting
     Map<Integer, List<BatteryDiffEntry>> mBatteryIndexedMap;
 
@@ -125,6 +129,18 @@
     }
 
     @Override
+    public void onResume() {
+        final int currentUiMode =
+            mContext.getResources().getConfiguration().uiMode
+                & Configuration.UI_MODE_NIGHT_MASK;
+        if (sUiMode != currentUiMode) {
+            sUiMode = currentUiMode;
+            BatteryDiffEntry.clearCache();
+            Log.d(TAG, "clear icon and label cache since uiMode is changed");
+        }
+    }
+
+    @Override
     public void onSaveInstanceState(Bundle savedInstance) {
         if (savedInstance == null) {
             return;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
index f6a2ed1..a0a1417 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
@@ -29,6 +29,8 @@
 import android.content.Context;
 import android.content.ContentValues;
 import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.text.format.DateUtils;
@@ -76,6 +78,8 @@
     @Mock private PowerGaugePreference mPowerGaugePreference;
     @Mock private ExpandDividerPreference mExpandDividerPreference;
     @Mock private BatteryUtils mBatteryUtils;
+    @Mock private Configuration mConfiguration;
+    @Mock private Resources mResources;
 
     private Context mContext;
     private BatteryDiffEntry mBatteryDiffEntry;
@@ -105,6 +109,33 @@
     }
 
     @Test
+    public void testOnResume_uiModeIsChanged_clearBatteryDiffEntryCache() {
+        doReturn(mResources).when(mContext).getResources();
+        doReturn(mConfiguration).when(mResources).getConfiguration();
+        mConfiguration.uiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
+        // Ensures the testing environment is correct.
+        assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
+        mBatteryChartPreferenceController.onResume();
+        // Changes the uiMode in the configuration.
+        mConfiguration.uiMode = Configuration.UI_MODE_NIGHT_YES;
+
+        mBatteryChartPreferenceController.onResume();
+        assertThat(BatteryDiffEntry.sResourceCache).isEmpty();
+    }
+
+    @Test
+    public void testOnResume_uiModeIsNotChanged_notClearBatteryDiffEntryCache() {
+        doReturn(mResources).when(mContext).getResources();
+        doReturn(mConfiguration).when(mResources).getConfiguration();
+        mConfiguration.uiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
+        // Ensures the testing environment is correct.
+        assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
+
+        mBatteryChartPreferenceController.onResume();
+        assertThat(BatteryDiffEntry.sResourceCache).isNotEmpty();
+    }
+
+    @Test
     public void testOnDestroy_activityIsChanging_clearBatteryEntryCache() {
         doReturn(true).when(mSettingsActivity).isChangingConfigurations();
         // Ensures the testing environment is correct.