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

Commit 30f5dc93 authored by Yigit Boyar's avatar Yigit Boyar
Browse files

Allow fallback to Toolbar's default Navigation Icon

Bug: 17554486
Change-Id: Id9f2197820df42d81351540be5baa852f49bdf0a
parent 4bc92b06
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;