diff options
| author | 2016-05-31 19:26:14 +0000 | |
|---|---|---|
| committer | 2016-05-31 19:26:16 +0000 | |
| commit | ddc6de1eda495790e6564438994df5d49ddf248f (patch) | |
| tree | 264d02fddec9cb61134291dd13a59766f51b3cc9 | |
| parent | bb039d2f17d61b96c88d2cae445a53a642fb421f (diff) | |
| parent | ddf1b399d85ca417301625a55b2a3c7acab2633c (diff) | |
Merge "Fixed a few accessibility issues with notifications and groups" into nyc-dev
7 files changed, 54 insertions, 4 deletions
diff --git a/core/java/android/view/NotificationHeaderView.java b/core/java/android/view/NotificationHeaderView.java index 6e6baeadd45d..3069e5ade582 100644 --- a/core/java/android/view/NotificationHeaderView.java +++ b/core/java/android/view/NotificationHeaderView.java @@ -21,9 +21,9 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Outline; import android.graphics.Rect; -import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageView; import android.widget.RemoteViews; @@ -230,6 +230,7 @@ public class NotificationHeaderView extends ViewGroup { public void setOnClickListener(@Nullable OnClickListener l) { mExpandClickListener = l; setOnTouchListener(mExpandClickListener != null ? mTouchListener : null); + setFocusable(l != null); updateTouchListener(); } @@ -379,6 +380,19 @@ public class NotificationHeaderView extends ViewGroup { return this; } + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + if (mExpandClickListener != null) { + AccessibilityNodeInfo.AccessibilityAction expand + = new AccessibilityNodeInfo.AccessibilityAction( + AccessibilityNodeInfo.ACTION_CLICK, + getContext().getString( + com.android.internal.R.string.expand_action_accessibility)); + info.addAction(expand); + } + } + public ImageView getExpandButton() { return mExpandButton; } diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 3a288222c705..4649e9d6caa5 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4263,7 +4263,7 @@ <string name="expand_button_content_description">Expand button</string> <!-- Accessibility action description on the expand button. --> - <string name="expand_action_accessibility">Click to expand</string> + <string name="expand_action_accessibility">toggle expansion</string> <!-- User visible name for USB MIDI Peripheral port --> <string name="usb_midi_peripheral_name">Android USB Peripheral Port</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 9ab42a960c82..9dbe1004669d 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2566,6 +2566,7 @@ <!-- WallpaperManager config --> <java-symbol type="string" name="config_wallpaperCropperPackage" /> + <java-symbol type="string" name="expand_action_accessibility" /> <java-symbol type="id" name="textSpacerNoTitle" /> <java-symbol type="id" name="titleDividerNoCustom" /> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 27585513bf71..f7a169cb4d5b 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -594,6 +594,12 @@ <!-- The overflow indicator shown when a group has more notification inside the group than the visible ones. An example is "+ 3" [CHAR LIMIT=5] --> <string name="notification_group_overflow_indicator">+ <xliff:g id="number" example="3">%s</xliff:g></string> + <!-- Content description describing how many more notifications are in a group [CHAR LIMIT=NONE] --> + <plurals name="notification_group_overflow_description"> + <item quantity="one"><xliff:g id="number" example="1">%s</xliff:g> more notification inside.</item> + <item quantity="other"><xliff:g id="number" example="3">%s</xliff:g> more notifications inside.</item> + </plurals> + <!-- Content description of button in notification inspector for system settings relating to notifications from this application [CHAR LIMIT=NONE] --> <string name="status_bar_notification_inspect_item_title">Notification settings</string> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 6e9e8303f905..b855b7cf955d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -18,10 +18,9 @@ package com.android.systemui.statusbar; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.annotation.Nullable; import android.content.Context; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.AnimationDrawable; @@ -181,6 +180,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { return object.getTranslation(); } }; + private OnClickListener mOnClickListener; public boolean isGroupExpansionChanging() { if (isChildInGroup()) { @@ -382,6 +382,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { mNotificationParent = childInGroup ? parent : null; mPrivateLayout.setIsChildInGroup(childInGroup); updateBackgroundForGroupState(); + updateClickAndFocus(); if (mNotificationParent != null) { mNotificationParent.updateBackgroundForGroupState(); } @@ -593,6 +594,24 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { mOnExpandClickListener = onExpandClickListener; } + @Override + public void setOnClickListener(@Nullable OnClickListener l) { + super.setOnClickListener(l); + mOnClickListener = l; + updateClickAndFocus(); + } + + private void updateClickAndFocus() { + boolean normalChild = !isChildInGroup() || isGroupExpanded(); + boolean clickable = mOnClickListener != null && normalChild; + if (isFocusable() != normalChild) { + setFocusable(normalChild); + } + if (isClickable() != clickable) { + setClickable(clickable); + } + } + public void setHeadsUpManager(HeadsUpManager headsUpManager) { mHeadsUpManager = headsUpManager; } @@ -1315,6 +1334,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { if (mChildrenContainer != null) { mChildrenContainer.setChildrenExpanded(expanded); } + updateClickAndFocus(); } public static void applyTint(View v, int color) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java index 8f2c81f0726b..737360750182 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java @@ -112,6 +112,10 @@ public class HybridGroupManager { if (!text.equals(reusableView.getText())) { reusableView.setText(text); } + String contentDescription = String.format(mContext.getResources().getQuantityString( + R.plurals.notification_group_overflow_description, number), number); + + reusableView.setContentDescription(contentDescription); return reusableView; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java index a0f1bc2ceaf0..ba191cd1d31e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java @@ -670,6 +670,11 @@ public class NotificationChildrenContainer extends ViewGroup { if (mNotificationHeader != null) { mNotificationHeader.setExpanded(childrenExpanded); } + final int count = mChildren.size(); + for (int childIdx = 0; childIdx < count; childIdx++) { + ExpandableNotificationRow child = mChildren.get(childIdx); + child.setChildrenExpanded(childrenExpanded, false); + } } public void setNotificationParent(ExpandableNotificationRow parent) { |