Loading src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java +24 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.utils.StringUtil; import java.time.Clock; import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; Loading Loading @@ -256,6 +257,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll : mTrapezoidIndex; if (mBatteryChartView != null) { mBatteryChartView.setLevels(mBatteryHistoryLevels); setTimestampLabel(); } refreshUi(refreshIndex, /*isForce=*/ true); } Loading Loading @@ -525,6 +527,28 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll return true; } @VisibleForTesting void setTimestampLabel() { if (mBatteryChartView == null || mBatteryHistoryKeys == null) { return; } long latestTimestamp = mBatteryHistoryKeys[mBatteryHistoryKeys.length - 1]; // Uses the current time if we don't have history data. if (latestTimestamp == 0) { latestTimestamp = Clock.systemUTC().millis(); } // Generates timestamp label for chart graph (every 8 hours). final long timeSlotOffset = DateUtils.HOUR_IN_MILLIS * 8; final String[] timestampLabels = new String[4]; for (int index = 0; index < timestampLabels.length; index++) { timestampLabels[index] = ConvertUtils.utcToLocalTimeHour( latestTimestamp - (3 - index) * timeSlotOffset); } mBatteryChartView.setTimestamps(timestampLabels); } private static String utcToLocalTime(long[] timestamps) { final StringBuilder builder = new StringBuilder(); for (int index = 0; index < timestamps.length; index++) { Loading src/com/android/settings/fuelgauge/ConvertUtils.java +5 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,11 @@ public final class ConvertUtils { for (int index = 0; index < timeSlotSize; index++) { final Long currentTimestamp = Long.valueOf(batteryHistoryKeys[index * timestampStride]); // Uses empty list if the timestamp is default value. if (currentTimestamp == 0) { resultMap.put(Integer.valueOf(index), new ArrayList<BatteryDiffEntry>()); continue; } final Long nextTimestamp = Long.valueOf(batteryHistoryKeys[index * timestampStride + 1]); final Long nextTwoTimestamp = Loading tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java +53 −4 Original line number Diff line number Diff line Loading @@ -81,10 +81,7 @@ public final class BatteryChartPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mBatteryChartPreferenceController = new BatteryChartPreferenceController( mContext, "app_list", /*lifecycle=*/ null, mSettingsActivity, mFragment); mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mPrefContext = mContext; mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup; mBatteryChartPreferenceController.mBatteryChartView = mBatteryChartView; Loading Loading @@ -572,6 +569,52 @@ public final class BatteryChartPreferenceControllerTest { .isEqualTo("System usage for past 24 hr"); } @Test public void testSetTimestampLabel_nullBatteryHistoryKeys_ignore() { mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mBatteryHistoryKeys = null; mBatteryChartPreferenceController.mBatteryChartView = spy(new BatteryChartView(mContext)); mBatteryChartPreferenceController.setTimestampLabel(); verify(mBatteryChartPreferenceController.mBatteryChartView, never()) .setTimestamps(any()); } @Test public void testSetTimestampLabel_setExpectedTimestampData() { mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mBatteryChartView = spy(new BatteryChartView(mContext)); setUpBatteryHistoryKeys(); // Generates the expected result. final String[] expectedResults = new String[4]; final long timeSlotOffset = DateUtils.HOUR_IN_MILLIS * 8; for (int index = 0; index < expectedResults.length; index++) { expectedResults[index] = ConvertUtils.utcToLocalTimeHour( 1619247636826L - (3 - index) * timeSlotOffset); } mBatteryChartPreferenceController.setTimestampLabel(); verify(mBatteryChartPreferenceController.mBatteryChartView) .setTimestamps(expectedResults); } @Test public void testSetTimestampLabel_withoutValidTimestamp_setExpectedTimestampData() { mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mBatteryChartView = spy(new BatteryChartView(mContext)); mBatteryChartPreferenceController.mBatteryHistoryKeys = new long[] {0L}; mBatteryChartPreferenceController.setTimestampLabel(); verify(mBatteryChartPreferenceController.mBatteryChartView) .setTimestamps(any()); } private static Map<Long, List<BatteryHistEntry>> createBatteryHistoryMap(int size) { final Map<Long, List<BatteryHistEntry>> batteryHistoryMap = new HashMap<>(); for (int index = 0; index < size; index++) { Loading @@ -598,4 +641,10 @@ public final class BatteryChartPreferenceControllerTest { ConvertUtils.sSimpleDateFormatForHour .setTimeZone(TimeZone.getTimeZone("GMT")); } private BatteryChartPreferenceController createController() { return new BatteryChartPreferenceController( mContext, "app_list", /*lifecycle=*/ null, mSettingsActivity, mFragment); } } Loading
src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java +24 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.utils.StringUtil; import java.time.Clock; import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; Loading Loading @@ -256,6 +257,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll : mTrapezoidIndex; if (mBatteryChartView != null) { mBatteryChartView.setLevels(mBatteryHistoryLevels); setTimestampLabel(); } refreshUi(refreshIndex, /*isForce=*/ true); } Loading Loading @@ -525,6 +527,28 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll return true; } @VisibleForTesting void setTimestampLabel() { if (mBatteryChartView == null || mBatteryHistoryKeys == null) { return; } long latestTimestamp = mBatteryHistoryKeys[mBatteryHistoryKeys.length - 1]; // Uses the current time if we don't have history data. if (latestTimestamp == 0) { latestTimestamp = Clock.systemUTC().millis(); } // Generates timestamp label for chart graph (every 8 hours). final long timeSlotOffset = DateUtils.HOUR_IN_MILLIS * 8; final String[] timestampLabels = new String[4]; for (int index = 0; index < timestampLabels.length; index++) { timestampLabels[index] = ConvertUtils.utcToLocalTimeHour( latestTimestamp - (3 - index) * timeSlotOffset); } mBatteryChartView.setTimestamps(timestampLabels); } private static String utcToLocalTime(long[] timestamps) { final StringBuilder builder = new StringBuilder(); for (int index = 0; index < timestamps.length; index++) { Loading
src/com/android/settings/fuelgauge/ConvertUtils.java +5 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,11 @@ public final class ConvertUtils { for (int index = 0; index < timeSlotSize; index++) { final Long currentTimestamp = Long.valueOf(batteryHistoryKeys[index * timestampStride]); // Uses empty list if the timestamp is default value. if (currentTimestamp == 0) { resultMap.put(Integer.valueOf(index), new ArrayList<BatteryDiffEntry>()); continue; } final Long nextTimestamp = Long.valueOf(batteryHistoryKeys[index * timestampStride + 1]); final Long nextTwoTimestamp = Loading
tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java +53 −4 Original line number Diff line number Diff line Loading @@ -81,10 +81,7 @@ public final class BatteryChartPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mBatteryChartPreferenceController = new BatteryChartPreferenceController( mContext, "app_list", /*lifecycle=*/ null, mSettingsActivity, mFragment); mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mPrefContext = mContext; mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup; mBatteryChartPreferenceController.mBatteryChartView = mBatteryChartView; Loading Loading @@ -572,6 +569,52 @@ public final class BatteryChartPreferenceControllerTest { .isEqualTo("System usage for past 24 hr"); } @Test public void testSetTimestampLabel_nullBatteryHistoryKeys_ignore() { mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mBatteryHistoryKeys = null; mBatteryChartPreferenceController.mBatteryChartView = spy(new BatteryChartView(mContext)); mBatteryChartPreferenceController.setTimestampLabel(); verify(mBatteryChartPreferenceController.mBatteryChartView, never()) .setTimestamps(any()); } @Test public void testSetTimestampLabel_setExpectedTimestampData() { mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mBatteryChartView = spy(new BatteryChartView(mContext)); setUpBatteryHistoryKeys(); // Generates the expected result. final String[] expectedResults = new String[4]; final long timeSlotOffset = DateUtils.HOUR_IN_MILLIS * 8; for (int index = 0; index < expectedResults.length; index++) { expectedResults[index] = ConvertUtils.utcToLocalTimeHour( 1619247636826L - (3 - index) * timeSlotOffset); } mBatteryChartPreferenceController.setTimestampLabel(); verify(mBatteryChartPreferenceController.mBatteryChartView) .setTimestamps(expectedResults); } @Test public void testSetTimestampLabel_withoutValidTimestamp_setExpectedTimestampData() { mBatteryChartPreferenceController = createController(); mBatteryChartPreferenceController.mBatteryChartView = spy(new BatteryChartView(mContext)); mBatteryChartPreferenceController.mBatteryHistoryKeys = new long[] {0L}; mBatteryChartPreferenceController.setTimestampLabel(); verify(mBatteryChartPreferenceController.mBatteryChartView) .setTimestamps(any()); } private static Map<Long, List<BatteryHistEntry>> createBatteryHistoryMap(int size) { final Map<Long, List<BatteryHistEntry>> batteryHistoryMap = new HashMap<>(); for (int index = 0; index < size; index++) { Loading @@ -598,4 +641,10 @@ public final class BatteryChartPreferenceControllerTest { ConvertUtils.sSimpleDateFormatForHour .setTimeZone(TimeZone.getTimeZone("GMT")); } private BatteryChartPreferenceController createController() { return new BatteryChartPreferenceController( mContext, "app_list", /*lifecycle=*/ null, mSettingsActivity, mFragment); } }