diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 304feb82021..0aaf930e112 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -443,7 +443,7 @@
1dp
4dp
- 2dp
+ 3dp
1dp
2dp
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index 4cafbc7b693..7131f28eb20 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -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);
- mAppListPrefGroup.addPreference(pref);
+ if (!isAdded) {
+ mAppListPrefGroup.addPreference(pref);
+ }
prefIndex++;
}
}
diff --git a/src/com/android/settings/fuelgauge/BatteryChartView.java b/src/com/android/settings/fuelgauge/BatteryChartView.java
index 26eb3e40c55..f970072cb94 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartView.java
@@ -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. */
diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/ConvertUtils.java
index 30982da6c8d..2e8726e38ab 100644
--- a/src/com/android/settings/fuelgauge/ConvertUtils.java
+++ b/src/com/android/settings/fuelgauge/ConvertUtils.java
@@ -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> getIndexedUsageMap(
final Context context,
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
index a70a109330c..9f0ffb01b10 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
@@ -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 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);
}