diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/preference/CheckBoxPreference.java | 3 | ||||
| -rw-r--r-- | core/java/android/preference/SwitchPreference.java | 4 | ||||
| -rw-r--r-- | core/java/android/preference/TwoStatePreference.java | 47 | ||||
| -rw-r--r-- | core/java/android/widget/CheckBox.java | 13 | ||||
| -rw-r--r-- | core/java/android/widget/CheckedTextView.java | 10 | ||||
| -rw-r--r-- | core/java/android/widget/RadioButton.java | 13 | ||||
| -rw-r--r-- | core/java/android/widget/Switch.java | 15 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 3 | ||||
| -rw-r--r-- | core/java/android/widget/ToggleButton.java | 14 |
9 files changed, 82 insertions, 40 deletions
diff --git a/core/java/android/preference/CheckBoxPreference.java b/core/java/android/preference/CheckBoxPreference.java index 166b21b..1536760 100644 --- a/core/java/android/preference/CheckBoxPreference.java +++ b/core/java/android/preference/CheckBoxPreference.java @@ -61,8 +61,7 @@ public class CheckBoxPreference extends TwoStatePreference { View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); if (checkboxView != null && checkboxView instanceof Checkable) { ((Checkable) checkboxView).setChecked(mChecked); - // Post this so this view is bound and attached when firing the event. - postSendAccessibilityEventForView(checkboxView); + sendAccessibilityEvent(checkboxView); } syncSummaryView(view); diff --git a/core/java/android/preference/SwitchPreference.java b/core/java/android/preference/SwitchPreference.java index 3dbd522..17f0c1b 100644 --- a/core/java/android/preference/SwitchPreference.java +++ b/core/java/android/preference/SwitchPreference.java @@ -102,8 +102,8 @@ public class SwitchPreference extends TwoStatePreference { View checkableView = view.findViewById(com.android.internal.R.id.switchWidget); if (checkableView != null && checkableView instanceof Checkable) { ((Checkable) checkableView).setChecked(mChecked); - // Post this so this view is bound and attached when firing the event. - postSendAccessibilityEventForView(checkableView); + + sendAccessibilityEvent(checkableView); if (checkableView instanceof Switch) { final Switch switchView = (Switch) checkableView; diff --git a/core/java/android/preference/TwoStatePreference.java b/core/java/android/preference/TwoStatePreference.java index b6f00ad..d186b20 100644 --- a/core/java/android/preference/TwoStatePreference.java +++ b/core/java/android/preference/TwoStatePreference.java @@ -37,10 +37,9 @@ public abstract class TwoStatePreference extends Preference { private CharSequence mSummaryOn; private CharSequence mSummaryOff; boolean mChecked; - private boolean mSendAccessibilityEventViewClickedType; + private boolean mSendClickAccessibilityEvent; private boolean mDisableDependentsState; - private SendAccessibilityEventTypeViewClicked mSendAccessibilityEventTypeViewClicked; public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); @@ -60,9 +59,7 @@ public abstract class TwoStatePreference extends Preference { boolean newValue = !isChecked(); - // in onBindView() an AccessibilityEventViewClickedType is sent to announce the change - // not sending - mSendAccessibilityEventViewClickedType = true; + mSendClickAccessibilityEvent = true; if (!callChangeListener(newValue)) { return; @@ -188,26 +185,19 @@ public abstract class TwoStatePreference extends Preference { : (Boolean) defaultValue); } - /** - * Post send an accessibility event for the given view if appropriate. - * - * @param view View that should send the event - */ - void postSendAccessibilityEventForView(View view) { - // send an event to announce the value change of the state. It is done here - // because clicking a preference does not immediately change the checked state - // for example when enabling the WiFi - if (mSendAccessibilityEventViewClickedType - && AccessibilityManager.getInstance(getContext()).isEnabled() - && view.isEnabled()) { - mSendAccessibilityEventViewClickedType = false; - if (mSendAccessibilityEventTypeViewClicked == null) { - mSendAccessibilityEventTypeViewClicked = - new SendAccessibilityEventTypeViewClicked(); - } - mSendAccessibilityEventTypeViewClicked.mView = view; - view.post(mSendAccessibilityEventTypeViewClicked); + void sendAccessibilityEvent(View view) { + // Since the view is still not attached we create, populate, + // and send the event directly since we do not know when it + // will be attached and posting commands is not as clean. + AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getContext()); + if (mSendClickAccessibilityEvent && accessibilityManager.isEnabled()) { + AccessibilityEvent event = AccessibilityEvent.obtain(); + event.setEventType(AccessibilityEvent.TYPE_VIEW_CLICKED); + view.onInitializeAccessibilityEvent(event); + view.dispatchPopulateAccessibilityEvent(event); + accessibilityManager.sendAccessibilityEvent(event); } + mSendClickAccessibilityEvent = false; } /** @@ -301,13 +291,4 @@ public abstract class TwoStatePreference extends Preference { } }; } - - private final class SendAccessibilityEventTypeViewClicked implements Runnable { - private View mView; - - @Override - public void run() { - mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); - } - } } diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java index b89c2a9..2788846 100644 --- a/core/java/android/widget/CheckBox.java +++ b/core/java/android/widget/CheckBox.java @@ -18,6 +18,9 @@ package android.widget; import android.content.Context; import android.util.AttributeSet; +import android.view.accessibility.AccessibilityEvent; + +import com.android.internal.R; /** @@ -65,4 +68,14 @@ public class CheckBox extends CompoundButton { public CheckBox(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + super.onPopulateAccessibilityEvent(event); + if (isChecked()) { + event.getText().add(mContext.getString(R.string.checkbox_checked)); + } else { + event.getText().add(mContext.getString(R.string.checkbox_not_checked)); + } + } } diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java index f3a6da7..7598e54 100644 --- a/core/java/android/widget/CheckedTextView.java +++ b/core/java/android/widget/CheckedTextView.java @@ -221,4 +221,14 @@ public class CheckedTextView extends TextView implements Checkable { super.onInitializeAccessibilityEvent(event); event.setChecked(mChecked); } + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + super.onPopulateAccessibilityEvent(event); + if (isChecked()) { + event.getText().add(mContext.getString(R.string.radiobutton_selected)); + } else { + event.getText().add(mContext.getString(R.string.radiobutton_not_selected)); + } + } } diff --git a/core/java/android/widget/RadioButton.java b/core/java/android/widget/RadioButton.java index ebbe1cd..9fa649f 100644 --- a/core/java/android/widget/RadioButton.java +++ b/core/java/android/widget/RadioButton.java @@ -18,6 +18,9 @@ package android.widget; import android.content.Context; import android.util.AttributeSet; +import android.view.accessibility.AccessibilityEvent; + +import com.android.internal.R; /** @@ -72,4 +75,14 @@ public class RadioButton extends CompoundButton { super.toggle(); } } + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + super.onPopulateAccessibilityEvent(event); + if (isChecked()) { + event.getText().add(mContext.getString(R.string.radiobutton_selected)); + } else { + event.getText().add(mContext.getString(R.string.radiobutton_not_selected)); + } + } } diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java index 0c80a11..57f73ac 100644 --- a/core/java/android/widget/Switch.java +++ b/core/java/android/widget/Switch.java @@ -364,8 +364,19 @@ public class Switch extends CompoundButton { @Override public void onPopulateAccessibilityEvent(AccessibilityEvent event) { super.onPopulateAccessibilityEvent(event); - Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout; - event.getText().add(switchText.getText()); + if (isChecked()) { + CharSequence text = mOnLayout.getText(); + if (TextUtils.isEmpty(text)) { + text = mContext.getString(R.string.switch_on); + } + event.getText().add(text); + } else { + CharSequence text = mOffLayout.getText(); + if (TextUtils.isEmpty(text)) { + text = mContext.getString(R.string.switch_off); + } + event.getText().add(text); + } } private Layout makeLayout(CharSequence text) { diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 127b6a3..dd5f065 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -8425,6 +8425,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (TextUtils.isEmpty(text)) { text = getHint(); } + if (TextUtils.isEmpty(text)) { + text = getContentDescription(); + } if (!TextUtils.isEmpty(text)) { event.getText().add(text); } diff --git a/core/java/android/widget/ToggleButton.java b/core/java/android/widget/ToggleButton.java index 3b680e8..ba9de24 100644 --- a/core/java/android/widget/ToggleButton.java +++ b/core/java/android/widget/ToggleButton.java @@ -22,6 +22,9 @@ import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.util.AttributeSet; +import android.view.accessibility.AccessibilityEvent; + +import com.android.internal.R; /** * Displays checked/unchecked states as a button @@ -146,5 +149,14 @@ public class ToggleButton extends CompoundButton { mIndicatorDrawable.setAlpha(isEnabled() ? NO_ALPHA : (int) (NO_ALPHA * mDisabledAlpha)); } } - + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + super.onPopulateAccessibilityEvent(event); + if (isChecked()) { + event.getText().add(mContext.getString(R.string.togglebutton_pressed)); + } else { + event.getText().add(mContext.getString(R.string.togglebutton_not_pressed)); + } + } } |
