From 92d837b4428a4a41d7c26d39f31c3f0fe42e48ee Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 15 Aug 2017 11:00:32 -0400 Subject: [PATCH] Manuall set accessibility order of zen radio grouping Test: manual Change-Id: Icf461b0400d5ee90a537c2b52c123e76b3274bbf Fixes: 62626544 --- .../systemui/volume/ZenRadioLayout.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java b/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java index 5dbcd8a73aacb..360907b0d22b9 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java @@ -46,9 +46,16 @@ public class ZenRadioLayout extends LinearLayout { throw new IllegalStateException("Expected matching children"); } boolean hasChanges = false; + View lastView = null; for (int i = 0; i < size; i++) { View radio = radioGroup.getChildAt(i); View content = radioContent.getChildAt(i); + if (lastView != null) { + radio.setAccessibilityTraversalAfter(lastView.getId()); + } + View contentClick = findFirstClickable(content); + if (contentClick != null) contentClick.setAccessibilityTraversalAfter(radio.getId()); + lastView = findLastClickable(content); if (radio.getLayoutParams().height != content.getMeasuredHeight()) { hasChanges = true; radio.getLayoutParams().height = content.getMeasuredHeight(); @@ -59,4 +66,28 @@ public class ZenRadioLayout extends LinearLayout { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } + + private View findFirstClickable(View content) { + if (content.isClickable()) return content; + if (content instanceof ViewGroup) { + ViewGroup group = (ViewGroup) content; + for (int i = 0; i < group.getChildCount(); i++) { + View v = findFirstClickable(group.getChildAt(i)); + if (v != null) return v; + } + } + return null; + } + + private View findLastClickable(View content) { + if (content.isClickable()) return content; + if (content instanceof ViewGroup) { + ViewGroup group = (ViewGroup) content; + for (int i = group.getChildCount() - 1; i >= 0; i--) { + View v = findLastClickable(group.getChildAt(i)); + if (v != null) return v; + } + } + return null; + } }