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()); } }