am 86471d00: Merge "Accessibility support to NumberPicker, DatePicker, and TimePicker" into honeycomb
* commit '86471d00f6637dc2c839b2df2a0df511b1ac4dc7': Accessibility support to NumberPicker, DatePicker, and TimePicker
This commit is contained in:
@@ -30,6 +30,7 @@ import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.widget.NumberPicker.OnValueChangeListener;
|
||||
|
||||
import java.text.ParseException;
|
||||
@@ -353,6 +354,16 @@ public class DatePicker extends FrameLayout {
|
||||
return mIsEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
|
||||
int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY
|
||||
| DateUtils.FORMAT_SHOW_YEAR;
|
||||
String selectedDateUtterance = DateUtils.formatDateTime(mContext,
|
||||
mCurrentDate.getTimeInMillis(), flags);
|
||||
event.getText().add(selectedDateUtterance);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether the {@link CalendarView} is shown.
|
||||
*
|
||||
@@ -641,6 +652,7 @@ public class DatePicker extends FrameLayout {
|
||||
* Notifies the listener, if such, for a change in the selected date.
|
||||
*/
|
||||
private void notifyDateChanged() {
|
||||
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
|
||||
if (mOnDateChangedListener != null) {
|
||||
mOnDateChangedListener.onDateChanged(this, getYear(), getMonth(), getDayOfMonth());
|
||||
}
|
||||
|
||||
@@ -23,9 +23,11 @@ import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.widget.NumberPicker.OnValueChangeListener;
|
||||
|
||||
import java.text.DateFormatSymbols;
|
||||
@@ -88,6 +90,8 @@ public class TimePicker extends FrameLayout {
|
||||
// callbacks
|
||||
private OnTimeChangedListener mOnTimeChangedListener;
|
||||
|
||||
private Calendar mTempCalendar;
|
||||
|
||||
/**
|
||||
* The callback interface used to indicate the time has been adjusted.
|
||||
*/
|
||||
@@ -214,12 +218,12 @@ public class TimePicker extends FrameLayout {
|
||||
updateAmPmControl();
|
||||
|
||||
// initialize to current time
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
mTempCalendar = Calendar.getInstance();
|
||||
setOnTimeChangedListener(NO_OP_CHANGE_LISTENER);
|
||||
|
||||
// set to current time
|
||||
setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
|
||||
setCurrentMinute(calendar.get(Calendar.MINUTE));
|
||||
setCurrentHour(mTempCalendar.get(Calendar.HOUR_OF_DAY));
|
||||
setCurrentMinute(mTempCalendar.get(Calendar.MINUTE));
|
||||
|
||||
if (!isEnabled()) {
|
||||
setEnabled(false);
|
||||
@@ -406,6 +410,22 @@ public class TimePicker extends FrameLayout {
|
||||
return mHourSpinner.getBaseline();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
|
||||
int flags = DateUtils.FORMAT_SHOW_TIME;
|
||||
if (mIs24HourView) {
|
||||
flags |= DateUtils.FORMAT_24HOUR;
|
||||
} else {
|
||||
flags |= DateUtils.FORMAT_12HOUR;
|
||||
}
|
||||
mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour());
|
||||
mTempCalendar.set(Calendar.MINUTE, getCurrentMinute());
|
||||
String selectedDateUtterance = DateUtils.formatDateTime(mContext,
|
||||
mTempCalendar.getTimeInMillis(), flags);
|
||||
event.getText().add(selectedDateUtterance);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void updateHourControl() {
|
||||
if (is24HourView()) {
|
||||
mHourSpinner.setMinValue(0);
|
||||
@@ -435,9 +455,11 @@ public class TimePicker extends FrameLayout {
|
||||
mAmPmButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
|
||||
}
|
||||
|
||||
private void onTimeChanged() {
|
||||
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
|
||||
if (mOnTimeChangedListener != null) {
|
||||
mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute());
|
||||
}
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
<ImageButton android:id="@+id/increment"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="?android:attr/numberPickerUpButtonStyle" />
|
||||
style="?android:attr/numberPickerUpButtonStyle"
|
||||
android:contentDescription="@string/number_picker_increment_button" />
|
||||
|
||||
<EditText android:id="@+id/numberpicker_input"
|
||||
android:layout_width="fill_parent"
|
||||
@@ -32,6 +33,7 @@
|
||||
<ImageButton android:id="@+id/decrement"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="?android:attr/numberPickerDownButtonStyle" />
|
||||
style="?android:attr/numberPickerDownButtonStyle"
|
||||
android:contentDescription="@string/number_picker_decrement_button" />
|
||||
|
||||
</merge>
|
||||
|
||||
@@ -2690,4 +2690,11 @@
|
||||
|
||||
<!-- Choose Account Activity label -->
|
||||
<string name="choose_account_label">Select an account</string>
|
||||
|
||||
<!-- NumberPicker - accessibility support -->
|
||||
<!-- Description of the button to increment the NumberPicker value. [CHAR LIMIT=NONE] -->
|
||||
<string name="number_picker_increment_button">Increment</string>
|
||||
<!-- Description of the button to decrement the NumberPicker value. [CHAR LIMIT=NONE] -->
|
||||
<string name="number_picker_decrement_button">Decrement</string>
|
||||
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user