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.