Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70c872c1 authored by YUKAI HUNG's avatar YUKAI HUNG Committed by Android (Google) Code Review
Browse files

Merge "Draw timestamp information into BatteryChartView manually (2/2)" into sc-dev

parents 77ddf11a 10000eb2
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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;
@@ -256,6 +257,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
                : mTrapezoidIndex;
        if (mBatteryChartView != null) {
            mBatteryChartView.setLevels(mBatteryHistoryLevels);
            setTimestampLabel();
        }
        refreshUi(refreshIndex, /*isForce=*/ true);
    }
@@ -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++) {
+5 −0
Original line number Diff line number Diff line
@@ -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 =
+53 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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++) {
@@ -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);
    }
}