Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d78cd727 authored by YUKAI HUNG's avatar YUKAI HUNG Committed by Android (Google) Code Review
Browse files

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

parents fd05966f 5a783d08
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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<Integer, List<BatteryDiffEntry>> 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) {
+31 −0
Original line number Diff line number Diff line
@@ -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();