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

Commit 3053b2fd authored by Chet Haase's avatar Chet Haase
Browse files

Allow TimePicker/DatePicker to use legacy layout style

In L, the TimePicker was rewritten to use a clock face and the
DatePicker was rewritten to use a calendar. This
change allows developers to opt into the old style instead
(android:timePickerMode="spinner|clock" and
android:datePickerMode="spinner|calendar").)

Issue #16717952 Pre-L style android.widget.TimePicker on L
Issue #16846963 Allow developer to use legacy DatePicker appearance

Change-Id: I4ee071fcbc5bf25eab83d6a5cb6ff352a603f90a
parent c4489f99
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -479,6 +479,7 @@ package android {
    field public static final int dashWidth = 16843174; // 0x10101a6
    field public static final int data = 16842798; // 0x101002e
    field public static final int datePickerDialogTheme = 16843951; // 0x10104af
    field public static final int datePickerMode = 16843958; // 0x10104b6
    field public static final int datePickerStyle = 16843612; // 0x101035c
    field public static final int dateTextAppearance = 16843593; // 0x1010349
    field public static final int dayOfWeekBackgroundColor = 16843926; // 0x1010496
@@ -1313,6 +1314,7 @@ package android {
    field public static final int tileModeX = 16843897; // 0x1010479
    field public static final int tileModeY = 16843898; // 0x101047a
    field public static final int timePickerDialogTheme = 16843936; // 0x10104a0
    field public static final int timePickerMode = 16843959; // 0x10104b7
    field public static final int timePickerStyle = 16843935; // 0x101049f
    field public static final int timeZone = 16843724; // 0x10103cc
    field public static final int tint = 16843041; // 0x1010121
+18 −11
Original line number Diff line number Diff line
@@ -84,6 +84,9 @@ import libcore.icu.ICU;
public class DatePicker extends FrameLayout {
    private static final String LOG_TAG = DatePicker.class.getSimpleName();

    private static final int MODE_SPINNER = 1;
    private static final int MODE_CALENDAR = 2;

    private final DatePickerDelegate mDelegate;

    /**
@@ -120,24 +123,28 @@ public class DatePicker extends FrameLayout {

        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DatePicker,
                defStyleAttr, defStyleRes);
        final boolean legacyMode = a.getBoolean(R.styleable.DatePicker_legacyMode, true);
        int mode = a.getInt(R.styleable.DatePicker_datePickerMode, MODE_SPINNER);
        a.recycle();

        if (legacyMode) {
            mDelegate = createLegacyUIDelegate(context, attrs, defStyleAttr, defStyleRes);
        } else {
            mDelegate = createNewUIDelegate(context, attrs, defStyleAttr, defStyleRes);
        switch (mode) {
            case MODE_CALENDAR:
                mDelegate = createCalendarUIDelegate(context, attrs, defStyleAttr, defStyleRes);
                break;
            case MODE_SPINNER:
            default:
                mDelegate = createSpinnerUIDelegate(context, attrs, defStyleAttr, defStyleRes);
                break;
        }
    }

    private DatePickerDelegate createLegacyUIDelegate(Context context, AttributeSet attrs,
    private DatePickerDelegate createSpinnerUIDelegate(Context context, AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        return new LegacyDatePickerDelegate(this, context, attrs, defStyleAttr, defStyleRes);
        return new DatePickerSpinnerDelegate(this, context, attrs, defStyleAttr, defStyleRes);
    }

    private DatePickerDelegate createNewUIDelegate(Context context, AttributeSet attrs,
    private DatePickerDelegate createCalendarUIDelegate(Context context, AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        return new android.widget.DatePickerDelegate(this, context, attrs, defStyleAttr,
        return new DatePickerCalendarDelegate(this, context, attrs, defStyleAttr,
                defStyleRes);
    }

@@ -454,7 +461,7 @@ public class DatePicker extends FrameLayout {
    /**
     * A delegate implementing the basic DatePicker
     */
    private static class LegacyDatePickerDelegate extends AbstractDatePickerDelegate {
    private static class DatePickerSpinnerDelegate extends AbstractDatePickerDelegate {

        private static final String DATE_FORMAT = "MM/dd/yyyy";

@@ -500,7 +507,7 @@ public class DatePicker extends FrameLayout {

        private boolean mIsEnabled = DEFAULT_ENABLED_STATE;

        LegacyDatePickerDelegate(DatePicker delegator, Context context, AttributeSet attrs,
        DatePickerSpinnerDelegate(DatePicker delegator, Context context, AttributeSet attrs,
                int defStyleAttr, int defStyleRes) {
            super(delegator, context);

+2 −2
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ import java.util.Locale;
/**
 * A delegate for picking up a date (day / month / year).
 */
class DatePickerDelegate extends DatePicker.AbstractDatePickerDelegate implements
class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate implements
        View.OnClickListener, DatePickerController {

    private static final int UNINITIALIZED = -1;
@@ -113,7 +113,7 @@ class DatePickerDelegate extends DatePicker.AbstractDatePickerDelegate implement

    private HashSet<OnDateChangedListener> mListeners = new HashSet<OnDateChangedListener>();

    public DatePickerDelegate(DatePicker delegator, Context context, AttributeSet attrs,
    public DatePickerCalendarDelegate(DatePicker delegator, Context context, AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        super(delegator, context);

+14 −7
Original line number Diff line number Diff line
@@ -45,6 +45,9 @@ import java.util.Locale;
 */
@Widget
public class TimePicker extends FrameLayout {
    private static final int MODE_SPINNER = 1;
    private static final int MODE_CLOCK = 2;

    private final TimePickerDelegate mDelegate;

    /**
@@ -77,15 +80,19 @@ public class TimePicker extends FrameLayout {

        final TypedArray a = context.obtainStyledAttributes(
                attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes);
        final boolean legacyMode = a.getBoolean(R.styleable.TimePicker_legacyMode, true);
        int mode = a.getInt(R.styleable.TimePicker_timePickerMode, MODE_SPINNER);
        a.recycle();

        if (legacyMode) {
            mDelegate = new LegacyTimePickerDelegate(
        switch (mode) {
            case MODE_CLOCK:
                mDelegate = new TimePickerSpinnerDelegate(
                        this, context, attrs, defStyleAttr, defStyleRes);
        } else {
            mDelegate = new android.widget.TimePickerDelegate(
                break;
            case MODE_SPINNER:
            default:
                mDelegate = new TimePickerClockDelegate(
                        this, context, attrs, defStyleAttr, defStyleRes);
                break;
        }
    }

+3 −3
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES;
/**
 * A delegate implementing the basic TimePicker
 */
class LegacyTimePickerDelegate extends TimePicker.AbstractTimePickerDelegate {
class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate {

    private static final boolean DEFAULT_ENABLED_STATE = true;

@@ -100,7 +100,7 @@ class LegacyTimePickerDelegate extends TimePicker.AbstractTimePickerDelegate {
                }
            };

    public LegacyTimePickerDelegate(TimePicker delegator, Context context, AttributeSet attrs,
    public TimePickerClockDelegate(TimePicker delegator, Context context, AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        super(delegator, context);

Loading