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

Commit aaaed2f0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix b/241872474 Battery usage page will crash when selecting the last...

Merge "Fix b/241872474 Battery usage page will crash when selecting the last hour chart bar, going to app detail page, and going back"
parents dec32f80 8d0030d8
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -284,7 +284,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
                generateTimestampDayOfWeekTexts(
                        mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps(),
                        /* isAbbreviation= */ true),
                mDailyChartIndex,
                BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
        mHourlyViewModels = new ArrayList<>();
        for (BatteryLevelData.PeriodBatteryLevelData hourlyBatteryLevelsPerDay :
@@ -293,7 +292,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
                    hourlyBatteryLevelsPerDay.getLevels(),
                    generateTimestampHourTexts(
                            mContext, hourlyBatteryLevelsPerDay.getTimestamps()),
                    mHourlyChartIndex,
                    BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
        }
        refreshUi();
+15 −19
Original line number Diff line number Diff line
@@ -41,22 +41,18 @@ class BatteryChartViewModel {
    private final List<Integer> mLevels;
    private final List<String> mTexts;
    private final AxisLabelPosition mAxisLabelPosition;
    private int mSelectedIndex;
    private int mSelectedIndex = SELECTED_INDEX_ALL;

    BatteryChartViewModel(
            @NonNull List<Integer> levels, @NonNull List<String> texts, int selectedIndex,
            @NonNull List<Integer> levels, @NonNull List<String> texts,
            @NonNull AxisLabelPosition axisLabelPosition) {
        Preconditions.checkArgument(
                levels.size() == texts.size()
                        && levels.size() >= MIN_LEVELS_DATA_SIZE
                        && selectedIndex >= SELECTED_INDEX_ALL
                        && selectedIndex < levels.size(),
                String.format(Locale.ENGLISH, "Invalid BatteryChartViewModel"
                                + "  levels.size: %d\ntexts.size: %d\nselectedIndex: %d.",
                        levels.size(), texts.size(), selectedIndex));
                levels.size() == texts.size() && levels.size() >= MIN_LEVELS_DATA_SIZE,
                String.format(Locale.ENGLISH,
                        "Invalid BatteryChartViewModel levels.size: %d, texts.size: %d.",
                        levels.size(), texts.size()));
        mLevels = levels;
        mTexts = texts;
        mSelectedIndex = selectedIndex;
        mAxisLabelPosition = axisLabelPosition;
    }

@@ -72,6 +68,10 @@ class BatteryChartViewModel {
        return mTexts;
    }

    public AxisLabelPosition axisLabelPosition() {
        return mAxisLabelPosition;
    }

    public int selectedIndex() {
        return mSelectedIndex;
    }
@@ -80,10 +80,6 @@ class BatteryChartViewModel {
        mSelectedIndex = index;
    }

    public AxisLabelPosition axisLabelPosition() {
        return mAxisLabelPosition;
    }

    @Override
    public int hashCode() {
        return Objects.hash(mLevels, mTexts, mSelectedIndex, mAxisLabelPosition);
@@ -99,15 +95,15 @@ class BatteryChartViewModel {
        final BatteryChartViewModel batteryChartViewModel = (BatteryChartViewModel) other;
        return Objects.equals(mLevels, batteryChartViewModel.mLevels)
                && Objects.equals(mTexts, batteryChartViewModel.mTexts)
                && mSelectedIndex == batteryChartViewModel.mSelectedIndex
                && mAxisLabelPosition == batteryChartViewModel.mAxisLabelPosition;
                && mAxisLabelPosition == batteryChartViewModel.mAxisLabelPosition
                && mSelectedIndex == batteryChartViewModel.mSelectedIndex;
    }

    @Override
    public String toString() {
        return String.format(Locale.ENGLISH,
                "levels: %s\ntexts: %s\nselectedIndex: %d, axisLabelPosition: %s",
                Objects.toString(mLevels), Objects.toString(mTexts), mSelectedIndex,
                mAxisLabelPosition);
                "levels: %s,\ntexts: %s,\naxisLabelPosition: %s, selectedIndex: %d",
                Objects.toString(mLevels), Objects.toString(mTexts), mAxisLabelPosition,
                mSelectedIndex);
    }
}
+17 −26
Original line number Diff line number Diff line
@@ -180,21 +180,21 @@ public final class BatteryChartPreferenceControllerV2Test {
        verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
                List.of(100, 97, 95),
                List.of("8 am", "10 am", "12 pm"),
                BatteryChartViewModel.SELECTED_INDEX_ALL,
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
    }

    @Test
    public void setBatteryChartViewModel_60Hours() {
        BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
                List.of(100, 83, 59, 41),
                List.of("Sat", "Sun", "Mon", "Mon"),
                BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);

        mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));

        verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
        verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
        verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
                List.of(100, 83, 59, 41),
                List.of("Sat", "Sun", "Mon", "Mon"),
                BatteryChartViewModel.SELECTED_INDEX_ALL,
                BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
        verify(mDailyChartView).setViewModel(expectedDailyViewModel);

        reset(mDailyChartView);
        reset(mHourlyChartView);
@@ -203,16 +203,13 @@ public final class BatteryChartPreferenceControllerV2Test {
        mBatteryChartPreferenceController.refreshUi();
        verify(mDailyChartView).setVisibility(View.VISIBLE);
        verify(mHourlyChartView).setVisibility(View.VISIBLE);
        verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
                List.of(100, 83, 59, 41),
                List.of("Sat", "Sun", "Mon", "Mon"),
                0,
                BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));

        expectedDailyViewModel.setSelectedIndex(0);
        verify(mDailyChartView).setViewModel(expectedDailyViewModel);
        verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
                List.of(100, 97, 95, 93, 91, 89, 87, 85, 83),
                List.of("8 am", "10 am", "12 pm", "2 pm", "4 pm", "6 pm", "8 pm", "10 pm",
                        "12 am"),
                BatteryChartViewModel.SELECTED_INDEX_ALL,
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));

        reset(mDailyChartView);
@@ -223,17 +220,15 @@ public final class BatteryChartPreferenceControllerV2Test {
        mBatteryChartPreferenceController.refreshUi();
        verify(mDailyChartView).setVisibility(View.VISIBLE);
        verify(mHourlyChartView).setVisibility(View.VISIBLE);
        verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
                List.of(100, 83, 59, 41),
                List.of("Sat", "Sun", "Mon", "Mon"),
                1,
                BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
        verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
        expectedDailyViewModel.setSelectedIndex(1);
        verify(mDailyChartView).setViewModel(expectedDailyViewModel);
        BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel(
                List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59),
                List.of("12 am", "2 am", "4 am", "6 am", "8 am", "10 am", "12 pm", "2 pm",
                        "4 pm", "6 pm", "8 pm", "10 pm", "12 am"),
                6,
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS);
        expectedHourlyViewModel.setSelectedIndex(6);
        verify(mHourlyChartView).setViewModel(expectedHourlyViewModel);

        reset(mDailyChartView);
        reset(mHourlyChartView);
@@ -244,16 +239,12 @@ public final class BatteryChartPreferenceControllerV2Test {
        mBatteryChartPreferenceController.refreshUi();
        verify(mDailyChartView).setVisibility(View.VISIBLE);
        verify(mHourlyChartView).setVisibility(View.VISIBLE);
        verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
                List.of(100, 83, 59, 41),
                List.of("Sat", "Sun", "Mon", "Mon"),
                2,
                BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
        expectedDailyViewModel.setSelectedIndex(2);
        verify(mDailyChartView).setViewModel(expectedDailyViewModel);
        verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
                List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41),
                List.of("12 am", "2 am", "4 am", "6 am", "8 am", "10 am", "12 pm", "2 pm",
                        "4 pm", "6 pm"),
                BatteryChartViewModel.SELECTED_INDEX_ALL,
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
    }

+6 −6
Original line number Diff line number Diff line
@@ -102,10 +102,11 @@ public final class BatteryChartViewV2Test {
    @Test
    public void onClick_invokesCallback() {
        final int originalSelectedIndex = 2;
        mBatteryChartView.setViewModel(
                new BatteryChartViewModel(List.of(90, 80, 70, 60), List.of("", "", "", ""),
                        originalSelectedIndex,
                        BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
        BatteryChartViewModel batteryChartViewModel = new BatteryChartViewModel(
                List.of(90, 80, 70, 60), List.of("", "", "", ""),
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS);
        batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
        mBatteryChartView.setViewModel(batteryChartViewModel);
        for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
            mBatteryChartView.mTrapezoidSlots[i] = new BatteryChartViewV2.TrapezoidSlot();
            mBatteryChartView.mTrapezoidSlots[i].mLeft = i;
@@ -192,8 +193,7 @@ public final class BatteryChartViewV2Test {
            levels.add(index + 1);
            texts.add("");
        }
        mBatteryChartView.setViewModel(new BatteryChartViewModel(
                levels, texts, BatteryChartViewModel.SELECTED_INDEX_ALL,
        mBatteryChartView.setViewModel(new BatteryChartViewModel(levels, texts,
                BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
        mBatteryChartView.setClickableForce(true);
        when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))