summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/preference/CheckBoxPreference.java3
-rw-r--r--core/java/android/preference/SwitchPreference.java4
-rw-r--r--core/java/android/preference/TwoStatePreference.java47
-rw-r--r--core/java/android/widget/CheckBox.java13
-rw-r--r--core/java/android/widget/CheckedTextView.java10
-rw-r--r--core/java/android/widget/RadioButton.java13
-rw-r--r--core/java/android/widget/Switch.java15
-rw-r--r--core/java/android/widget/TextView.java3
-rw-r--r--core/java/android/widget/ToggleButton.java14
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));
+ }
+ }
}