Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dba92d41 authored by Yigit Boyar's avatar Yigit Boyar Committed by Android (Google) Code Review
Browse files

Merge "Add support for default content description in DecorToolbar" into lmp-dev

parents 34e53ab6 e91f7c02
Loading
Loading
Loading
Loading
+2 −24
Original line number Diff line number Diff line
@@ -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
+12 −2
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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);
}
+34 −6
Original line number Diff line number Diff line
@@ -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