From 6053088884171f67e2df253576eab116fd05b4fe Mon Sep 17 00:00:00 2001 From: alanv Date: Thu, 13 Sep 2012 14:02:29 -0700 Subject: [PATCH] Add accessibility scroll actions to TabWidget Bug: 6537369 Change-Id: I8a5bf1d6f85f0ceef316aa4a5938d32a545587db --- core/java/android/widget/TabWidget.java | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java index 6bced1c6977a6..037110548caed 100644 --- a/core/java/android/widget/TabWidget.java +++ b/core/java/android/widget/TabWidget.java @@ -24,6 +24,7 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Build; +import android.os.Bundle; import android.util.AttributeSet; import android.view.View; import android.view.View.OnFocusChangeListener; @@ -434,6 +435,42 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener { public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(TabWidget.class.getName()); + + final int tabCount = getTabCount(); + + if (tabCount > 1) { + if (mSelectedTab > 0) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + info.setScrollable(true); + } + + if (mSelectedTab < (tabCount - 1)) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + info.setScrollable(true); + } + } + } + + @Override + public boolean performAccessibilityAction(int action, Bundle arguments) { + final int tabCount = getTabCount(); + + switch (action) { + case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: + if ((tabCount > 1) && (mSelectedTab > 0)) { + focusCurrentTab(mSelectedTab - 1); + return true; + } + return false; + case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: + if ((tabCount > 1) && (mSelectedTab < (tabCount - 1))) { + focusCurrentTab(mSelectedTab + 1); + return true; + } + return false; + } + + return super.performAccessibilityAction(action, arguments); } /**