Draw timestamp information into BatteryChartView manually (2/2)
screenshot: https://screenshot.googleplex.com/8zJcMJeMDovfhdD Bug: 183921876 Test: make SettingsRoboTests Change-Id: I276f70c3cf8ebd2316f987ace0d6537ed2cf8a45
This commit is contained in:
@@ -40,6 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnDestroy;
|
|||||||
import com.android.settingslib.core.lifecycle.events.OnPause;
|
import com.android.settingslib.core.lifecycle.events.OnPause;
|
||||||
import com.android.settingslib.utils.StringUtil;
|
import com.android.settingslib.utils.StringUtil;
|
||||||
|
|
||||||
|
import java.time.Clock;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -256,6 +257,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
: mTrapezoidIndex;
|
: mTrapezoidIndex;
|
||||||
if (mBatteryChartView != null) {
|
if (mBatteryChartView != null) {
|
||||||
mBatteryChartView.setLevels(mBatteryHistoryLevels);
|
mBatteryChartView.setLevels(mBatteryHistoryLevels);
|
||||||
|
setTimestampLabel();
|
||||||
}
|
}
|
||||||
refreshUi(refreshIndex, /*isForce=*/ true);
|
refreshUi(refreshIndex, /*isForce=*/ true);
|
||||||
}
|
}
|
||||||
@@ -525,6 +527,28 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
return true;
|
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) {
|
private static String utcToLocalTime(long[] timestamps) {
|
||||||
final StringBuilder builder = new StringBuilder();
|
final StringBuilder builder = new StringBuilder();
|
||||||
for (int index = 0; index < timestamps.length; index++) {
|
for (int index = 0; index < timestamps.length; index++) {
|
||||||
|
@@ -196,6 +196,11 @@ public final class ConvertUtils {
|
|||||||
for (int index = 0; index < timeSlotSize; index++) {
|
for (int index = 0; index < timeSlotSize; index++) {
|
||||||
final Long currentTimestamp =
|
final Long currentTimestamp =
|
||||||
Long.valueOf(batteryHistoryKeys[index * timestampStride]);
|
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 =
|
final Long nextTimestamp =
|
||||||
Long.valueOf(batteryHistoryKeys[index * timestampStride + 1]);
|
Long.valueOf(batteryHistoryKeys[index * timestampStride + 1]);
|
||||||
final Long nextTwoTimestamp =
|
final Long nextTwoTimestamp =
|
||||||
|
@@ -81,10 +81,7 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mBatteryChartPreferenceController =
|
mBatteryChartPreferenceController = createController();
|
||||||
new BatteryChartPreferenceController(
|
|
||||||
mContext, "app_list", /*lifecycle=*/ null,
|
|
||||||
mSettingsActivity, mFragment);
|
|
||||||
mBatteryChartPreferenceController.mPrefContext = mContext;
|
mBatteryChartPreferenceController.mPrefContext = mContext;
|
||||||
mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
|
mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
|
||||||
mBatteryChartPreferenceController.mBatteryChartView = mBatteryChartView;
|
mBatteryChartPreferenceController.mBatteryChartView = mBatteryChartView;
|
||||||
@@ -572,6 +569,52 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
.isEqualTo("System usage for past 24 hr");
|
.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) {
|
private static Map<Long, List<BatteryHistEntry>> createBatteryHistoryMap(int size) {
|
||||||
final Map<Long, List<BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
|
final Map<Long, List<BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
|
||||||
for (int index = 0; index < size; index++) {
|
for (int index = 0; index < size; index++) {
|
||||||
@@ -598,4 +641,10 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
ConvertUtils.sSimpleDateFormatForHour
|
ConvertUtils.sSimpleDateFormatForHour
|
||||||
.setTimeZone(TimeZone.getTimeZone("GMT"));
|
.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BatteryChartPreferenceController createController() {
|
||||||
|
return new BatteryChartPreferenceController(
|
||||||
|
mContext, "app_list", /*lifecycle=*/ null,
|
||||||
|
mSettingsActivity, mFragment);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user