summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/TabHost.java5
-rw-r--r--core/java/android/widget/TabWidget.java28
2 files changed, 32 insertions, 1 deletions
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index f720ceed296b..ff31dec2ff0c 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -144,6 +144,11 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
}
}
+ @Override
+ public void sendAccessibilityEvent(int eventType) {
+ /* avoid super class behavior - TabWidget sends the right events */
+ }
+
/**
* If you are using {@link TabSpec#setContent(android.content.Intent)}, this
* must be called since the activityGroup is needed to launch the local activity.
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index afae7eff6499..594b1e695581 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -28,6 +28,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnFocusChangeListener;
+import android.view.accessibility.AccessibilityEvent;
/**
*
@@ -335,7 +336,7 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
* @see #focusCurrentTab
*/
public void setCurrentTab(int index) {
- if (index < 0 || index >= getTabCount()) {
+ if (index < 0 || index >= getTabCount() || index == mSelectedTab) {
return;
}
@@ -343,6 +344,18 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
mSelectedTab = index;
getChildTabViewAt(mSelectedTab).setSelected(true);
mStripMoved = true;
+
+ if (isShown()) {
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ }
+ }
+
+ @Override
+ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ event.setItemCount(getTabCount());
+ event.setCurrentItemIndex(mSelectedTab);
+ getChildTabViewAt(mSelectedTab).dispatchPopulateAccessibilityEvent(event);
+ return true;
}
/**
@@ -416,6 +429,15 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
child.setOnFocusChangeListener(this);
}
+ @Override
+ public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {
+ // this class fires events only when tabs are focused or selected
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && isFocused()) {
+ return;
+ }
+ super.sendAccessibilityEventUnchecked(event);
+ }
+
/**
* Provides a way for {@link TabHost} to be notified that the user clicked on a tab indicator.
*/
@@ -436,6 +458,10 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
if (getChildTabViewAt(i) == v) {
setCurrentTab(i);
mSelectionChangedListener.onTabSelectionChanged(i, false);
+ if (isShown()) {
+ // a tab is focused so send an event to announce the tab widget state
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
+ }
break;
}
i++;