Loading core/java/android/preference/CheckBoxPreference.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -61,8 +61,7 @@ public class CheckBoxPreference extends TwoStatePreference { View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); if (checkboxView != null && checkboxView instanceof Checkable) { if (checkboxView != null && checkboxView instanceof Checkable) { ((Checkable) checkboxView).setChecked(mChecked); ((Checkable) checkboxView).setChecked(mChecked); // Post this so this view is bound and attached when firing the event. sendAccessibilityEvent(checkboxView); postSendAccessibilityEventForView(checkboxView); } } syncSummaryView(view); syncSummaryView(view); Loading core/java/android/preference/SwitchPreference.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -102,8 +102,8 @@ public class SwitchPreference extends TwoStatePreference { View checkableView = view.findViewById(com.android.internal.R.id.switchWidget); View checkableView = view.findViewById(com.android.internal.R.id.switchWidget); if (checkableView != null && checkableView instanceof Checkable) { if (checkableView != null && checkableView instanceof Checkable) { ((Checkable) checkableView).setChecked(mChecked); ((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) { if (checkableView instanceof Switch) { final Switch switchView = (Switch) checkableView; final Switch switchView = (Switch) checkableView; Loading core/java/android/preference/TwoStatePreference.java +14 −33 Original line number Original line Diff line number Diff line Loading @@ -37,10 +37,9 @@ public abstract class TwoStatePreference extends Preference { private CharSequence mSummaryOn; private CharSequence mSummaryOn; private CharSequence mSummaryOff; private CharSequence mSummaryOff; boolean mChecked; boolean mChecked; private boolean mSendAccessibilityEventViewClickedType; private boolean mSendClickAccessibilityEvent; private boolean mDisableDependentsState; private boolean mDisableDependentsState; private SendAccessibilityEventTypeViewClicked mSendAccessibilityEventTypeViewClicked; public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); super(context, attrs, defStyle); Loading @@ -60,9 +59,7 @@ public abstract class TwoStatePreference extends Preference { boolean newValue = !isChecked(); boolean newValue = !isChecked(); // in onBindView() an AccessibilityEventViewClickedType is sent to announce the change mSendClickAccessibilityEvent = true; // not sending mSendAccessibilityEventViewClickedType = true; if (!callChangeListener(newValue)) { if (!callChangeListener(newValue)) { return; return; Loading Loading @@ -188,26 +185,19 @@ public abstract class TwoStatePreference extends Preference { : (Boolean) defaultValue); : (Boolean) defaultValue); } } /** void sendAccessibilityEvent(View view) { * Post send an accessibility event for the given view if appropriate. // Since the view is still not attached we create, populate, * // and send the event directly since we do not know when it * @param view View that should send the event // will be attached and posting commands is not as clean. */ AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getContext()); void postSendAccessibilityEventForView(View view) { if (mSendClickAccessibilityEvent && accessibilityManager.isEnabled()) { // send an event to announce the value change of the state. It is done here AccessibilityEvent event = AccessibilityEvent.obtain(); // because clicking a preference does not immediately change the checked state event.setEventType(AccessibilityEvent.TYPE_VIEW_CLICKED); // for example when enabling the WiFi view.onInitializeAccessibilityEvent(event); if (mSendAccessibilityEventViewClickedType view.dispatchPopulateAccessibilityEvent(event); && AccessibilityManager.getInstance(getContext()).isEnabled() accessibilityManager.sendAccessibilityEvent(event); && view.isEnabled()) { mSendAccessibilityEventViewClickedType = false; if (mSendAccessibilityEventTypeViewClicked == null) { mSendAccessibilityEventTypeViewClicked = new SendAccessibilityEventTypeViewClicked(); } mSendAccessibilityEventTypeViewClicked.mView = view; view.post(mSendAccessibilityEventTypeViewClicked); } } mSendClickAccessibilityEvent = false; } } /** /** Loading Loading @@ -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); } } } } core/java/android/widget/CheckBox.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,9 @@ package android.widget; import android.content.Context; import android.content.Context; import android.util.AttributeSet; import android.util.AttributeSet; import android.view.accessibility.AccessibilityEvent; import com.android.internal.R; /** /** Loading Loading @@ -65,4 +68,14 @@ public class CheckBox extends CompoundButton { public CheckBox(Context context, AttributeSet attrs, int defStyle) { public CheckBox(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, 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)); } } } } core/java/android/widget/CheckedTextView.java +10 −0 Original line number Original line Diff line number Diff line Loading @@ -221,4 +221,14 @@ public class CheckedTextView extends TextView implements Checkable { super.onInitializeAccessibilityEvent(event); super.onInitializeAccessibilityEvent(event); event.setChecked(mChecked); 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)); } } } } Loading
core/java/android/preference/CheckBoxPreference.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -61,8 +61,7 @@ public class CheckBoxPreference extends TwoStatePreference { View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); if (checkboxView != null && checkboxView instanceof Checkable) { if (checkboxView != null && checkboxView instanceof Checkable) { ((Checkable) checkboxView).setChecked(mChecked); ((Checkable) checkboxView).setChecked(mChecked); // Post this so this view is bound and attached when firing the event. sendAccessibilityEvent(checkboxView); postSendAccessibilityEventForView(checkboxView); } } syncSummaryView(view); syncSummaryView(view); Loading
core/java/android/preference/SwitchPreference.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -102,8 +102,8 @@ public class SwitchPreference extends TwoStatePreference { View checkableView = view.findViewById(com.android.internal.R.id.switchWidget); View checkableView = view.findViewById(com.android.internal.R.id.switchWidget); if (checkableView != null && checkableView instanceof Checkable) { if (checkableView != null && checkableView instanceof Checkable) { ((Checkable) checkableView).setChecked(mChecked); ((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) { if (checkableView instanceof Switch) { final Switch switchView = (Switch) checkableView; final Switch switchView = (Switch) checkableView; Loading
core/java/android/preference/TwoStatePreference.java +14 −33 Original line number Original line Diff line number Diff line Loading @@ -37,10 +37,9 @@ public abstract class TwoStatePreference extends Preference { private CharSequence mSummaryOn; private CharSequence mSummaryOn; private CharSequence mSummaryOff; private CharSequence mSummaryOff; boolean mChecked; boolean mChecked; private boolean mSendAccessibilityEventViewClickedType; private boolean mSendClickAccessibilityEvent; private boolean mDisableDependentsState; private boolean mDisableDependentsState; private SendAccessibilityEventTypeViewClicked mSendAccessibilityEventTypeViewClicked; public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); super(context, attrs, defStyle); Loading @@ -60,9 +59,7 @@ public abstract class TwoStatePreference extends Preference { boolean newValue = !isChecked(); boolean newValue = !isChecked(); // in onBindView() an AccessibilityEventViewClickedType is sent to announce the change mSendClickAccessibilityEvent = true; // not sending mSendAccessibilityEventViewClickedType = true; if (!callChangeListener(newValue)) { if (!callChangeListener(newValue)) { return; return; Loading Loading @@ -188,26 +185,19 @@ public abstract class TwoStatePreference extends Preference { : (Boolean) defaultValue); : (Boolean) defaultValue); } } /** void sendAccessibilityEvent(View view) { * Post send an accessibility event for the given view if appropriate. // Since the view is still not attached we create, populate, * // and send the event directly since we do not know when it * @param view View that should send the event // will be attached and posting commands is not as clean. */ AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getContext()); void postSendAccessibilityEventForView(View view) { if (mSendClickAccessibilityEvent && accessibilityManager.isEnabled()) { // send an event to announce the value change of the state. It is done here AccessibilityEvent event = AccessibilityEvent.obtain(); // because clicking a preference does not immediately change the checked state event.setEventType(AccessibilityEvent.TYPE_VIEW_CLICKED); // for example when enabling the WiFi view.onInitializeAccessibilityEvent(event); if (mSendAccessibilityEventViewClickedType view.dispatchPopulateAccessibilityEvent(event); && AccessibilityManager.getInstance(getContext()).isEnabled() accessibilityManager.sendAccessibilityEvent(event); && view.isEnabled()) { mSendAccessibilityEventViewClickedType = false; if (mSendAccessibilityEventTypeViewClicked == null) { mSendAccessibilityEventTypeViewClicked = new SendAccessibilityEventTypeViewClicked(); } mSendAccessibilityEventTypeViewClicked.mView = view; view.post(mSendAccessibilityEventTypeViewClicked); } } mSendClickAccessibilityEvent = false; } } /** /** Loading Loading @@ -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); } } } }
core/java/android/widget/CheckBox.java +13 −0 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,9 @@ package android.widget; import android.content.Context; import android.content.Context; import android.util.AttributeSet; import android.util.AttributeSet; import android.view.accessibility.AccessibilityEvent; import com.android.internal.R; /** /** Loading Loading @@ -65,4 +68,14 @@ public class CheckBox extends CompoundButton { public CheckBox(Context context, AttributeSet attrs, int defStyle) { public CheckBox(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, 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)); } } } }
core/java/android/widget/CheckedTextView.java +10 −0 Original line number Original line Diff line number Diff line Loading @@ -221,4 +221,14 @@ public class CheckedTextView extends TextView implements Checkable { super.onInitializeAccessibilityEvent(event); super.onInitializeAccessibilityEvent(event); event.setChecked(mChecked); 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)); } } } }