summaryrefslogtreecommitdiff
path: root/core/java/android/widget/DatePicker.java
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2011-09-08 18:08:36 -0700
committerSvetoslav Ganov <svetoslavganov@google.com>2011-09-08 20:19:48 -0700
commita53efe9923bedab4fe5d578f32eaff308e5b9e76 (patch)
treeb96e4c8cd21e71f5c1e4d29aee3e07353af64ac4 /core/java/android/widget/DatePicker.java
parent5e8752595f7a3d3dd1e0d469ac275295e38bcfe1 (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.java65
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);
- }
}