diff --git a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java index 602d984457e..42b2920d737 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java @@ -26,6 +26,7 @@ import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.util.Log; +import android.view.accessibility.AccessibilityNodeInfo; import com.android.settings.R; import com.android.settings.Utils; @@ -61,6 +62,8 @@ public class AutoBatterySeekBarPreferenceController extends BasePreferenceContro mPreference = (SeekBarPreference) screen.findPreference( KEY_AUTO_BATTERY_SEEK_BAR); mPreference.setContinuousUpdates(true); + mPreference.setAccessibilityRangeInfoType( + AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_PERCENT); updatePreference(mPreference); } @@ -123,7 +126,10 @@ public class AutoBatterySeekBarPreferenceController extends BasePreferenceContro preference.setVisible(true); preference.setTitle(mContext.getString(R.string.battery_saver_seekbar_title, Utils.formatPercentage(level))); - ((SeekBarPreference) preference).setProgress(level); + SeekBarPreference seekBarPreference = (SeekBarPreference) preference; + seekBarPreference.setProgress(level); + seekBarPreference.setSeekBarContentDescription( + mContext.getString(R.string.battery_saver_turn_on_automatically_title)); } } diff --git a/src/com/android/settings/widget/SeekBarPreference.java b/src/com/android/settings/widget/SeekBarPreference.java index 1ad4a200512..85e08966725 100644 --- a/src/com/android/settings/widget/SeekBarPreference.java +++ b/src/com/android/settings/widget/SeekBarPreference.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; +import android.view.accessibility.AccessibilityNodeInfo; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; @@ -48,6 +49,8 @@ public class SeekBarPreference extends RestrictedPreference private SeekBar mSeekBar; private boolean mShouldBlink; + private int mAccessibilityRangeInfoType = AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT; + private CharSequence mSeekBarContentDescription; public SeekBarPreference( Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { @@ -100,7 +103,9 @@ public class SeekBarPreference extends RestrictedPreference mSeekBar.setProgress(mProgress); mSeekBar.setEnabled(isEnabled()); final CharSequence title = getTitle(); - if (!TextUtils.isEmpty(title)) { + if (!TextUtils.isEmpty(mSeekBarContentDescription)) { + mSeekBar.setContentDescription(mSeekBarContentDescription); + } else if (!TextUtils.isEmpty(title)) { mSeekBar.setContentDescription(title); } if (mSeekBar instanceof DefaultIndicatorSeekBar) { @@ -119,6 +124,19 @@ public class SeekBarPreference extends RestrictedPreference mShouldBlink = false; }); } + mSeekBar.setAccessibilityDelegate(new View.AccessibilityDelegate() { + @Override + public void onInitializeAccessibilityNodeInfo(View view, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(view, info); + // Update the range info with the correct type + AccessibilityNodeInfo.RangeInfo rangeInfo = info.getRangeInfo(); + if (rangeInfo != null) { + info.setRangeInfo(AccessibilityNodeInfo.RangeInfo.obtain( + mAccessibilityRangeInfoType, rangeInfo.getMin(), + rangeInfo.getMax(), rangeInfo.getCurrent())); + } + } + }); } @Override @@ -252,6 +270,24 @@ public class SeekBarPreference extends RestrictedPreference } } + /** + * Specify the type of range this seek bar represents. + * + * @param rangeInfoType The type of range to be shared with accessibility + * + * @see android.view.accessibility.AccessibilityNodeInfo.RangeInfo + */ + public void setAccessibilityRangeInfoType(int rangeInfoType) { + mAccessibilityRangeInfoType = rangeInfoType; + } + + public void setSeekBarContentDescription(CharSequence contentDescription) { + mSeekBarContentDescription = contentDescription; + if (mSeekBar != null) { + mSeekBar.setContentDescription(contentDescription); + } + } + @Override protected Parcelable onSaveInstanceState() { /*