diff options
| author | 2014-09-11 23:30:46 +0000 | |
|---|---|---|
| committer | 2014-09-11 23:30:47 +0000 | |
| commit | dba92d416dc8020a0d9cf6e10158c9524c67796a (patch) | |
| tree | c83f6cf16c3fe84a606d56c13ec3a430c7f74521 | |
| parent | 34e53ab66e9e25150479a0c524183e853accce45 (diff) | |
| parent | e91f7c0219d0f47d9c44a4933b571b0a482ec058 (diff) | |
Merge "Add support for default content description in DecorToolbar" into lmp-dev
4 files changed, 49 insertions, 32 deletions
diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java index 99c87eabf5a0..4410f2544624 100644 --- a/core/java/com/android/internal/app/ToolbarActionBar.java +++ b/core/java/com/android/internal/app/ToolbarActionBar.java @@ -22,7 +22,6 @@ import android.app.ActionBar; import android.content.Context; import android.content.res.Configuration; import android.graphics.drawable.Drawable; -import android.text.TextUtils; import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -33,7 +32,6 @@ import android.view.Window; import android.view.WindowCallbackWrapper; import android.widget.SpinnerAdapter; import android.widget.Toolbar; -import com.android.internal.R; import com.android.internal.view.menu.MenuBuilder; import com.android.internal.view.menu.MenuPresenter; import com.android.internal.widget.DecorToolbar; @@ -48,8 +46,6 @@ public class ToolbarActionBar extends ActionBar { private Window.Callback mWindowCallback; private boolean mMenuCallbackSet; - private CharSequence mHomeDescription; - private boolean mLastMenuVisibility; private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners = new ArrayList<OnMenuVisibilityListener>(); @@ -76,8 +72,6 @@ public class ToolbarActionBar extends ActionBar { mDecorToolbar.setWindowCallback(mWindowCallback); toolbar.setOnMenuItemClickListener(mMenuClicker); mDecorToolbar.setWindowTitle(title); - mHomeDescription = mToolbar.getNavigationContentDescription(); - updateNavDescription(); } public Window.Callback getWrappedWindowCallback() { @@ -168,8 +162,7 @@ public class ToolbarActionBar extends ActionBar { @Override public void setHomeActionContentDescription(CharSequence description) { - mToolbar.setNavigationContentDescription(description); - mHomeDescription = description; + mDecorToolbar.setNavigationContentDescription(description); } @Override @@ -179,8 +172,7 @@ public class ToolbarActionBar extends ActionBar { @Override public void setHomeActionContentDescription(int resId) { - mToolbar.setNavigationContentDescription(resId); - mHomeDescription = mToolbar.getNavigationContentDescription(); + mDecorToolbar.setNavigationContentDescription(resId); } @Override @@ -258,21 +250,7 @@ public class ToolbarActionBar extends ActionBar { @Override public void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask) { final int currentOptions = mDecorToolbar.getDisplayOptions(); - final int changed = (options ^ currentOptions) & mask; mDecorToolbar.setDisplayOptions(options & mask | currentOptions & ~mask); - if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) { - updateNavDescription(); - } - } - - private void updateNavDescription() { - if ((mDecorToolbar.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0) { - if (TextUtils.isEmpty(mHomeDescription)) { - mToolbar.setNavigationContentDescription(R.string.action_bar_up_description); - } else { - mToolbar.setNavigationContentDescription(mHomeDescription); - } - } } @Override diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index e53af691eb36..fb44e5876b6c 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -135,6 +135,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar { private ExpandedActionViewMenuPresenter mExpandedMenuPresenter; View mExpandedActionView; + private int mDefaultUpDescription = R.string.action_bar_up_description; Window.Callback mWindowCallback; @@ -187,7 +188,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar { mExpandedHomeLayout.setShowUp(true); mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener); mExpandedHomeLayout.setContentDescription(getResources().getText( - R.string.action_bar_up_description)); + mDefaultUpDescription)); // This needs to highlight/be focusable on its own. // TODO: Clean up the handoff between expanded/normal. @@ -579,7 +580,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar { homeDesc = mHomeDescription; } else { if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) { - homeDesc = mContext.getResources().getText(R.string.action_bar_up_description); + homeDesc = mContext.getResources().getText(mDefaultUpDescription); } else { homeDesc = mContext.getResources().getText(R.string.action_bar_home_description); } @@ -1330,6 +1331,15 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar { updateHomeAccessibility(mUpGoerFive.isEnabled()); } + @Override + public void setDefaultNavigationContentDescription(int defaultNavigationContentDescription) { + if (mDefaultUpDescription == defaultNavigationContentDescription) { + return; + } + mDefaultUpDescription = defaultNavigationContentDescription; + updateHomeAccessibility(mUpGoerFive.isEnabled()); + } + static class SavedState extends BaseSavedState { int expandedMenuItemId; boolean isOverflowOpen; diff --git a/core/java/com/android/internal/widget/DecorToolbar.java b/core/java/com/android/internal/widget/DecorToolbar.java index 5281045762ff..fee30153d95e 100644 --- a/core/java/com/android/internal/widget/DecorToolbar.java +++ b/core/java/com/android/internal/widget/DecorToolbar.java @@ -89,6 +89,7 @@ public interface DecorToolbar { void setNavigationIcon(int resId); void setNavigationContentDescription(CharSequence description); void setNavigationContentDescription(int resId); + void setDefaultNavigationContentDescription(int defaultNavigationContentDescription); void saveHierarchyState(SparseArray<Parcelable> toolbarStates); void restoreHierarchyState(SparseArray<Parcelable> toolbarStates); } diff --git a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java index 250bbac1067e..8446e0623bbb 100644 --- a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java +++ b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java @@ -76,14 +76,21 @@ public class ToolbarWidgetWrapper implements DecorToolbar { private boolean mTitleSet; private CharSequence mTitle; private CharSequence mSubtitle; + private CharSequence mHomeDescription; private Window.Callback mWindowCallback; private boolean mMenuPrepared; private ActionMenuPresenter mActionMenuPresenter; private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD; + private int mDefaultNavigationContentDescription = 0; public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) { + this(toolbar, style, R.string.action_bar_up_description); + } + + public ToolbarWidgetWrapper(Toolbar toolbar, boolean style, + int defaultNavigationContentDescription) { mToolbar = toolbar; mTitle = toolbar.getTitle(); @@ -166,10 +173,8 @@ public class ToolbarWidgetWrapper implements DecorToolbar { mDisplayOpts = detectDisplayOptions(); } - if (TextUtils.isEmpty(mToolbar.getNavigationContentDescription())) { - mToolbar.setNavigationContentDescription( - getContext().getResources().getText(R.string.action_bar_up_description)); - } + setDefaultNavigationContentDescription(defaultNavigationContentDescription); + mHomeDescription = mToolbar.getNavigationContentDescription(); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { final ActionMenuItem mNavItem = new ActionMenuItem(mToolbar.getContext(), @@ -183,6 +188,17 @@ public class ToolbarWidgetWrapper implements DecorToolbar { }); } + @Override + public void setDefaultNavigationContentDescription(int defaultNavigationContentDescription) { + if (defaultNavigationContentDescription == mDefaultNavigationContentDescription) { + return; + } + mDefaultNavigationContentDescription = defaultNavigationContentDescription; + if (TextUtils.isEmpty(mToolbar.getNavigationContentDescription())) { + setNavigationContentDescription(mDefaultNavigationContentDescription); + } + } + private int detectDisplayOptions() { int opts = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO; @@ -395,6 +411,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar { if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) { if ((newOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) { mToolbar.setNavigationIcon(mNavIcon); + updateHomeAccessibility(); } else { mToolbar.setNavigationIcon(null); } @@ -602,12 +619,23 @@ public class ToolbarWidgetWrapper implements DecorToolbar { @Override public void setNavigationContentDescription(CharSequence description) { - mToolbar.setNavigationContentDescription(description); + mHomeDescription = description; + updateHomeAccessibility(); } @Override public void setNavigationContentDescription(int resId) { - mToolbar.setNavigationContentDescription(resId); + setNavigationContentDescription(resId == 0 ? null : getContext().getString(resId)); + } + + private void updateHomeAccessibility() { + if ((mDisplayOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) { + if (TextUtils.isEmpty(mHomeDescription)) { + mToolbar.setNavigationContentDescription(mDefaultNavigationContentDescription); + } else { + mToolbar.setNavigationContentDescription(mHomeDescription); + } + } } @Override |