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

Commit d735c9b1 authored by Alan Viverette's avatar Alan Viverette
Browse files

Fix TimePicker.setCurrentHour() when argument is 0

BUG: 17515453
Change-Id: Ie67db01ed3c574a23ec377de15e48aa1b4ae3709
parent 1bbfcc2f
Loading
Loading
Loading
Loading
+35 −26
Original line number Diff line number Diff line
@@ -137,6 +137,11 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {

    private boolean mIs24HourMode;
    private boolean mShowHours;

    /**
     * When in 24-hour mode, indicates that the current hour is between
     * 1 and 12 (inclusive).
     */
    private boolean mIsOnInnerCircle;

    private int mXCenter;
@@ -513,49 +518,53 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
        mListener = listener;
    }

    /**
     * Sets the current hour in 24-hour time.
     *
     * @param hour the current hour between 0 and 23 (inclusive)
     */
    public void setCurrentHour(int hour) {
        final int degrees = (hour % 12) * DEGREES_FOR_ONE_HOUR;
        mSelectionDegrees[HOURS] = degrees;
        mSelectionDegrees[HOURS_INNER] = degrees;
        mAmOrPm = ((hour % 24) < 12) ? AM : PM;

        // 0 is 12 AM (midnight) and 12 is 12 PM (noon).
        mAmOrPm = (hour == 0 || (hour % 24) < 12) ? AM : PM;

        if (mIs24HourMode) {
            mIsOnInnerCircle = (mAmOrPm == AM);
            // Inner circle is 1 through 12.
            mIsOnInnerCircle = hour >= 1 && hour <= 12;
        } else {
            mIsOnInnerCircle = false;
        }

        initData();
        updateLayoutData();
        invalidate();
    }

    // Return hours in 0-23 range
    /**
     * Returns the current hour in 24-hour time.
     *
     * @return the current hour between 0 and 23 (inclusive)
     */
    public int getCurrentHour() {
        int hours =
                mSelectionDegrees[mIsOnInnerCircle ? HOURS_INNER : HOURS] / DEGREES_FOR_ONE_HOUR;
        int hour = (mSelectionDegrees[mIsOnInnerCircle ?
                HOURS_INNER : HOURS] / DEGREES_FOR_ONE_HOUR) % 12;
        if (mIs24HourMode) {
            if (mIsOnInnerCircle) {
                hours = hours % 12;
                if (hours == 0) {
                    hours = 12;
                }
            } else {
                if (hours != 0) {
                    hours += 12;
                }
            }
        } else {
            hours = hours % 12;
            if (hours == 0) {
                if (mAmOrPm == PM) {
                    hours = 12;
                }
            } else {
                if (mAmOrPm == PM) {
                    hours += 12;
                }
            // Convert the 12-hour value into 24-hour time based on where the
            // selector is positioned.
            if (mIsOnInnerCircle && hour == 0) {
                // Inner circle is 1 through 12.
                hour = 12;
            } else if (hour != 0) {
                // Outer circle is 13 through 23 and 0.
                hour += 12;
            }
        } else if (mAmOrPm == PM) {
            hour += 12;
        }
        return hours;
        return hour;
    }

    public void setCurrentMinute(int minute) {