Duplicate BatteryChartPreferenceController and BatteryChartView into new
files for better diff review purpose Bug: 236101687 Test: make RunSettingsRoboTests Change-Id: I2d29bbfe14bcc5df7c09bceec2cbb0673685f522
This commit is contained in:
@@ -0,0 +1,700 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.fuelgauge.batteryusage;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Matchers.anyLong;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.LocaleList;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryChartPreferenceControllerV2Test {
|
||||
private static final String PREF_KEY = "pref_key";
|
||||
private static final String PREF_SUMMARY = "fake preference summary";
|
||||
private static final int DESIRED_HISTORY_SIZE =
|
||||
BatteryChartPreferenceControllerV2.DESIRED_HISTORY_SIZE;
|
||||
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock
|
||||
private SettingsActivity mSettingsActivity;
|
||||
@Mock
|
||||
private PreferenceGroup mAppListGroup;
|
||||
@Mock
|
||||
private Drawable mDrawable;
|
||||
@Mock
|
||||
private BatteryHistEntry mBatteryHistEntry;
|
||||
@Mock
|
||||
private BatteryChartViewV2 mBatteryChartView;
|
||||
@Mock
|
||||
private PowerGaugePreference mPowerGaugePreference;
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
|
||||
private Context mContext;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private BatteryDiffEntry mBatteryDiffEntry;
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private BatteryChartPreferenceControllerV2 mBatteryChartPreferenceController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
Locale.setDefault(new Locale("en_US"));
|
||||
org.robolectric.shadows.ShadowSettings.set24HourTimeFormat(false);
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
final Resources resources = spy(mContext.getResources());
|
||||
resources.getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
|
||||
doReturn(resources).when(mContext).getResources();
|
||||
doReturn(new String[]{"com.android.googlequicksearchbox"})
|
||||
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||
.getHideApplicationSummary(mContext);
|
||||
doReturn(new String[]{"com.android.gms.persistent"})
|
||||
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||
.getHideApplicationEntries(mContext);
|
||||
mBatteryChartPreferenceController = createController();
|
||||
mBatteryChartPreferenceController.mPrefContext = mContext;
|
||||
mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
|
||||
mBatteryChartPreferenceController.mBatteryChartView = mBatteryChartView;
|
||||
mBatteryDiffEntry = new BatteryDiffEntry(
|
||||
mContext,
|
||||
/*foregroundUsageTimeInMs=*/ 1,
|
||||
/*backgroundUsageTimeInMs=*/ 2,
|
||||
/*consumePower=*/ 3,
|
||||
mBatteryHistEntry);
|
||||
mBatteryDiffEntry = spy(mBatteryDiffEntry);
|
||||
// Adds fake testing data.
|
||||
BatteryDiffEntry.sResourceCache.put(
|
||||
"fakeBatteryDiffEntryKey",
|
||||
new BatteryEntry.NameAndIcon("fakeName", /*icon=*/ null, /*iconId=*/ 1));
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(
|
||||
createBatteryHistoryMap());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDestroy_activityIsChanging_clearBatteryEntryCache() {
|
||||
doReturn(true).when(mSettingsActivity).isChangingConfigurations();
|
||||
// Ensures the testing environment is correct.
|
||||
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
|
||||
|
||||
mBatteryChartPreferenceController.onDestroy();
|
||||
assertThat(BatteryDiffEntry.sResourceCache).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDestroy_activityIsNotChanging_notClearBatteryEntryCache() {
|
||||
doReturn(false).when(mSettingsActivity).isChangingConfigurations();
|
||||
// Ensures the testing environment is correct.
|
||||
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
|
||||
|
||||
mBatteryChartPreferenceController.onDestroy();
|
||||
assertThat(BatteryDiffEntry.sResourceCache).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDestroy_clearPreferenceCache() {
|
||||
// Ensures the testing environment is correct.
|
||||
mBatteryChartPreferenceController.mPreferenceCache.put(
|
||||
PREF_KEY, mPowerGaugePreference);
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
|
||||
|
||||
mBatteryChartPreferenceController.onDestroy();
|
||||
// Verifies the result after onDestroy.
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDestroy_removeAllPreferenceFromPreferenceGroup() {
|
||||
mBatteryChartPreferenceController.onDestroy();
|
||||
verify(mAppListGroup).removeAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetBatteryHistoryMap_createExpectedKeysAndLevels() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(
|
||||
createBatteryHistoryMap());
|
||||
|
||||
// Verifies the created battery keys array.
|
||||
for (int index = 0; index < DESIRED_HISTORY_SIZE; index++) {
|
||||
assertThat(mBatteryChartPreferenceController.mBatteryHistoryKeys[index])
|
||||
// These values is are calculated by hand from createBatteryHistoryMap().
|
||||
.isEqualTo(index + 1);
|
||||
}
|
||||
// Verifies the created battery levels array.
|
||||
for (int index = 0; index < 13; index++) {
|
||||
assertThat(mBatteryChartPreferenceController.mBatteryHistoryLevels[index])
|
||||
// These values is are calculated by hand from createBatteryHistoryMap().
|
||||
.isEqualTo(100 - index * 2);
|
||||
}
|
||||
assertThat(mBatteryChartPreferenceController.mBatteryIndexedMap).hasSize(13);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetBatteryHistoryMap_largeSize_createExpectedKeysAndLevels() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(
|
||||
createBatteryHistoryMap());
|
||||
|
||||
// Verifies the created battery keys array.
|
||||
for (int index = 0; index < DESIRED_HISTORY_SIZE; index++) {
|
||||
assertThat(mBatteryChartPreferenceController.mBatteryHistoryKeys[index])
|
||||
// These values is are calculated by hand from createBatteryHistoryMap().
|
||||
.isEqualTo(index + 1);
|
||||
}
|
||||
// Verifies the created battery levels array.
|
||||
for (int index = 0; index < 13; index++) {
|
||||
assertThat(mBatteryChartPreferenceController.mBatteryHistoryLevels[index])
|
||||
// These values is are calculated by hand from createBatteryHistoryMap().
|
||||
.isEqualTo(100 - index * 2);
|
||||
}
|
||||
assertThat(mBatteryChartPreferenceController.mBatteryIndexedMap).hasSize(13);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshUi_batteryIndexedMapIsNull_ignoreRefresh() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(null);
|
||||
assertThat(mBatteryChartPreferenceController.refreshUi(
|
||||
/*trapezoidIndex=*/ 1, /*isForce=*/ false)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshUi_batteryChartViewIsNull_ignoreRefresh() {
|
||||
mBatteryChartPreferenceController.mBatteryChartView = null;
|
||||
assertThat(mBatteryChartPreferenceController.refreshUi(
|
||||
/*trapezoidIndex=*/ 1, /*isForce=*/ false)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshUi_trapezoidIndexIsNotChanged_ignoreRefresh() {
|
||||
final int trapezoidIndex = 1;
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex = trapezoidIndex;
|
||||
assertThat(mBatteryChartPreferenceController.refreshUi(
|
||||
trapezoidIndex, /*isForce=*/ false)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshUi_forceUpdate_refreshUi() {
|
||||
final int trapezoidIndex = 1;
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex = trapezoidIndex;
|
||||
assertThat(mBatteryChartPreferenceController.refreshUi(
|
||||
trapezoidIndex, /*isForce=*/ true)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForceRefreshUi_updateTrapezoidIndexIntoSelectAll() {
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex =
|
||||
BatteryChartViewV2.SELECTED_INDEX_INVALID;
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(
|
||||
createBatteryHistoryMap());
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.mTrapezoidIndex)
|
||||
.isEqualTo(BatteryChartViewV2.SELECTED_INDEX_ALL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveAndCacheAllPrefs_emptyContent_ignoreRemoveAll() {
|
||||
final int trapezoidIndex = 1;
|
||||
doReturn(0).when(mAppListGroup).getPreferenceCount();
|
||||
|
||||
mBatteryChartPreferenceController.refreshUi(
|
||||
trapezoidIndex, /*isForce=*/ true);
|
||||
verify(mAppListGroup, never()).removeAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveAndCacheAllPrefs_buildCacheAndRemoveAllPreference() {
|
||||
final int trapezoidIndex = 1;
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).getPreference(0);
|
||||
doReturn(PREF_KEY).when(mPowerGaugePreference).getKey();
|
||||
// Ensures the testing data is correct.
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
|
||||
|
||||
mBatteryChartPreferenceController.refreshUi(
|
||||
trapezoidIndex, /*isForce=*/ true);
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache.get(PREF_KEY))
|
||||
.isEqualTo(mPowerGaugePreference);
|
||||
verify(mAppListGroup).removeAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddPreferenceToScreen_emptyContent_ignoreAddPreference() {
|
||||
mBatteryChartPreferenceController.addPreferenceToScreen(
|
||||
new ArrayList<BatteryDiffEntry>());
|
||||
verify(mAppListGroup, never()).addPreference(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddPreferenceToScreen_addPreferenceIntoScreen() {
|
||||
final String appLabel = "fake app label";
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
|
||||
doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
doReturn(null).when(mAppListGroup).findPreference(PREF_KEY);
|
||||
doReturn(false).when(mBatteryDiffEntry).validForRestriction();
|
||||
|
||||
mBatteryChartPreferenceController.addPreferenceToScreen(
|
||||
Arrays.asList(mBatteryDiffEntry));
|
||||
|
||||
// Verifies the preference cache.
|
||||
final PowerGaugePreference pref =
|
||||
(PowerGaugePreference) mBatteryChartPreferenceController.mPreferenceCache
|
||||
.get(PREF_KEY);
|
||||
assertThat(pref).isNotNull();
|
||||
// Verifies the added preference configuration.
|
||||
verify(mAppListGroup).addPreference(pref);
|
||||
assertThat(pref.getKey()).isEqualTo(PREF_KEY);
|
||||
assertThat(pref.getTitle()).isEqualTo(appLabel);
|
||||
assertThat(pref.getIcon()).isEqualTo(mDrawable);
|
||||
assertThat(pref.getOrder()).isEqualTo(1);
|
||||
assertThat(pref.getBatteryDiffEntry()).isSameInstanceAs(mBatteryDiffEntry);
|
||||
assertThat(pref.isSingleLineTitle()).isTrue();
|
||||
assertThat(pref.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddPreferenceToScreen_alreadyInScreen_notAddPreferenceAgain() {
|
||||
final String appLabel = "fake app label";
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
|
||||
doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
|
||||
|
||||
mBatteryChartPreferenceController.addPreferenceToScreen(
|
||||
Arrays.asList(mBatteryDiffEntry));
|
||||
|
||||
verify(mAppListGroup, never()).addPreference(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeiClick_notPowerGaugePreference_returnFalse() {
|
||||
assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup))
|
||||
.isFalse();
|
||||
|
||||
verify(mMetricsFeatureProvider, never())
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
|
||||
verify(mMetricsFeatureProvider, never())
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_forAppEntry_returnTrue() {
|
||||
doReturn(false).when(mBatteryHistEntry).isAppEntry();
|
||||
doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
|
||||
mPowerGaugePreference)).isTrue();
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||
SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
|
||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||
/* package name */ "none",
|
||||
/* percentage of total */ 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_forSystemEntry_returnTrue() {
|
||||
mBatteryChartPreferenceController.mBatteryUtils = mBatteryUtils;
|
||||
doReturn(true).when(mBatteryHistEntry).isAppEntry();
|
||||
doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
|
||||
mPowerGaugePreference)).isTrue();
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||
SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
|
||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||
/* package name */ "none",
|
||||
/* percentage of total */ 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setNullContentIfTotalUsageTimeIsZero() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ 0,
|
||||
/*backgroundUsageTimeInMs=*/ 0));
|
||||
assertThat(pref.getSummary()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setBackgroundUsageTimeOnly() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ 0,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
|
||||
assertThat(pref.getSummary()).isEqualTo("Background: 1 min");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setTotalUsageTimeLessThanAMinute() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ 100,
|
||||
/*backgroundUsageTimeInMs=*/ 200));
|
||||
assertThat(pref.getSummary()).isEqualTo("Total: less than a min");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setTotalTimeIfBackgroundTimeLessThanAMinute() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
|
||||
/*backgroundUsageTimeInMs=*/ 200));
|
||||
assertThat(pref.getSummary())
|
||||
.isEqualTo("Total: 1 min\nBackground: less than a min");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setTotalAndBackgroundUsageTime() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
|
||||
assertThat(pref.getSummary()).isEqualTo("Total: 2 min\nBackground: 1 min");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPreferenceSummary_notAllowShownPackage_setSummayAsNull() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
final BatteryDiffEntry batteryDiffEntry =
|
||||
spy(createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
|
||||
doReturn("com.android.googlequicksearchbox").when(batteryDiffEntry)
|
||||
.getPackageName();
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(pref, batteryDiffEntry);
|
||||
assertThat(pref.getSummary()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateUsageTime_returnTrueIfBatteryDiffEntryIsValid() {
|
||||
assertThat(BatteryChartPreferenceControllerV2.validateUsageTime(
|
||||
createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS)))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateUsageTime_foregroundTimeExceedThreshold_returnFalse() {
|
||||
assertThat(BatteryChartPreferenceControllerV2.validateUsageTime(
|
||||
createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.HOUR_IN_MILLIS * 3,
|
||||
/*backgroundUsageTimeInMs=*/ 0)))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateUsageTime_backgroundTimeExceedThreshold_returnFalse() {
|
||||
assertThat(BatteryChartPreferenceControllerV2.validateUsageTime(
|
||||
createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ 0,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.HOUR_IN_MILLIS * 3)))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnExpand_expandedIsTrue_addSystemEntriesToPreferenceGroup() {
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
|
||||
doReturn("label").when(mBatteryDiffEntry).getAppLabel();
|
||||
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
|
||||
mBatteryChartPreferenceController.onExpand(/*isExpanded=*/ true);
|
||||
|
||||
final ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
|
||||
verify(mAppListGroup).addPreference(captor.capture());
|
||||
// Verifies the added preference.
|
||||
assertThat(captor.getValue().getKey()).isEqualTo(PREF_KEY);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
|
||||
true /*isExpanded*/);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnExpand_expandedIsFalse_removeSystemEntriesFromPreferenceGroup() {
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
|
||||
mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
|
||||
// Verifies the cache is empty first.
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
|
||||
|
||||
mBatteryChartPreferenceController.onExpand(/*isExpanded=*/ false);
|
||||
|
||||
verify(mAppListGroup).findPreference(PREF_KEY);
|
||||
verify(mAppListGroup).removePreference(mPowerGaugePreference);
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
|
||||
false /*isExpanded*/);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnSelect_selectSpecificTimeSlot_logMetric() {
|
||||
mBatteryChartPreferenceController.onSelect(1 /*slot index*/);
|
||||
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_TIME_SLOT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnSelect_selectAll_logMetric() {
|
||||
mBatteryChartPreferenceController.onSelect(
|
||||
BatteryChartViewV2.SELECTED_INDEX_ALL /*slot index*/);
|
||||
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOW_ALL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshCategoryTitle_setHourIntoBothTitleTextView() {
|
||||
mBatteryChartPreferenceController = createController();
|
||||
setUpBatteryHistoryKeys();
|
||||
mBatteryChartPreferenceController.mAppListPrefGroup =
|
||||
spy(new PreferenceCategory(mContext));
|
||||
mBatteryChartPreferenceController.mExpandDividerPreference =
|
||||
spy(new ExpandDividerPreference(mContext));
|
||||
// Simulates select the first slot.
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex = 0;
|
||||
|
||||
mBatteryChartPreferenceController.refreshCategoryTitle();
|
||||
|
||||
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
|
||||
// Verifies the title in the preference group.
|
||||
verify(mBatteryChartPreferenceController.mAppListPrefGroup)
|
||||
.setTitle(captor.capture());
|
||||
assertThat(captor.getValue()).isNotEqualTo("App usage for past 24 hr");
|
||||
// Verifies the title in the expandable divider.
|
||||
captor = ArgumentCaptor.forClass(String.class);
|
||||
verify(mBatteryChartPreferenceController.mExpandDividerPreference)
|
||||
.setTitle(captor.capture());
|
||||
assertThat(captor.getValue()).isNotEqualTo("System usage for past 24 hr");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshCategoryTitle_setLast24HrIntoBothTitleTextView() {
|
||||
mBatteryChartPreferenceController = createController();
|
||||
mBatteryChartPreferenceController.mAppListPrefGroup =
|
||||
spy(new PreferenceCategory(mContext));
|
||||
mBatteryChartPreferenceController.mExpandDividerPreference =
|
||||
spy(new ExpandDividerPreference(mContext));
|
||||
// Simulates select all condition.
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex =
|
||||
BatteryChartViewV2.SELECTED_INDEX_ALL;
|
||||
|
||||
mBatteryChartPreferenceController.refreshCategoryTitle();
|
||||
|
||||
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
|
||||
// Verifies the title in the preference group.
|
||||
verify(mBatteryChartPreferenceController.mAppListPrefGroup)
|
||||
.setTitle(captor.capture());
|
||||
assertThat(captor.getValue())
|
||||
.isEqualTo("App usage for past 24 hr");
|
||||
// Verifies the title in the expandable divider.
|
||||
captor = ArgumentCaptor.forClass(String.class);
|
||||
verify(mBatteryChartPreferenceController.mExpandDividerPreference)
|
||||
.setTitle(captor.capture());
|
||||
assertThat(captor.getValue())
|
||||
.isEqualTo("System usage for past 24 hr");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetTimestampLabel_nullBatteryHistoryKeys_ignore() {
|
||||
mBatteryChartPreferenceController = createController();
|
||||
mBatteryChartPreferenceController.mBatteryHistoryKeys = null;
|
||||
mBatteryChartPreferenceController.mBatteryChartView =
|
||||
spy(new BatteryChartViewV2(mContext));
|
||||
mBatteryChartPreferenceController.setTimestampLabel();
|
||||
|
||||
verify(mBatteryChartPreferenceController.mBatteryChartView, never())
|
||||
.setLatestTimestamp(anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetTimestampLabel_setExpectedTimestampData() {
|
||||
mBatteryChartPreferenceController = createController();
|
||||
mBatteryChartPreferenceController.mBatteryChartView =
|
||||
spy(new BatteryChartViewV2(mContext));
|
||||
setUpBatteryHistoryKeys();
|
||||
|
||||
mBatteryChartPreferenceController.setTimestampLabel();
|
||||
|
||||
verify(mBatteryChartPreferenceController.mBatteryChartView)
|
||||
.setLatestTimestamp(1619247636826L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetTimestampLabel_withoutValidTimestamp_setExpectedTimestampData() {
|
||||
mBatteryChartPreferenceController = createController();
|
||||
mBatteryChartPreferenceController.mBatteryChartView =
|
||||
spy(new BatteryChartViewV2(mContext));
|
||||
mBatteryChartPreferenceController.mBatteryHistoryKeys = new long[]{0L};
|
||||
|
||||
mBatteryChartPreferenceController.setTimestampLabel();
|
||||
|
||||
verify(mBatteryChartPreferenceController.mBatteryChartView)
|
||||
.setLatestTimestamp(anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnSaveInstanceState_restoreSelectedIndexAndExpandState() {
|
||||
final int expectedIndex = 1;
|
||||
final boolean isExpanded = true;
|
||||
final Bundle bundle = new Bundle();
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex = expectedIndex;
|
||||
mBatteryChartPreferenceController.mIsExpanded = isExpanded;
|
||||
mBatteryChartPreferenceController.onSaveInstanceState(bundle);
|
||||
// Replaces the original controller with other values.
|
||||
mBatteryChartPreferenceController.mTrapezoidIndex = -1;
|
||||
mBatteryChartPreferenceController.mIsExpanded = false;
|
||||
|
||||
mBatteryChartPreferenceController.onCreate(bundle);
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(
|
||||
createBatteryHistoryMap());
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.mTrapezoidIndex)
|
||||
.isEqualTo(expectedIndex);
|
||||
assertThat(mBatteryChartPreferenceController.mIsExpanded).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidToShowSummary_returnExpectedResult() {
|
||||
assertThat(mBatteryChartPreferenceController
|
||||
.isValidToShowSummary("com.google.android.apps.scone"))
|
||||
.isTrue();
|
||||
|
||||
// Verifies the item which is defined in the array list.
|
||||
assertThat(mBatteryChartPreferenceController
|
||||
.isValidToShowSummary("com.android.googlequicksearchbox"))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidToShowEntry_returnExpectedResult() {
|
||||
assertThat(mBatteryChartPreferenceController
|
||||
.isValidToShowEntry("com.google.android.apps.scone"))
|
||||
.isTrue();
|
||||
|
||||
// Verifies the items which are defined in the array list.
|
||||
assertThat(mBatteryChartPreferenceController
|
||||
.isValidToShowEntry("com.android.gms.persistent"))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
private static Map<Long, Map<String, BatteryHistEntry>> createBatteryHistoryMap() {
|
||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
|
||||
for (int index = 0; index < DESIRED_HISTORY_SIZE; index++) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put("batteryLevel", Integer.valueOf(100 - index));
|
||||
final BatteryHistEntry entry = new BatteryHistEntry(values);
|
||||
final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
|
||||
entryMap.put("fake_entry_key" + index, entry);
|
||||
batteryHistoryMap.put(Long.valueOf(index + 1), entryMap);
|
||||
}
|
||||
return batteryHistoryMap;
|
||||
}
|
||||
|
||||
private BatteryDiffEntry createBatteryDiffEntry(
|
||||
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
|
||||
return new BatteryDiffEntry(
|
||||
mContext, foregroundUsageTimeInMs, backgroundUsageTimeInMs,
|
||||
/*consumePower=*/ 0, mBatteryHistEntry);
|
||||
}
|
||||
|
||||
private void setUpBatteryHistoryKeys() {
|
||||
mBatteryChartPreferenceController.mBatteryHistoryKeys =
|
||||
new long[]{1619196786769L, 0L, 1619247636826L};
|
||||
ConvertUtils.utcToLocalTimeHour(
|
||||
mContext, /*timestamp=*/ 0, /*is24HourFormat=*/ false);
|
||||
}
|
||||
|
||||
private BatteryChartPreferenceControllerV2 createController() {
|
||||
final BatteryChartPreferenceControllerV2 controller =
|
||||
new BatteryChartPreferenceControllerV2(
|
||||
mContext, "app_list", /*lifecycle=*/ null,
|
||||
mSettingsActivity, mFragment);
|
||||
controller.mPrefContext = mContext;
|
||||
return controller;
|
||||
}
|
||||
}
|
@@ -0,0 +1,235 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.settings.fuelgauge.batteryusage;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
import android.content.Context;
|
||||
import android.os.LocaleList;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryChartViewV2Test {
|
||||
|
||||
private Context mContext;
|
||||
private BatteryChartViewV2 mBatteryChartView;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||
|
||||
@Mock
|
||||
private AccessibilityServiceInfo mMockAccessibilityServiceInfo;
|
||||
@Mock
|
||||
private AccessibilityManager mMockAccessibilityManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mContext.getResources().getConfiguration().setLocales(
|
||||
new LocaleList(new Locale("en_US")));
|
||||
mBatteryChartView = new BatteryChartViewV2(mContext);
|
||||
doReturn(mMockAccessibilityManager).when(mContext)
|
||||
.getSystemService(AccessibilityManager.class);
|
||||
doReturn("TalkBackService").when(mMockAccessibilityServiceInfo).getId();
|
||||
doReturn(Arrays.asList(mMockAccessibilityServiceInfo))
|
||||
.when(mMockAccessibilityManager)
|
||||
.getEnabledAccessibilityServiceList(anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsAccessibilityEnabled_disable_returnFalse() {
|
||||
doReturn(false).when(mMockAccessibilityManager).isEnabled();
|
||||
assertThat(BatteryChartViewV2.isAccessibilityEnabled(mContext)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsAccessibilityEnabled_emptyInfo_returnFalse() {
|
||||
doReturn(true).when(mMockAccessibilityManager).isEnabled();
|
||||
doReturn(new ArrayList<AccessibilityServiceInfo>())
|
||||
.when(mMockAccessibilityManager)
|
||||
.getEnabledAccessibilityServiceList(anyInt());
|
||||
|
||||
assertThat(BatteryChartViewV2.isAccessibilityEnabled(mContext)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsAccessibilityEnabled_validServiceId_returnTrue() {
|
||||
doReturn(true).when(mMockAccessibilityManager).isEnabled();
|
||||
assertThat(BatteryChartViewV2.isAccessibilityEnabled(mContext)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetSelectedIndex_invokesCallback() {
|
||||
final int[] selectedIndex = new int[1];
|
||||
final int expectedIndex = 2;
|
||||
mBatteryChartView.mSelectedIndex = 1;
|
||||
mBatteryChartView.setOnSelectListener(
|
||||
trapezoidIndex -> {
|
||||
selectedIndex[0] = trapezoidIndex;
|
||||
});
|
||||
|
||||
mBatteryChartView.setSelectedIndex(expectedIndex);
|
||||
|
||||
assertThat(mBatteryChartView.mSelectedIndex)
|
||||
.isEqualTo(expectedIndex);
|
||||
assertThat(selectedIndex[0]).isEqualTo(expectedIndex);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetSelectedIndex_sameIndex_notInvokesCallback() {
|
||||
final int[] selectedIndex = new int[1];
|
||||
final int expectedIndex = 1;
|
||||
mBatteryChartView.mSelectedIndex = expectedIndex;
|
||||
mBatteryChartView.setOnSelectListener(
|
||||
trapezoidIndex -> {
|
||||
selectedIndex[0] = trapezoidIndex;
|
||||
});
|
||||
|
||||
mBatteryChartView.setSelectedIndex(expectedIndex);
|
||||
|
||||
assertThat(selectedIndex[0]).isNotEqualTo(expectedIndex);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClickable_isChartGraphSlotsEnabledIsFalse_notClickable() {
|
||||
mBatteryChartView.setClickableForce(true);
|
||||
when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
|
||||
.thenReturn(false);
|
||||
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
assertThat(mBatteryChartView.isClickable()).isFalse();
|
||||
assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClickable_accessibilityIsDisabled_clickable() {
|
||||
mBatteryChartView.setClickableForce(true);
|
||||
when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
|
||||
.thenReturn(true);
|
||||
doReturn(false).when(mMockAccessibilityManager).isEnabled();
|
||||
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
assertThat(mBatteryChartView.isClickable()).isTrue();
|
||||
assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClickable_accessibilityIsEnabledWithoutValidId_clickable() {
|
||||
mBatteryChartView.setClickableForce(true);
|
||||
when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
|
||||
.thenReturn(true);
|
||||
doReturn(true).when(mMockAccessibilityManager).isEnabled();
|
||||
doReturn(new ArrayList<AccessibilityServiceInfo>())
|
||||
.when(mMockAccessibilityManager)
|
||||
.getEnabledAccessibilityServiceList(anyInt());
|
||||
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
assertThat(mBatteryChartView.isClickable()).isTrue();
|
||||
assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClickable_accessibilityIsEnabledWithValidId_notClickable() {
|
||||
mBatteryChartView.setClickableForce(true);
|
||||
when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
|
||||
.thenReturn(true);
|
||||
doReturn(true).when(mMockAccessibilityManager).isEnabled();
|
||||
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
assertThat(mBatteryChartView.isClickable()).isFalse();
|
||||
assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClickable_restoreFromNonClickableState() {
|
||||
final int[] levels = new int[13];
|
||||
for (int index = 0; index < levels.length; index++) {
|
||||
levels[index] = index + 1;
|
||||
}
|
||||
mBatteryChartView.setTrapezoidCount(12);
|
||||
mBatteryChartView.setLevels(levels);
|
||||
mBatteryChartView.setClickableForce(true);
|
||||
when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
|
||||
.thenReturn(true);
|
||||
doReturn(true).when(mMockAccessibilityManager).isEnabled();
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
// Ensures the testing environment is correct.
|
||||
assertThat(mBatteryChartView.isClickable()).isFalse();
|
||||
// Turns off accessibility service.
|
||||
doReturn(false).when(mMockAccessibilityManager).isEnabled();
|
||||
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
|
||||
assertThat(mBatteryChartView.isClickable()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnAttachedToWindow_addAccessibilityStateChangeListener() {
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
verify(mMockAccessibilityManager)
|
||||
.addAccessibilityStateChangeListener(mBatteryChartView);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDetachedFromWindow_removeAccessibilityStateChangeListener() {
|
||||
mBatteryChartView.onAttachedToWindow();
|
||||
mBatteryChartView.mHandler.postDelayed(
|
||||
mBatteryChartView.mUpdateClickableStateRun, 1000);
|
||||
|
||||
mBatteryChartView.onDetachedFromWindow();
|
||||
|
||||
verify(mMockAccessibilityManager)
|
||||
.removeAccessibilityStateChangeListener(mBatteryChartView);
|
||||
assertThat(mBatteryChartView.mHandler.hasCallbacks(
|
||||
mBatteryChartView.mUpdateClickableStateRun))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnAccessibilityStateChanged_postUpdateStateRunnable() {
|
||||
mBatteryChartView.mHandler = spy(mBatteryChartView.mHandler);
|
||||
mBatteryChartView.onAccessibilityStateChanged(/*enabled=*/ true);
|
||||
|
||||
verify(mBatteryChartView.mHandler)
|
||||
.removeCallbacks(mBatteryChartView.mUpdateClickableStateRun);
|
||||
verify(mBatteryChartView.mHandler)
|
||||
.postDelayed(mBatteryChartView.mUpdateClickableStateRun, 500L);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user