Improve battery saver setting a11y semantics
Adding the ability to override a couple a11y traits of the Settings version of SeekBarPreference. Setting semantics for the battery level to report itself as a percentage. Also tweaking the content description to use a different title. The title isn't exactly what I'd like, but it is better than just saying "At 15% - 15%". Bug: 74357845 Fixes: 78479637 Test: Used a custom accessibility service to inspect the information coming from the battery saver seek bar. Change-Id: I9db55cf0bb3cfee86a46d22c1208262407332d5f
This commit is contained in:
@@ -26,6 +26,7 @@ import android.support.annotation.VisibleForTesting;
|
|||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
@@ -61,6 +62,8 @@ public class AutoBatterySeekBarPreferenceController extends BasePreferenceContro
|
|||||||
mPreference = (SeekBarPreference) screen.findPreference(
|
mPreference = (SeekBarPreference) screen.findPreference(
|
||||||
KEY_AUTO_BATTERY_SEEK_BAR);
|
KEY_AUTO_BATTERY_SEEK_BAR);
|
||||||
mPreference.setContinuousUpdates(true);
|
mPreference.setContinuousUpdates(true);
|
||||||
|
mPreference.setAccessibilityRangeInfoType(
|
||||||
|
AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_PERCENT);
|
||||||
updatePreference(mPreference);
|
updatePreference(mPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +126,10 @@ public class AutoBatterySeekBarPreferenceController extends BasePreferenceContro
|
|||||||
preference.setVisible(true);
|
preference.setVisible(true);
|
||||||
preference.setTitle(mContext.getString(R.string.battery_saver_seekbar_title,
|
preference.setTitle(mContext.getString(R.string.battery_saver_seekbar_title,
|
||||||
Utils.formatPercentage(level)));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -26,6 +26,7 @@ import android.text.TextUtils;
|
|||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.SeekBar.OnSeekBarChangeListener;
|
import android.widget.SeekBar.OnSeekBarChangeListener;
|
||||||
|
|
||||||
@@ -48,6 +49,8 @@ public class SeekBarPreference extends RestrictedPreference
|
|||||||
|
|
||||||
private SeekBar mSeekBar;
|
private SeekBar mSeekBar;
|
||||||
private boolean mShouldBlink;
|
private boolean mShouldBlink;
|
||||||
|
private int mAccessibilityRangeInfoType = AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT;
|
||||||
|
private CharSequence mSeekBarContentDescription;
|
||||||
|
|
||||||
public SeekBarPreference(
|
public SeekBarPreference(
|
||||||
Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
@@ -100,7 +103,9 @@ public class SeekBarPreference extends RestrictedPreference
|
|||||||
mSeekBar.setProgress(mProgress);
|
mSeekBar.setProgress(mProgress);
|
||||||
mSeekBar.setEnabled(isEnabled());
|
mSeekBar.setEnabled(isEnabled());
|
||||||
final CharSequence title = getTitle();
|
final CharSequence title = getTitle();
|
||||||
if (!TextUtils.isEmpty(title)) {
|
if (!TextUtils.isEmpty(mSeekBarContentDescription)) {
|
||||||
|
mSeekBar.setContentDescription(mSeekBarContentDescription);
|
||||||
|
} else if (!TextUtils.isEmpty(title)) {
|
||||||
mSeekBar.setContentDescription(title);
|
mSeekBar.setContentDescription(title);
|
||||||
}
|
}
|
||||||
if (mSeekBar instanceof DefaultIndicatorSeekBar) {
|
if (mSeekBar instanceof DefaultIndicatorSeekBar) {
|
||||||
@@ -119,6 +124,19 @@ public class SeekBarPreference extends RestrictedPreference
|
|||||||
mShouldBlink = false;
|
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
|
@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
|
@Override
|
||||||
protected Parcelable onSaveInstanceState() {
|
protected Parcelable onSaveInstanceState() {
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user