Merge "a11y edits to dnd dialog and volume ring toggle" into pi-dev am: 478e0805a0

am: 92be8661c3

Change-Id: I3428759534cb32f92b87f68dc87dfa076cfe9605
This commit is contained in:
android-build-team Robot
2018-05-07 11:27:55 -07:00
committed by android-build-merger
4 changed files with 53 additions and 26 deletions

View File

@@ -185,6 +185,7 @@ public class EnableZenModeDialog {
@VisibleForTesting
protected void bind(final Condition condition, final View row, final int rowId) {
if (condition == null) throw new IllegalArgumentException("condition must not be null");
final boolean enabled = condition.state == Condition.STATE_TRUE;
final ConditionTag tag = row.getTag() != null ? (ConditionTag) row.getTag() :
new ConditionTag();
@@ -207,7 +208,6 @@ public class EnableZenModeDialog {
MetricsLogger.action(mContext,
MetricsProto.MetricsEvent.QS_DND_CONDITION_SELECT);
updateAlarmWarningText(tag.condition);
announceConditionSelection(tag);
}
}
});
@@ -328,6 +328,7 @@ public class EnableZenModeDialog {
boolean enabled, int rowId, Uri conditionId) {
if (tag.lines == null) {
tag.lines = row.findViewById(android.R.id.content);
tag.lines.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
}
if (tag.line1 == null) {
tag.line1 = (TextView) row.findViewById(android.R.id.text1);
@@ -450,16 +451,6 @@ public class EnableZenModeDialog {
bind(newCondition, row, rowId);
updateAlarmWarningText(tag.condition);
tag.rb.setChecked(true);
announceConditionSelection(tag);
}
private void announceConditionSelection(ConditionTag tag) {
// condition will always be priority-only
String modeText = mContext.getString(R.string.zen_interruption_level_priority);
if (tag.line1 != null) {
mZenRadioGroupContent.announceForAccessibility(mContext.getString(
R.string.zen_mode_and_condition, modeText, tag.line1.getText()));
}
}
private void updateAlarmWarningText(Condition condition) {

View File

@@ -203,8 +203,14 @@ public class ZenDurationDialog {
private void setupUi(ConditionTag tag, View row) {
tag.lines = row.findViewById(android.R.id.content);
tag.line1 = (TextView) row.findViewById(android.R.id.text1);
if (tag.lines == null) {
tag.lines = row.findViewById(android.R.id.content);
tag.lines.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
}
if (tag.line1 == null) {
tag.line1 = (TextView) row.findViewById(android.R.id.text1);
}
// text2 is not used in zen duration dialog
row.findViewById(android.R.id.text2).setVisibility(View.GONE);

View File

@@ -1363,6 +1363,13 @@
<string name="volume_stream_content_description_vibrate_a11y">%1$s. Tap to set to vibrate.</string>
<string name="volume_stream_content_description_mute_a11y">%1$s. Tap to mute.</string>
<!-- Hint for accessibility. For example: double tap to mute [CHAR_LIMIT=NONE] -->
<string name="volume_ringer_hint_mute">mute</string>
<!-- Hint for accessibility. For example: double tap to unmute [CHAR_LIMIT=NONE] -->
<string name="volume_ringer_hint_unmute">unmute</string>
<!-- Hint for accessibility. For example: double tap to vibrate [CHAR_LIMIT=NONE] -->
<string name="volume_ringer_hint_vibrate">vibrate</string>
<string name="volume_dialog_title">%s volume controls</string>
<string name="volume_dialog_ringer_guidance_ring">Calls and notifications will ring (<xliff:g id="volume level" example="56">%1$s</xliff:g>)</string>

View File

@@ -71,6 +71,7 @@ import android.view.Window;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.DecelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageButton;
@@ -627,35 +628,32 @@ public class VolumeDialogImpl implements VolumeDialog {
switch (mState.ringerModeInternal) {
case AudioManager.RINGER_MODE_VIBRATE:
mRingerIcon.setImageResource(R.drawable.ic_volume_ringer_vibrate);
addAccessibilityDescription(mRingerIcon, RINGER_MODE_VIBRATE,
mContext.getString(R.string.volume_ringer_hint_mute));
mRingerIcon.setTag(Events.ICON_STATE_VIBRATE);
break;
case AudioManager.RINGER_MODE_SILENT:
mRingerIcon.setImageResource(R.drawable.ic_volume_ringer_mute);
mRingerIcon.setContentDescription(mContext.getString(
R.string.volume_stream_content_description_unmute,
getStreamLabelH(ss)));
mRingerIcon.setTag(Events.ICON_STATE_MUTE);
addAccessibilityDescription(mRingerIcon, RINGER_MODE_SILENT,
mContext.getString(R.string.volume_ringer_hint_unmute));
break;
case AudioManager.RINGER_MODE_NORMAL:
default:
boolean muted = (mAutomute && ss.level == 0) || ss.muted;
if (!isZenMuted && muted) {
mRingerIcon.setImageResource(R.drawable.ic_volume_ringer_mute);
mRingerIcon.setContentDescription(mContext.getString(
R.string.volume_stream_content_description_unmute,
getStreamLabelH(ss)));
addAccessibilityDescription(mRingerIcon, RINGER_MODE_NORMAL,
mContext.getString(R.string.volume_ringer_hint_unmute));
mRingerIcon.setTag(Events.ICON_STATE_MUTE);
} else {
mRingerIcon.setImageResource(R.drawable.ic_volume_ringer);
if (mController.hasVibrator()) {
mRingerIcon.setContentDescription(mContext.getString(
mShowA11yStream
? R.string.volume_stream_content_description_vibrate_a11y
: R.string.volume_stream_content_description_vibrate,
getStreamLabelH(ss)));
addAccessibilityDescription(mRingerIcon, RINGER_MODE_NORMAL,
mContext.getString(R.string.volume_ringer_hint_vibrate));
} else {
mRingerIcon.setContentDescription(getStreamLabelH(ss));
addAccessibilityDescription(mRingerIcon, RINGER_MODE_NORMAL,
mContext.getString(R.string.volume_ringer_hint_mute));
}
mRingerIcon.setTag(Events.ICON_STATE_UNMUTE);
}
@@ -664,6 +662,31 @@ public class VolumeDialogImpl implements VolumeDialog {
}
}
private void addAccessibilityDescription(View view, int currState, String hintLabel) {
int currStateResId;
switch (currState) {
case RINGER_MODE_SILENT:
currStateResId = R.string.volume_ringer_status_silent;
break;
case RINGER_MODE_VIBRATE:
currStateResId = R.string.volume_ringer_status_vibrate;
break;
case RINGER_MODE_NORMAL:
default:
currStateResId = R.string.volume_ringer_status_normal;
}
view.setContentDescription(mContext.getString(currStateResId));
view.setAccessibilityDelegate(new AccessibilityDelegate() {
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.addAction(new AccessibilityNodeInfo.AccessibilityAction(
AccessibilityNodeInfo.ACTION_CLICK, hintLabel));
}
});
}
/**
* Toggles enable state of views in a VolumeRow (not including seekbar or icon)
* Hides/shows zen icon