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

Commit e91f7c02 authored by Yigit Boyar's avatar Yigit Boyar
Browse files

Add support for default content description in DecorToolbar

Bug: 16888338
Change-Id: I0f3f8fcd39cfd29d239801392dd712869749aecf
parent f35423bb
Loading
Loading
Loading
Loading
+2 −24
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import android.app.ActionBar;
import android.content.Context;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.ActionMode;
import android.view.ActionMode;
import android.view.KeyEvent;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
@@ -33,7 +32,6 @@ import android.view.Window;
import android.view.WindowCallbackWrapper;
import android.view.WindowCallbackWrapper;
import android.widget.SpinnerAdapter;
import android.widget.SpinnerAdapter;
import android.widget.Toolbar;
import android.widget.Toolbar;
import com.android.internal.R;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.widget.DecorToolbar;
import com.android.internal.widget.DecorToolbar;
@@ -48,8 +46,6 @@ public class ToolbarActionBar extends ActionBar {
    private Window.Callback mWindowCallback;
    private Window.Callback mWindowCallback;
    private boolean mMenuCallbackSet;
    private boolean mMenuCallbackSet;


    private CharSequence mHomeDescription;

    private boolean mLastMenuVisibility;
    private boolean mLastMenuVisibility;
    private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
    private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
            new ArrayList<OnMenuVisibilityListener>();
            new ArrayList<OnMenuVisibilityListener>();
@@ -76,8 +72,6 @@ public class ToolbarActionBar extends ActionBar {
        mDecorToolbar.setWindowCallback(mWindowCallback);
        mDecorToolbar.setWindowCallback(mWindowCallback);
        toolbar.setOnMenuItemClickListener(mMenuClicker);
        toolbar.setOnMenuItemClickListener(mMenuClicker);
        mDecorToolbar.setWindowTitle(title);
        mDecorToolbar.setWindowTitle(title);
        mHomeDescription = mToolbar.getNavigationContentDescription();
        updateNavDescription();
    }
    }


    public Window.Callback getWrappedWindowCallback() {
    public Window.Callback getWrappedWindowCallback() {
@@ -168,8 +162,7 @@ public class ToolbarActionBar extends ActionBar {


    @Override
    @Override
    public void setHomeActionContentDescription(CharSequence description) {
    public void setHomeActionContentDescription(CharSequence description) {
        mToolbar.setNavigationContentDescription(description);
        mDecorToolbar.setNavigationContentDescription(description);
        mHomeDescription = description;
    }
    }


    @Override
    @Override
@@ -179,8 +172,7 @@ public class ToolbarActionBar extends ActionBar {


    @Override
    @Override
    public void setHomeActionContentDescription(int resId) {
    public void setHomeActionContentDescription(int resId) {
        mToolbar.setNavigationContentDescription(resId);
        mDecorToolbar.setNavigationContentDescription(resId);
        mHomeDescription = mToolbar.getNavigationContentDescription();
    }
    }


    @Override
    @Override
@@ -258,21 +250,7 @@ public class ToolbarActionBar extends ActionBar {
    @Override
    @Override
    public void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask) {
    public void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask) {
        final int currentOptions = mDecorToolbar.getDisplayOptions();
        final int currentOptions = mDecorToolbar.getDisplayOptions();
        final int changed = (options ^ currentOptions) & mask;
        mDecorToolbar.setDisplayOptions(options & mask | 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
    @Override
+12 −2
Original line number Original line Diff line number Diff line
@@ -135,6 +135,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {


    private ExpandedActionViewMenuPresenter mExpandedMenuPresenter;
    private ExpandedActionViewMenuPresenter mExpandedMenuPresenter;
    View mExpandedActionView;
    View mExpandedActionView;
    private int mDefaultUpDescription = R.string.action_bar_up_description;


    Window.Callback mWindowCallback;
    Window.Callback mWindowCallback;


@@ -187,7 +188,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
        mExpandedHomeLayout.setShowUp(true);
        mExpandedHomeLayout.setShowUp(true);
        mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener);
        mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener);
        mExpandedHomeLayout.setContentDescription(getResources().getText(
        mExpandedHomeLayout.setContentDescription(getResources().getText(
                R.string.action_bar_up_description));
                mDefaultUpDescription));


        // This needs to highlight/be focusable on its own.
        // This needs to highlight/be focusable on its own.
        // TODO: Clean up the handoff between expanded/normal.
        // TODO: Clean up the handoff between expanded/normal.
@@ -579,7 +580,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
            homeDesc = mHomeDescription;
            homeDesc = mHomeDescription;
        } else {
        } else {
            if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
            if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
                homeDesc = mContext.getResources().getText(R.string.action_bar_up_description);
                homeDesc = mContext.getResources().getText(mDefaultUpDescription);
            } else {
            } else {
                homeDesc = mContext.getResources().getText(R.string.action_bar_home_description);
                homeDesc = mContext.getResources().getText(R.string.action_bar_home_description);
            }
            }
@@ -1330,6 +1331,15 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
        updateHomeAccessibility(mUpGoerFive.isEnabled());
        updateHomeAccessibility(mUpGoerFive.isEnabled());
    }
    }


    @Override
    public void setDefaultNavigationContentDescription(int defaultNavigationContentDescription) {
        if (mDefaultUpDescription == defaultNavigationContentDescription) {
            return;
        }
        mDefaultUpDescription = defaultNavigationContentDescription;
        updateHomeAccessibility(mUpGoerFive.isEnabled());
    }

    static class SavedState extends BaseSavedState {
    static class SavedState extends BaseSavedState {
        int expandedMenuItemId;
        int expandedMenuItemId;
        boolean isOverflowOpen;
        boolean isOverflowOpen;
+1 −0
Original line number Original line Diff line number Diff line
@@ -89,6 +89,7 @@ public interface DecorToolbar {
    void setNavigationIcon(int resId);
    void setNavigationIcon(int resId);
    void setNavigationContentDescription(CharSequence description);
    void setNavigationContentDescription(CharSequence description);
    void setNavigationContentDescription(int resId);
    void setNavigationContentDescription(int resId);
    void setDefaultNavigationContentDescription(int defaultNavigationContentDescription);
    void saveHierarchyState(SparseArray<Parcelable> toolbarStates);
    void saveHierarchyState(SparseArray<Parcelable> toolbarStates);
    void restoreHierarchyState(SparseArray<Parcelable> toolbarStates);
    void restoreHierarchyState(SparseArray<Parcelable> toolbarStates);
}
}
+34 −6
Original line number Original line Diff line number Diff line
@@ -76,14 +76,21 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
    private boolean mTitleSet;
    private boolean mTitleSet;
    private CharSequence mTitle;
    private CharSequence mTitle;
    private CharSequence mSubtitle;
    private CharSequence mSubtitle;
    private CharSequence mHomeDescription;


    private Window.Callback mWindowCallback;
    private Window.Callback mWindowCallback;
    private boolean mMenuPrepared;
    private boolean mMenuPrepared;
    private ActionMenuPresenter mActionMenuPresenter;
    private ActionMenuPresenter mActionMenuPresenter;


    private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD;
    private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD;
    private int mDefaultNavigationContentDescription = 0;


    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) {
    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;
        mToolbar = toolbar;


        mTitle = toolbar.getTitle();
        mTitle = toolbar.getTitle();
@@ -166,10 +173,8 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
            mDisplayOpts = detectDisplayOptions();
            mDisplayOpts = detectDisplayOptions();
        }
        }


        if (TextUtils.isEmpty(mToolbar.getNavigationContentDescription())) {
        setDefaultNavigationContentDescription(defaultNavigationContentDescription);
            mToolbar.setNavigationContentDescription(
        mHomeDescription = mToolbar.getNavigationContentDescription();
                    getContext().getResources().getText(R.string.action_bar_up_description));
        }


        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            final ActionMenuItem mNavItem = new ActionMenuItem(mToolbar.getContext(),
            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() {
    private int detectDisplayOptions() {
        int opts = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME |
        int opts = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME |
                ActionBar.DISPLAY_USE_LOGO;
                ActionBar.DISPLAY_USE_LOGO;
@@ -395,6 +411,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
            if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
            if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
                if ((newOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
                if ((newOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
                    mToolbar.setNavigationIcon(mNavIcon);
                    mToolbar.setNavigationIcon(mNavIcon);
                    updateHomeAccessibility();
                } else {
                } else {
                    mToolbar.setNavigationIcon(null);
                    mToolbar.setNavigationIcon(null);
                }
                }
@@ -602,12 +619,23 @@ public class ToolbarWidgetWrapper implements DecorToolbar {


    @Override
    @Override
    public void setNavigationContentDescription(CharSequence description) {
    public void setNavigationContentDescription(CharSequence description) {
        mToolbar.setNavigationContentDescription(description);
        mHomeDescription = description;
        updateHomeAccessibility();
    }
    }


    @Override
    @Override
    public void setNavigationContentDescription(int resId) {
    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
    @Override