diff options
| author | Svetoslav Ganov <svetoslavganov@google.com> | 2011-09-08 18:08:36 -0700 |
|---|---|---|
| committer | Svetoslav Ganov <svetoslavganov@google.com> | 2011-09-08 20:19:48 -0700 |
| commit | a53efe9923bedab4fe5d578f32eaff308e5b9e76 (patch) | |
| tree | b96e4c8cd21e71f5c1e4d29aee3e07353af64ac4 /core/java/android/widget/DatePicker.java | |
| parent | 5e8752595f7a3d3dd1e0d469ac275295e38bcfe1 (diff) | |
The time and data pickers did not support IME editor action correctly.
1. Updated TextView to traverse all focusable items. It was searching focus
down and up and was missing right and left focusabled. Updated the focus
seach to use FOCUS_FORWARD and FOCUS_BACKWARD - now all focusable views
are visited.
2. TimePicker and DatePicker were not specifying the IME options for
the next and done editor actions.
bug:5264046
Change-Id: Ief80863fc312582f2f76928bf6e915f620c427e5
Diffstat (limited to 'core/java/android/widget/DatePicker.java')
| -rw-r--r-- | core/java/android/widget/DatePicker.java | 65 |
1 files changed, 44 insertions, 21 deletions
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java index 3b67f4470957..5077be6d2623 100644 --- a/core/java/android/widget/DatePicker.java +++ b/core/java/android/widget/DatePicker.java @@ -31,6 +31,7 @@ import android.util.SparseArray; import android.view.LayoutInflater; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; +import android.view.inputmethod.EditorInfo; import android.widget.NumberPicker.OnValueChangeListener; import com.android.internal.R; @@ -81,10 +82,10 @@ public class DatePicker extends FrameLayout { private static final boolean DEFAULT_ENABLED_STATE = true; - private final NumberPicker mDaySpinner; - private final LinearLayout mSpinners; + private final NumberPicker mDaySpinner; + private final NumberPicker mMonthSpinner; private final NumberPicker mYearSpinner; @@ -481,16 +482,20 @@ public class DatePicker extends FrameLayout { private void reorderSpinners() { mSpinners.removeAllViews(); char[] order = DateFormat.getDateFormatOrder(getContext()); - for (int i = 0; i < order.length; i++) { + final int spinnerCount = order.length; + for (int i = 0; i < spinnerCount; i++) { switch (order[i]) { case DateFormat.DATE: mSpinners.addView(mDaySpinner); + setImeOptions(mDaySpinner, spinnerCount, i); break; case DateFormat.MONTH: mSpinners.addView(mMonthSpinner); + setImeOptions(mMonthSpinner, spinnerCount, i); break; case DateFormat.YEAR: mSpinners.addView(mYearSpinner); + setImeOptions(mYearSpinner, spinnerCount, i); break; default: throw new IllegalArgumentException(); @@ -669,6 +674,42 @@ public class DatePicker extends FrameLayout { } /** + * Sets the IME options for a spinner based on its ordering. + * + * @param spinner The spinner. + * @param spinnerCount The total spinner count. + * @param spinnerIndex The index of the given spinner. + */ + private void setImeOptions(NumberPicker spinner, int spinnerCount, int spinnerIndex) { + final int imeOptions; + if (spinnerIndex < spinnerCount - 1) { + imeOptions = EditorInfo.IME_ACTION_NEXT; + } else { + imeOptions = EditorInfo.IME_ACTION_DONE; + } + TextView input = (TextView) spinner.findViewById(R.id.numberpicker_input); + input.setImeOptions(imeOptions); + } + + private void setContentDescriptions() { + // Day + String text = mContext.getString(R.string.date_picker_increment_day_button); + mDaySpinner.findViewById(R.id.increment).setContentDescription(text); + text = mContext.getString(R.string.date_picker_decrement_day_button); + mDaySpinner.findViewById(R.id.decrement).setContentDescription(text); + // Month + text = mContext.getString(R.string.date_picker_increment_month_button); + mMonthSpinner.findViewById(R.id.increment).setContentDescription(text); + text = mContext.getString(R.string.date_picker_decrement_month_button); + mMonthSpinner.findViewById(R.id.decrement).setContentDescription(text); + // Year + text = mContext.getString(R.string.date_picker_increment_year_button); + mYearSpinner.findViewById(R.id.increment).setContentDescription(text); + text = mContext.getString(R.string.date_picker_decrement_year_button); + mYearSpinner.findViewById(R.id.decrement).setContentDescription(text); + } + + /** * Class for managing state storing/restoring. */ private static class SavedState extends BaseSavedState { @@ -720,22 +761,4 @@ public class DatePicker extends FrameLayout { } }; } - - private void setContentDescriptions() { - // Day - String text = mContext.getString(R.string.date_picker_increment_day_button); - mDaySpinner.findViewById(R.id.increment).setContentDescription(text); - text = mContext.getString(R.string.date_picker_decrement_day_button); - mDaySpinner.findViewById(R.id.decrement).setContentDescription(text); - // Month - text = mContext.getString(R.string.date_picker_increment_month_button); - mMonthSpinner.findViewById(R.id.increment).setContentDescription(text); - text = mContext.getString(R.string.date_picker_decrement_month_button); - mMonthSpinner.findViewById(R.id.decrement).setContentDescription(text); - // Year - text = mContext.getString(R.string.date_picker_increment_year_button); - mYearSpinner.findViewById(R.id.increment).setContentDescription(text); - text = mContext.getString(R.string.date_picker_decrement_year_button); - mYearSpinner.findViewById(R.id.decrement).setContentDescription(text); - } } |
