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

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

Fix AM/PM text i18n and clean up keyboard support in time picker

Also updates date picker to use drawable for the header background to
match the implementation in time picker. The time picker background
now supports showing a focused state ripple.

BUG: 17344077
BUG: 16227517
Change-Id: Ida715badb4a151fc16edd91fd4a0dae32953c99e
parent b10e39e7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -260,6 +260,7 @@ package android {
  public static final class R.attr {
    ctor public R.attr();
    field public static final int __removed2 = 16843937; // 0x10104a1
    field public static final int absListViewStyle = 16842858; // 0x101006a
    field public static final int accessibilityEventTypes = 16843648; // 0x1010380
    field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -482,7 +483,7 @@ package android {
    field public static final int datePickerMode = 16843956; // 0x10104b4
    field public static final int datePickerStyle = 16843612; // 0x101035c
    field public static final int dateTextAppearance = 16843593; // 0x1010349
    field public static final int dayOfWeekBackgroundColor = 16843924; // 0x1010494
    field public static final int dayOfWeekBackground = 16843924; // 0x1010494
    field public static final int dayOfWeekTextAppearance = 16843925; // 0x1010495
    field public static final int debuggable = 16842767; // 0x101000f
    field public static final int defaultValue = 16843245; // 0x10101ed
@@ -663,7 +664,6 @@ package android {
    field public static final int hasCode = 16842764; // 0x101000c
    field public static final int headerAmPmTextAppearance = 16843936; // 0x10104a0
    field public static final int headerBackground = 16843055; // 0x101012f
    field public static final int headerBackgroundColor = 16843937; // 0x10104a1
    field public static final int headerDayOfMonthTextAppearance = 16843927; // 0x1010497
    field public static final int headerDividersEnabled = 16843310; // 0x101022e
    field public static final int headerMonthTextAppearance = 16843926; // 0x1010496
+2 −2
Original line number Diff line number Diff line
@@ -71,9 +71,9 @@ import libcore.icu.ICU;
 * @attr ref android.R.styleable#DatePicker_minDate
 * @attr ref android.R.styleable#DatePicker_spinnersShown
 * @attr ref android.R.styleable#DatePicker_calendarViewShown
 * @attr ref android.R.styleable#DatePicker_dayOfWeekBackgroundColor
 * @attr ref android.R.styleable#DatePicker_dayOfWeekBackground
 * @attr ref android.R.styleable#DatePicker_dayOfWeekTextAppearance
 * @attr ref android.R.styleable#DatePicker_headerBackgroundColor
 * @attr ref android.R.styleable#DatePicker_headerBackground
 * @attr ref android.R.styleable#DatePicker_headerMonthTextAppearance
 * @attr ref android.R.styleable#DatePicker_headerDayOfMonthTextAppearance
 * @attr ref android.R.styleable#DatePicker_headerYearTextAppearance
+4 −8
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.format.DateFormat;
@@ -149,16 +149,12 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i
            mDayOfWeekView.setTextAppearance(context, dayOfWeekTextAppearanceResId);
        }

        final int dayOfWeekBackgroundColor = a.getColor(
                R.styleable.DatePicker_dayOfWeekBackgroundColor, Color.TRANSPARENT);
        mDayOfWeekView.setBackgroundColor(dayOfWeekBackgroundColor);
        mDayOfWeekView.setBackground(a.getDrawable(R.styleable.DatePicker_dayOfWeekBackground));

        dateLayout.setBackground(a.getDrawable(R.styleable.DatePicker_headerBackground));

        final int headerSelectedTextColor = a.getColor(
                R.styleable.DatePicker_headerSelectedTextColor, defaultHighlightColor);
        final int headerBackgroundColor = a.getColor(R.styleable.DatePicker_headerBackgroundColor,
                Color.TRANSPARENT);
        dateLayout.setBackgroundColor(headerBackgroundColor);

        final int monthTextAppearanceResId = a.getResourceId(
                R.styleable.DatePicker_headerMonthTextAppearance, -1);
        if (monthTextAppearanceResId != -1) {
+4 −3
Original line number Diff line number Diff line
@@ -458,6 +458,7 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
        a.recycle();

        setOnTouchListener(this);
        setClickable(true);

        // Initial values
        final Calendar calendar = Calendar.getInstance(Locale.getDefault());
@@ -612,9 +613,9 @@ public class RadialTimePickerView extends View implements View.OnTouchListener {
            mMinutesTexts[i] = String.format("%02d", MINUTES_NUMBERS[i]);
        }

        String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
        mAmPmText[AM] = amPmTexts[0];
        mAmPmText[PM] = amPmTexts[1];
        String[] amPmStrings = TimePickerClockDelegate.getAmPmStrings(mContext);
        mAmPmText[AM] = amPmStrings[0];
        mAmPmText[PM] = amPmStrings[1];
    }

    private void initData() {
+28 −43
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -40,7 +39,6 @@ import android.view.accessibility.AccessibilityNodeInfo;

import com.android.internal.R;

import java.text.DateFormatSymbols;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;
@@ -71,6 +69,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im

    private static final int HOURS_IN_HALF_DAY = 12;

    private View mHeaderView;
    private TextView mHourView;
    private TextView mMinuteView;
    private TextView mAmPmTextView;
@@ -156,11 +155,8 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
            mAmPmTextView.setTextAppearance(context, headerAmPmTextAppearance);
        }

        final int headerBackgroundColor = a.getColor(
                R.styleable.TimePicker_headerBackgroundColor, Color.TRANSPARENT);
        if (headerBackgroundColor != Color.TRANSPARENT) {
            mainView.findViewById(R.id.time_header).setBackgroundColor(headerBackgroundColor);
        }
        mHeaderView = mainView.findViewById(R.id.time_header);
        mHeaderView.setBackground(a.getDrawable(R.styleable.TimePicker_headerBackground));

        a.recycle();

@@ -194,14 +190,11 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
    }

    private void setupListeners() {
        KeyboardListener keyboardListener = new KeyboardListener();
        mDelegator.setOnKeyListener(keyboardListener);
        mHeaderView.setOnKeyListener(mKeyListener);
        mHeaderView.setOnFocusChangeListener(mFocusListener);
        mHeaderView.setFocusable(true);

        mHourView.setOnKeyListener(keyboardListener);
        mMinuteView.setOnKeyListener(keyboardListener);
        mAmPmTextView.setOnKeyListener(keyboardListener);
        mRadialTimePickerView.setOnValueSelectedListener(this);
        mRadialTimePickerView.setOnKeyListener(keyboardListener);

        mHourView.setOnClickListener(new View.OnClickListener() {
            @Override
@@ -641,7 +634,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
            if (!isTypedTimeFullyLegal()) {
                mTypedTimes.clear();
            }
            finishKbMode(true);
            finishKbMode();
        }
    }

@@ -776,27 +769,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
     * @return true if the key was successfully processed, false otherwise.
     */
    private boolean processKeyUp(int keyCode) {
        if (keyCode == KeyEvent.KEYCODE_ESCAPE || keyCode == KeyEvent.KEYCODE_TAB) {
            if(mInKbMode) {
                if (isTypedTimeFullyLegal()) {
                    finishKbMode(true);
                }
                return true;
            }
        } else if (keyCode == KeyEvent.KEYCODE_ENTER) {
            if (mInKbMode) {
                if (!isTypedTimeFullyLegal()) {
                    return true;
                }
                finishKbMode(false);
            }
            if (mOnTimeChangedListener != null) {
                mOnTimeChangedListener.onTimeChanged(mDelegator,
                        mRadialTimePickerView.getCurrentHour(),
                        mRadialTimePickerView.getCurrentMinute());
            }
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_DEL) {
        if (keyCode == KeyEvent.KEYCODE_DEL) {
            if (mInKbMode) {
                if (!mTypedTimes.isEmpty()) {
                    int deleted = deleteLastTypedKey();
@@ -925,9 +898,8 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im

    /**
     * Get out of keyboard mode. If there is nothing in typedTimes, revert to TimePicker's time.
     * @param updateDisplays If true, update the displays with the relevant time.
     */
    private void finishKbMode(boolean updateDisplays) {
    private void finishKbMode() {
        mInKbMode = false;
        if (!mTypedTimes.isEmpty()) {
            int values[] = getEnteredTime(null);
@@ -938,11 +910,9 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
            }
            mTypedTimes.clear();
        }
        if (updateDisplays) {
        updateDisplay(false);
        mRadialTimePickerView.setInputEnabled(true);
    }
    }

    /**
     * Update the hours, minutes, and AM/PM displays with the typed times. If the typedTimes is
@@ -1261,7 +1231,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
        }
    }

    private class KeyboardListener implements View.OnKeyListener {
    private final View.OnKeyListener mKeyListener = new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_UP) {
@@ -1269,5 +1239,20 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
            }
            return false;
        }
    };

    private final View.OnFocusChangeListener mFocusListener = new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus && mInKbMode && isTypedTimeFullyLegal()) {
                finishKbMode();

                if (mOnTimeChangedListener != null) {
                    mOnTimeChangedListener.onTimeChanged(mDelegator,
                            mRadialTimePickerView.getCurrentHour(),
                            mRadialTimePickerView.getCurrentMinute());
                }
            }
        }
    };
}
Loading