diff options
| author | 2025-02-20 10:21:03 +0000 | |
|---|---|---|
| committer | 2025-02-27 06:41:38 +0000 | |
| commit | baf689c169baab8f439ced7503cd67dee89d13ef (patch) | |
| tree | e2b91ae47d91034ca6257ec180b2480f96a5af0f | |
| parent | 12bc9136bfd30676414c80c8de0fad2d9947bf7d (diff) | |
Make SliderPreference compatible with a11y services
1. Prevent accessibility services focus on no-action view
2. Enable setting the content description on the slider
Flag: EXEMPT bugfix
Bug: 397355964
Bug: 397355156
Bug: 397354989
Bug: 397134669
Test: manually test with Voice Access/Switch Access/TalkBack
Change-Id: I0992666e7ca652212d41f80602b6d2f0a62d30fa
| -rw-r--r-- | packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java b/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java index 4315238ad7c1..fe8e8b6f1d46 100644 --- a/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java +++ b/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java @@ -22,6 +22,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; +import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; @@ -72,6 +73,7 @@ public class SliderPreference extends Preference { private int mSliderIncrement; private boolean mAdjustable; private boolean mTrackingTouch; + private CharSequence mSliderContentDescription; /** * Listener reacting to the user pressing DPAD left/right keys if {@code @@ -143,6 +145,7 @@ public class SliderPreference extends Preference { @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setLayoutResource(R.layout.settingslib_expressive_preference_slider); + setSelectable(false); TypedArray a = context.obtainStyledAttributes( attrs, androidx.preference.R.styleable.SeekBarPreference, defStyleAttr, @@ -265,6 +268,14 @@ public class SliderPreference extends Preference { } else { mSliderIncrement = (int) (mSlider.getStepSize()); } + final CharSequence title = getTitle(); + if (!TextUtils.isEmpty(mSliderContentDescription)) { + mSlider.setContentDescription(mSliderContentDescription); + } else if (!TextUtils.isEmpty(title)) { + mSlider.setContentDescription(title); + } else { + mSlider.setContentDescription(null); + } mSlider.setValueFrom(mMin); mSlider.setValueTo(mMax); mSlider.setValue(mSliderValue); @@ -273,6 +284,8 @@ public class SliderPreference extends Preference { mSlider.clearOnChangeListeners(); mSlider.addOnChangeListener(mChangeListener); mSlider.setEnabled(isEnabled()); + mSlider.setFocusable(isSelectable()); + mSlider.setClickable(isSelectable()); // Set up slider color mSlider.setTrackActiveTintList(mTrackActiveColor); @@ -471,6 +484,19 @@ public class SliderPreference extends Preference { setValueInternal(sliderValue, true); } + + /** + * Sets the content description of the {@link Slider}. + * + * @param contentDescription The content description of the {@link Slider} + */ + public void setSliderContentDescription(@Nullable CharSequence contentDescription) { + mSliderContentDescription = contentDescription; + if (mSlider != null) { + mSlider.setContentDescription(contentDescription); + } + } + @Override protected void onSetInitialValue(@Nullable Object defaultValue) { if (defaultValue == null) { |