From 94e56ef3b8de6ed485546b462559ac862c10eabf Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Tue, 6 Sep 2011 21:22:22 -0700 Subject: [PATCH] Bug 5249855 - Add support for content descriptions on action bar tabs Add API support for supplying content descriptions on action bar tabs. This helps accessibility in cases where no title text is shown. Change-Id: I8fdc4c2f2b279871b9f24b0b16e5167879b22741 --- api/current.txt | 3 ++ core/java/android/app/ActionBar.java | 31 +++++++++++++++++++ .../android/internal/app/ActionBarImpl.java | 20 ++++++++++++ .../widget/ScrollingTabContainerView.java | 2 ++ 4 files changed, 56 insertions(+) diff --git a/api/current.txt b/api/current.txt index f8b7bd9ffc6bc..cc6cce9be2cb4 100644 --- a/api/current.txt +++ b/api/current.txt @@ -2487,12 +2487,15 @@ package android.app { public static abstract class ActionBar.Tab { ctor public ActionBar.Tab(); + method public abstract java.lang.CharSequence getContentDescription(); method public abstract android.view.View getCustomView(); method public abstract android.graphics.drawable.Drawable getIcon(); method public abstract int getPosition(); method public abstract java.lang.Object getTag(); method public abstract java.lang.CharSequence getText(); method public abstract void select(); + method public abstract android.app.ActionBar.Tab setContentDescription(int); + method public abstract android.app.ActionBar.Tab setContentDescription(java.lang.CharSequence); method public abstract android.app.ActionBar.Tab setCustomView(android.view.View); method public abstract android.app.ActionBar.Tab setCustomView(int); method public abstract android.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable); diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index 7acaec86716c9..46dc5ff582fbe 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -790,6 +790,37 @@ public abstract class ActionBar { * Select this tab. Only valid if the tab has been added to the action bar. */ public abstract void select(); + + /** + * Set a description of this tab's content for use in accessibility support. + * If no content description is provided the title will be used. + * + * @param resId A resource ID referring to the description text + * @return The current instance for call chaining + * @see #setContentDescription(CharSequence) + * @see #getContentDescription() + */ + public abstract Tab setContentDescription(int resId); + + /** + * Set a description of this tab's content for use in accessibility support. + * If no content description is provided the title will be used. + * + * @param contentDesc Description of this tab's content + * @return The current instance for call chaining + * @see #setContentDescription(int) + * @see #getContentDescription() + */ + public abstract Tab setContentDescription(CharSequence contentDesc); + + /** + * Gets a brief description of this tab's content for use in accessibility support. + * + * @return Description of this tab's content + * @see #setContentDescription(CharSequence) + * @see #setContentDescription(int) + */ + public abstract CharSequence getContentDescription(); } /** diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index cfecca5188e38..90d19fd45f981 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -783,6 +783,7 @@ public class ActionBarImpl extends ActionBar { private Object mTag; private Drawable mIcon; private CharSequence mText; + private CharSequence mContentDesc; private int mPosition = -1; private View mCustomView; @@ -878,6 +879,25 @@ public class ActionBarImpl extends ActionBar { public void select() { selectTab(this); } + + @Override + public Tab setContentDescription(int resId) { + return setContentDescription(mContext.getResources().getText(resId)); + } + + @Override + public Tab setContentDescription(CharSequence contentDesc) { + mContentDesc = contentDesc; + if (mPosition >= 0) { + mTabScrollView.updateTab(mPosition); + } + return this; + } + + @Override + public CharSequence getContentDescription() { + return mContentDesc; + } } @Override diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java index 71f9364c7bdb2..5baed75e58db7 100644 --- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java +++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java @@ -443,6 +443,8 @@ public class ScrollingTabContainerView extends HorizontalScrollView mTextView.setVisibility(GONE); mTextView.setText(null); } + + setContentDescription(tab.getContentDescription()); } }