am a9faefb3: am a0716928: Merge "Allow fallback to Toolbar\'s default Navigation Icon" into lmp-dev
* commit 'a9faefb370e9eb63ffd956507f7f854a89122759': Allow fallback to Toolbar's default Navigation Icon
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
final TypedArray a = toolbar.getContext().obtainStyledAttributes(null,
|
||||
R.styleable.ActionBar, R.attr.actionBarStyle, 0);
|
||||
mDefaultNavigationIcon = a.getDrawable(R.styleable.ActionBar_homeAsUpIndicator);
|
||||
if (style) {
|
||||
final TypedArray a = toolbar.getContext().obtainStyledAttributes(null,
|
||||
R.styleable.ActionBar, R.attr.actionBarStyle, 0);
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user