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

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

Merge "Allow fallback to Toolbar's default Navigation Icon" into lmp-dev

parents c0f337ca 30f5dc93
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -1316,6 +1316,11 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
        mHomeLayout.setUpIndicator(indicator);
    }

    @Override
    public void setDefaultNavigationIcon(Drawable icon) {
        mHomeLayout.setDefaultUpIndicator(icon);
    }

    public void setNavigationIcon(int resId) {
        mHomeLayout.setUpIndicator(resId);
    }
@@ -1380,6 +1385,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
        private int mStartOffset;
        private int mUpIndicatorRes;
        private Drawable mDefaultUpIndicator;
        private Drawable mUpIndicator;

        private static final long DEFAULT_TRANSITION_DURATION = 150;

@@ -1409,13 +1415,30 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
        }

        public void setUpIndicator(Drawable d) {
            mUpView.setImageDrawable(d != null ? d : mDefaultUpIndicator);
            mUpIndicator = d;
            mUpIndicatorRes = 0;
            updateUpIndicator();
        }

        public void setDefaultUpIndicator(Drawable d) {
            mDefaultUpIndicator = d;
            updateUpIndicator();
        }

        public void setUpIndicator(int resId) {
            mUpIndicatorRes = resId;
            mUpView.setImageDrawable(resId != 0 ? getContext().getDrawable(resId) : null);
            mUpIndicator = null;
            updateUpIndicator();
        }

        private void updateUpIndicator() {
            if (mUpIndicator != null) {
                mUpView.setImageDrawable(mUpIndicator);
            } else if (mUpIndicatorRes != 0) {
                mUpView.setImageDrawable(getContext().getDrawable(mUpIndicatorRes));
            } else {
                mUpView.setImageDrawable(mDefaultUpIndicator);
            }
        }

        @Override
@@ -1423,7 +1446,7 @@ public class ActionBarView extends AbsActionBarView implements DecorToolbar {
            super.onConfigurationChanged(newConfig);
            if (mUpIndicatorRes != 0) {
                // Reload for config change
                setUpIndicator(mUpIndicatorRes);
                updateUpIndicator();
            }
        }

+1 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ public interface DecorToolbar {
    void setNavigationContentDescription(CharSequence description);
    void setNavigationContentDescription(int resId);
    void setDefaultNavigationContentDescription(int defaultNavigationContentDescription);
    void setDefaultNavigationIcon(Drawable icon);
    void saveHierarchyState(SparseArray<Parcelable> toolbarStates);
    void restoreHierarchyState(SparseArray<Parcelable> toolbarStates);
}
+26 −17
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar {

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

    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) {
        this(toolbar, style, R.string.action_bar_up_description);
@@ -96,11 +97,10 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
        mTitle = toolbar.getTitle();
        mSubtitle = toolbar.getSubtitle();
        mTitleSet = mTitle != null;

        if (style) {
        final TypedArray a = toolbar.getContext().obtainStyledAttributes(null,
                R.styleable.ActionBar, R.attr.actionBarStyle, 0);

        mDefaultNavigationIcon = a.getDrawable(R.styleable.ActionBar_homeAsUpIndicator);
        if (style) {
            final CharSequence title = a.getText(R.styleable.ActionBar_title);
            if (!TextUtils.isEmpty(title)) {
                setTitle(title);
@@ -120,12 +120,9 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
            if (icon != null) {
                setIcon(icon);
            }

            final Drawable navIcon = a.getDrawable(R.styleable.ActionBar_homeAsUpIndicator);
            if (navIcon != null) {
                setNavigationIcon(navIcon);
            if (mDefaultNavigationIcon != null) {
                setNavigationIcon(mDefaultNavigationIcon);
            }

            setDisplayOptions(a.getInt(R.styleable.ActionBar_displayOptions, 0));

            final int customNavId = a.getResourceId(
@@ -167,11 +164,10 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
            if (popupTheme != 0) {
                mToolbar.setPopupTheme(popupTheme);
            }

            a.recycle();
        } else {
            mDisplayOpts = detectDisplayOptions();
        }
        a.recycle();

        setDefaultNavigationContentDescription(defaultNavigationContentDescription);
        mHomeDescription = mToolbar.getNavigationContentDescription();
@@ -204,6 +200,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
                ActionBar.DISPLAY_USE_LOGO;
        if (mToolbar.getNavigationIcon() != null) {
            opts |= ActionBar.DISPLAY_HOME_AS_UP;
            mDefaultNavigationIcon = mToolbar.getNavigationIcon();
        }
        return opts;
    }
@@ -410,11 +407,9 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
        if (changed != 0) {
            if ((changed & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
                if ((newOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
                    mToolbar.setNavigationIcon(mNavIcon);
                    updateHomeAccessibility();
                } else {
                    mToolbar.setNavigationIcon(null);
                }
                updateNavigationIcon();
            }

            if ((changed & AFFECTS_LOGO_MASK) != 0) {
@@ -607,9 +602,7 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
    @Override
    public void setNavigationIcon(Drawable icon) {
        mNavIcon = icon;
        if ((mDisplayOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
            mToolbar.setNavigationIcon(icon);
        }
        updateNavigationIcon();
    }

    @Override
@@ -617,6 +610,22 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
        setNavigationIcon(resId != 0 ? mToolbar.getContext().getDrawable(resId) : null);
    }

    @Override
    public void setDefaultNavigationIcon(Drawable defaultNavigationIcon) {
        if (mDefaultNavigationIcon != defaultNavigationIcon) {
            mDefaultNavigationIcon = defaultNavigationIcon;
            updateNavigationIcon();
        }
    }

    private void updateNavigationIcon() {
        if ((mDisplayOpts & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
            mToolbar.setNavigationIcon(mNavIcon != null ? mNavIcon : mDefaultNavigationIcon);
        } else {
            mToolbar.setNavigationIcon(null);
        }
    }

    @Override
    public void setNavigationContentDescription(CharSequence description) {
        mHomeDescription = description;