summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yigit Boyar <yboyar@google.com> 2014-09-11 23:30:46 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2014-09-11 23:30:47 +0000
commitdba92d416dc8020a0d9cf6e10158c9524c67796a (patch)
treec83f6cf16c3fe84a606d56c13ec3a430c7f74521
parent34e53ab66e9e25150479a0c524183e853accce45 (diff)
parente91f7c0219d0f47d9c44a4933b571b0a482ec058 (diff)
Merge "Add support for default content description in DecorToolbar" into lmp-dev
-rw-r--r--core/java/com/android/internal/app/ToolbarActionBar.java26
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java14
-rw-r--r--core/java/com/android/internal/widget/DecorToolbar.java1
-rw-r--r--core/java/com/android/internal/widget/ToolbarWidgetWrapper.java40
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