Merge "Clear static icon and label cache if ui mode is changed" into sc-dev

This commit is contained in:
YUKAI HUNG
2021-05-12 09:21:23 +00:00
committed by Android (Google) Code Review
2 changed files with 48 additions and 1 deletions

View File

@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge; package com.android.settings.fuelgauge;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; 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.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnDestroy; 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.core.lifecycle.events.OnSaveInstanceState;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
@@ -53,7 +55,7 @@ import java.util.Map;
/** Controls the update for chart graph and the list items. */ /** Controls the update for chart graph and the list items. */
public class BatteryChartPreferenceController extends AbstractPreferenceController public class BatteryChartPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy, implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy,
OnSaveInstanceState, BatteryChartView.OnSelectListener, OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume,
ExpandDividerPreference.OnExpandListener { ExpandDividerPreference.OnExpandListener {
private static final String TAG = "BatteryChartPreferenceController"; private static final String TAG = "BatteryChartPreferenceController";
/** Desired battery history size for timestamp slots. */ /** 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_EXPAND_SYSTEM_INFO = "expand_system_info";
private static final String KEY_CURRENT_TIME_SLOT = "current_time_slot"; private static final String KEY_CURRENT_TIME_SLOT = "current_time_slot";
private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
@VisibleForTesting @VisibleForTesting
Map<Integer, List<BatteryDiffEntry>> mBatteryIndexedMap; Map<Integer, List<BatteryDiffEntry>> mBatteryIndexedMap;
@@ -124,6 +128,18 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
mTrapezoidIndex, mIsExpanded)); 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 @Override
public void onSaveInstanceState(Bundle savedInstance) { public void onSaveInstanceState(Bundle savedInstance) {
if (savedInstance == null) { if (savedInstance == null) {

View File

@@ -29,6 +29,8 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.format.DateUtils; import android.text.format.DateUtils;
@@ -76,6 +78,8 @@ public final class BatteryChartPreferenceControllerTest {
@Mock private PowerGaugePreference mPowerGaugePreference; @Mock private PowerGaugePreference mPowerGaugePreference;
@Mock private ExpandDividerPreference mExpandDividerPreference; @Mock private ExpandDividerPreference mExpandDividerPreference;
@Mock private BatteryUtils mBatteryUtils; @Mock private BatteryUtils mBatteryUtils;
@Mock private Configuration mConfiguration;
@Mock private Resources mResources;
private Context mContext; private Context mContext;
private BatteryDiffEntry mBatteryDiffEntry; private BatteryDiffEntry mBatteryDiffEntry;
@@ -104,6 +108,33 @@ public final class BatteryChartPreferenceControllerTest {
createBatteryHistoryMap()); 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 @Test
public void testOnDestroy_activityIsChanging_clearBatteryEntryCache() { public void testOnDestroy_activityIsChanging_clearBatteryEntryCache() {
doReturn(true).when(mSettingsActivity).isChangingConfigurations(); doReturn(true).when(mSettingsActivity).isChangingConfigurations();