Merge "Automatically supply a content description for ToolbarActionBar nav" into lmp-dev

This commit is contained in:
Adam Powell
2014-09-03 00:04:52 +00:00
committed by Android (Google) Code Review
3 changed files with 31 additions and 7 deletions

View File

@@ -248,11 +248,12 @@ public class Toolbar extends ViewGroup {
final Drawable navIcon = a.getDrawable(R.styleable.Toolbar_navigationIcon);
if (navIcon != null) {
setNavigationIcon(navIcon);
final CharSequence navDesc = a.getText(
R.styleable.Toolbar_navigationContentDescription);
if (!TextUtils.isEmpty(navDesc)) {
setNavigationContentDescription(navDesc);
}
}
final CharSequence navDesc = a.getText(
R.styleable.Toolbar_navigationContentDescription);
if (!TextUtils.isEmpty(navDesc)) {
setNavigationContentDescription(navDesc);
}
a.recycle();
}

View File

@@ -22,6 +22,7 @@ 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;
@@ -32,6 +33,7 @@ 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.widget.DecorToolbar;
import com.android.internal.widget.ToolbarWidgetWrapper;
@@ -44,6 +46,8 @@ public class ToolbarActionBar extends ActionBar {
private boolean mToolbarMenuPrepared;
private Window.Callback mWindowCallback;
private CharSequence mHomeDescription;
private boolean mLastMenuVisibility;
private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
new ArrayList<OnMenuVisibilityListener>();
@@ -70,6 +74,8 @@ public class ToolbarActionBar extends ActionBar {
mDecorToolbar.setWindowCallback(mWindowCallback);
toolbar.setOnMenuItemClickListener(mMenuClicker);
mDecorToolbar.setWindowTitle(title);
mHomeDescription = mToolbar.getNavigationContentDescription();
updateNavDescription();
}
public Window.Callback getWrappedWindowCallback() {
@@ -161,6 +167,7 @@ public class ToolbarActionBar extends ActionBar {
@Override
public void setHomeActionContentDescription(CharSequence description) {
mToolbar.setNavigationContentDescription(description);
mHomeDescription = description;
}
@Override
@@ -171,6 +178,7 @@ public class ToolbarActionBar extends ActionBar {
@Override
public void setHomeActionContentDescription(int resId) {
mToolbar.setNavigationContentDescription(resId);
mHomeDescription = mToolbar.getNavigationContentDescription();
}
@Override
@@ -247,8 +255,22 @@ public class ToolbarActionBar extends ActionBar {
@Override
public void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask) {
mDecorToolbar.setDisplayOptions((options & mask) |
mDecorToolbar.getDisplayOptions() & ~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

View File

@@ -41,6 +41,7 @@ This is an optimized layout for a screen with a toolbar enabled.
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:navigationContentDescription="@string/action_bar_up_description"
style="?attr/toolbarStyle" />
<com.android.internal.widget.ActionBarContextView
android:id="@+id/action_context_bar"