diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java index f75094d2ffa..1b5c7795022 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.Lifecycle; 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 @@ import java.util.Map; /** 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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll 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> mBatteryIndexedMap; @@ -124,6 +128,18 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mTrapezoidIndex, mIsExpanded)); } + @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) { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java index f6a2ed15dfe..a0a1417056b 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 static org.mockito.Mockito.when; 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 @@ public final class BatteryChartPreferenceControllerTest { @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; @@ -104,6 +108,33 @@ public final class BatteryChartPreferenceControllerTest { createBatteryHistoryMap()); } + @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();