Avoid add preferenc again if it already in the PreferenceGroup
Bug: 177406865 Bug: 185187729 Test: make SettingsRoboTests Test: make SettingsGoogleRoboTests Change-Id: I69f5033c0a07d846c340b9871e69a2cdbe0bb2aa
This commit is contained in:
@@ -443,7 +443,7 @@
|
||||
<!-- Battery usage chart view component -->
|
||||
<dimen name="chartview_divider_width">1dp</dimen>
|
||||
<dimen name="chartview_divider_height">4dp</dimen>
|
||||
<dimen name="chartview_trapezoid_radius">2dp</dimen>
|
||||
<dimen name="chartview_trapezoid_radius">3dp</dimen>
|
||||
<dimen name="chartview_trapezoid_margin_start">1dp</dimen>
|
||||
<dimen name="chartview_trapezoid_margin_bottom">2dp</dimen>
|
||||
</resources>
|
||||
|
@@ -317,6 +317,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
}
|
||||
int prefIndex = mAppListPrefGroup.getPreferenceCount();
|
||||
for (BatteryDiffEntry entry : entries) {
|
||||
boolean isAdded = false;
|
||||
final String appLabel = entry.getAppLabel();
|
||||
final Drawable appIcon = entry.getAppIcon();
|
||||
if (TextUtils.isEmpty(appLabel) || appIcon == null) {
|
||||
@@ -324,8 +325,13 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
continue;
|
||||
}
|
||||
final String prefKey = entry.mBatteryHistEntry.getKey();
|
||||
PowerGaugePreference pref =
|
||||
(PowerGaugePreference) mPreferenceCache.get(prefKey);
|
||||
PowerGaugePreference pref = mAppListPrefGroup.findPreference(prefKey);
|
||||
if (pref != null) {
|
||||
isAdded = true;
|
||||
Log.w(TAG, "preference should be removed for\n" + entry);
|
||||
} else {
|
||||
pref = (PowerGaugePreference) mPreferenceCache.get(prefKey);
|
||||
}
|
||||
// Creates new innstance if cached preference is not found.
|
||||
if (pref == null) {
|
||||
pref = new PowerGaugePreference(mPrefContext);
|
||||
@@ -340,7 +346,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
// Sets the BatteryDiffEntry to preference for launching detailed page.
|
||||
pref.setBatteryDiffEntry(entry);
|
||||
setPreferenceSummary(pref, entry);
|
||||
if (!isAdded) {
|
||||
mAppListPrefGroup.addPreference(pref);
|
||||
}
|
||||
prefIndex++;
|
||||
}
|
||||
}
|
||||
|
@@ -97,8 +97,18 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
|
||||
public void setLevels(int[] levels) {
|
||||
// We should provide trapezoid count + 1 data to draw all trapezoids.
|
||||
mLevels = levels.length == mTrapezoidCount + 1 ? levels : null;
|
||||
setClickable(mLevels != null);
|
||||
setClickable(false);
|
||||
invalidate();
|
||||
if (mLevels == null) {
|
||||
return;
|
||||
}
|
||||
// Sets the chart is clickable if there is at least one valid item in it.
|
||||
for (int index = 0; index < mLevels.length; index++) {
|
||||
if (mLevels[index] != 0) {
|
||||
setClickable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Sets the selected group index to draw highlight effect. */
|
||||
|
@@ -71,6 +71,7 @@ public final class ConvertUtils {
|
||||
|
||||
private static String sZoneId;
|
||||
private static SimpleDateFormat sSimpleDateFormat;
|
||||
private static SimpleDateFormat sSimpleDateFormatForHour;
|
||||
|
||||
private ConvertUtils() {}
|
||||
|
||||
@@ -139,10 +140,27 @@ public final class ConvertUtils {
|
||||
sZoneId = currentZoneId;
|
||||
sSimpleDateFormat =
|
||||
new SimpleDateFormat("MMM dd,yyyy HH:mm:ss", Locale.ENGLISH);
|
||||
sSimpleDateFormatForHour = null;
|
||||
}
|
||||
return sSimpleDateFormat.format(new Date(timestamp));
|
||||
}
|
||||
|
||||
/** Converts UTC timestamp to local time hour data. */
|
||||
public static int utcToLocalTimeHour(long timestamp) {
|
||||
final String currentZoneId = TimeZone.getDefault().getID();
|
||||
if (!currentZoneId.equals(sZoneId) || sSimpleDateFormatForHour == null) {
|
||||
sZoneId = currentZoneId;
|
||||
sSimpleDateFormat = null;
|
||||
sSimpleDateFormatForHour = new SimpleDateFormat("HH", Locale.ENGLISH);
|
||||
}
|
||||
try {
|
||||
return Integer.parseInt(
|
||||
sSimpleDateFormatForHour.format(new Date(timestamp)));
|
||||
} catch (NumberFormatException e) {
|
||||
return Integer.MIN_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
/** Gets indexed battery usage data for each corresponding time slot. */
|
||||
public static Map<Integer, List<BatteryDiffEntry>> getIndexedUsageMap(
|
||||
final Context context,
|
||||
|
@@ -57,6 +57,8 @@ import java.util.Map;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryChartPreferenceControllerTest {
|
||||
private static final String PREF_KEY = "pref_key";
|
||||
private static final String PREF_SUMMARY = "fake preference summary";
|
||||
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private SettingsActivity mSettingsActivity;
|
||||
@@ -120,10 +122,9 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testOnDestroy_clearPreferenceCache() {
|
||||
final String prefKey = "preference fake key";
|
||||
// Ensures the testing environment is correct.
|
||||
mBatteryChartPreferenceController.mPreferenceCache.put(
|
||||
prefKey, mPowerGaugePreference);
|
||||
PREF_KEY, mPowerGaugePreference);
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
|
||||
|
||||
mBatteryChartPreferenceController.onDestroy();
|
||||
@@ -231,17 +232,16 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testRemoveAndCacheAllPrefs_buildCacheAndRemoveAllPreference() {
|
||||
final int trapezoidIndex = 1;
|
||||
final String prefKey = "preference fake key";
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).getPreference(0);
|
||||
doReturn(prefKey).when(mPowerGaugePreference).getKey();
|
||||
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(prefKey))
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache.get(PREF_KEY))
|
||||
.isEqualTo(mPowerGaugePreference);
|
||||
verify(mAppListGroup).removeAll();
|
||||
}
|
||||
@@ -255,12 +255,12 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testAddPreferenceToScreen_addPreferenceIntoScreen() {
|
||||
final String prefKey = "preference fake key";
|
||||
final String appLabel = "fake app label";
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
|
||||
doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
|
||||
doReturn(prefKey).when(mBatteryHistEntry).getKey();
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
doReturn(null).when(mAppListGroup).findPreference(PREF_KEY);
|
||||
|
||||
mBatteryChartPreferenceController.addPreferenceToScreen(
|
||||
Arrays.asList(mBatteryDiffEntry));
|
||||
@@ -268,11 +268,11 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
// Verifies the preference cache.
|
||||
final PowerGaugePreference pref =
|
||||
(PowerGaugePreference) mBatteryChartPreferenceController.mPreferenceCache
|
||||
.get(prefKey);
|
||||
.get(PREF_KEY);
|
||||
assertThat(pref).isNotNull();
|
||||
// Verifies the added preference configuration.
|
||||
verify(mAppListGroup).addPreference(pref);
|
||||
assertThat(pref.getKey()).isEqualTo(prefKey);
|
||||
assertThat(pref.getKey()).isEqualTo(PREF_KEY);
|
||||
assertThat(pref.getTitle()).isEqualTo(appLabel);
|
||||
assertThat(pref.getIcon()).isEqualTo(mDrawable);
|
||||
assertThat(pref.getOrder()).isEqualTo(1);
|
||||
@@ -280,6 +280,21 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
assertThat(pref.isSingleLineTitle()).isTrue();
|
||||
}
|
||||
|
||||
@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 testHandlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
|
||||
assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup))
|
||||
@@ -310,7 +325,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setNullContentIfTotalUsageTimeIsZero() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary("fake preference summary");
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
@@ -322,7 +337,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setBackgroundUsageTimeOnly() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary("fake preference summary");
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
@@ -334,7 +349,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setTotalUsageTimeLessThanAMinute() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary("fake preference summary");
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
@@ -346,7 +361,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setTotalTimeIfBackgroundTimeLessThanAMinute() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary("fake preference summary");
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
@@ -358,7 +373,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testSetPreferenceSummary_setTotalAndBackgroundUsageTime() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary("fake preference summary");
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryChartPreferenceController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
@@ -370,7 +385,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
@Test
|
||||
public void testSetPreferenceSummary_notAllowShownPackage_setSummayAsNull() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
pref.setSummary("fake preference summary");
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
final BatteryDiffEntry batteryDiffEntry =
|
||||
spy(createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
|
||||
@@ -436,33 +451,31 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testOnExpand_expandedIsTrue_addSystemEntriesToPreferenceGroup() {
|
||||
final String prefKey = "preference_key";
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
|
||||
doReturn("label").when(mBatteryDiffEntry).getAppLabel();
|
||||
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
|
||||
doReturn(prefKey).when(mBatteryHistEntry).getKey();
|
||||
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(prefKey);
|
||||
assertThat(captor.getValue().getKey()).isEqualTo(PREF_KEY);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnExpand_expandedIsFalse_removeSystemEntriesFromPreferenceGroup() {
|
||||
final String prefKey = "preference_key";
|
||||
doReturn(prefKey).when(mBatteryHistEntry).getKey();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(prefKey);
|
||||
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(prefKey);
|
||||
verify(mAppListGroup).findPreference(PREF_KEY);
|
||||
verify(mAppListGroup).removePreference(mPowerGaugePreference);
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
|
||||
}
|
||||
|
Reference in New Issue
Block a user