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:
Yigit Boyar
2014-09-22 19:19:15 +00:00
committed by Android Git Automerger
3 changed files with 53 additions and 20 deletions

View File

@@ -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();
}
}

View File

@@ -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);
}

View File

@@ -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;