Merge "Fully remove Toolbar children when action views expand" into mnc-dev
This commit is contained in:
@@ -26,7 +26,6 @@ import android.annotation.StyleRes;
|
||||
import android.app.ActionBar;
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
@@ -148,6 +147,9 @@ public class Toolbar extends ViewGroup {
|
||||
// Clear me after use.
|
||||
private final ArrayList<View> mTempViews = new ArrayList<View>();
|
||||
|
||||
// Used to hold views that will be removed while we have an expanded action view.
|
||||
private final ArrayList<View> mHiddenViews = new ArrayList<>();
|
||||
|
||||
private final int[] mTempMargins = new int[2];
|
||||
|
||||
private OnMenuItemClickListener mOnMenuItemClickListener;
|
||||
@@ -435,12 +437,12 @@ public class Toolbar extends ViewGroup {
|
||||
public void setLogo(Drawable drawable) {
|
||||
if (drawable != null) {
|
||||
ensureLogoView();
|
||||
if (mLogoView.getParent() == null) {
|
||||
addSystemView(mLogoView);
|
||||
updateChildVisibilityForExpandedActionView(mLogoView);
|
||||
if (!isChildOrHidden(mLogoView)) {
|
||||
addSystemView(mLogoView, true);
|
||||
}
|
||||
} else if (mLogoView != null && mLogoView.getParent() != null) {
|
||||
} else if (mLogoView != null && isChildOrHidden(mLogoView)) {
|
||||
removeView(mLogoView);
|
||||
mHiddenViews.remove(mLogoView);
|
||||
}
|
||||
if (mLogoView != null) {
|
||||
mLogoView.setImageDrawable(drawable);
|
||||
@@ -577,12 +579,12 @@ public class Toolbar extends ViewGroup {
|
||||
mTitleTextView.setTextColor(mTitleTextColor);
|
||||
}
|
||||
}
|
||||
if (mTitleTextView.getParent() == null) {
|
||||
addSystemView(mTitleTextView);
|
||||
updateChildVisibilityForExpandedActionView(mTitleTextView);
|
||||
if (!isChildOrHidden(mTitleTextView)) {
|
||||
addSystemView(mTitleTextView, true);
|
||||
}
|
||||
} else if (mTitleTextView != null && mTitleTextView.getParent() != null) {
|
||||
} else if (mTitleTextView != null && isChildOrHidden(mTitleTextView)) {
|
||||
removeView(mTitleTextView);
|
||||
mHiddenViews.remove(mTitleTextView);
|
||||
}
|
||||
if (mTitleTextView != null) {
|
||||
mTitleTextView.setText(title);
|
||||
@@ -631,12 +633,12 @@ public class Toolbar extends ViewGroup {
|
||||
mSubtitleTextView.setTextColor(mSubtitleTextColor);
|
||||
}
|
||||
}
|
||||
if (mSubtitleTextView.getParent() == null) {
|
||||
addSystemView(mSubtitleTextView);
|
||||
updateChildVisibilityForExpandedActionView(mSubtitleTextView);
|
||||
if (!isChildOrHidden(mSubtitleTextView)) {
|
||||
addSystemView(mSubtitleTextView, true);
|
||||
}
|
||||
} else if (mSubtitleTextView != null && mSubtitleTextView.getParent() != null) {
|
||||
} else if (mSubtitleTextView != null && isChildOrHidden(mSubtitleTextView)) {
|
||||
removeView(mSubtitleTextView);
|
||||
mHiddenViews.remove(mSubtitleTextView);
|
||||
}
|
||||
if (mSubtitleTextView != null) {
|
||||
mSubtitleTextView.setText(subtitle);
|
||||
@@ -772,12 +774,12 @@ public class Toolbar extends ViewGroup {
|
||||
public void setNavigationIcon(@Nullable Drawable icon) {
|
||||
if (icon != null) {
|
||||
ensureNavButtonView();
|
||||
if (mNavButtonView.getParent() == null) {
|
||||
addSystemView(mNavButtonView);
|
||||
updateChildVisibilityForExpandedActionView(mNavButtonView);
|
||||
if (!isChildOrHidden(mNavButtonView)) {
|
||||
addSystemView(mNavButtonView, true);
|
||||
}
|
||||
} else if (mNavButtonView != null && mNavButtonView.getParent() != null) {
|
||||
} else if (mNavButtonView != null && isChildOrHidden(mNavButtonView)) {
|
||||
removeView(mNavButtonView);
|
||||
mHiddenViews.remove(mNavButtonView);
|
||||
}
|
||||
if (mNavButtonView != null) {
|
||||
mNavButtonView.setImageDrawable(icon);
|
||||
@@ -866,7 +868,7 @@ public class Toolbar extends ViewGroup {
|
||||
final LayoutParams lp = generateDefaultLayoutParams();
|
||||
lp.gravity = Gravity.END | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
|
||||
mMenuView.setLayoutParams(lp);
|
||||
addSystemView(mMenuView);
|
||||
addSystemView(mMenuView, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1041,7 +1043,7 @@ public class Toolbar extends ViewGroup {
|
||||
}
|
||||
}
|
||||
|
||||
private void addSystemView(View v) {
|
||||
private void addSystemView(View v, boolean allowHide) {
|
||||
final ViewGroup.LayoutParams vlp = v.getLayoutParams();
|
||||
final LayoutParams lp;
|
||||
if (vlp == null) {
|
||||
@@ -1052,7 +1054,13 @@ public class Toolbar extends ViewGroup {
|
||||
lp = (LayoutParams) vlp;
|
||||
}
|
||||
lp.mViewType = LayoutParams.SYSTEM;
|
||||
addView(v, lp);
|
||||
|
||||
if (allowHide && mExpandedActionView != null) {
|
||||
v.setLayoutParams(lp);
|
||||
mHiddenViews.add(v);
|
||||
} else {
|
||||
addView(v, lp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1741,22 +1749,30 @@ public class Toolbar extends ViewGroup {
|
||||
return mWrapper;
|
||||
}
|
||||
|
||||
private void setChildVisibilityForExpandedActionView(boolean expand) {
|
||||
void removeChildrenForExpandedActionView() {
|
||||
final int childCount = getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
// Go backwards since we're removing from the list
|
||||
for (int i = childCount - 1; i >= 0; i--) {
|
||||
final View child = getChildAt(i);
|
||||
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
|
||||
if (lp.mViewType != LayoutParams.EXPANDED && child != mMenuView) {
|
||||
child.setVisibility(expand ? GONE : VISIBLE);
|
||||
removeViewAt(i);
|
||||
mHiddenViews.add(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateChildVisibilityForExpandedActionView(View child) {
|
||||
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
|
||||
if (lp.mViewType != LayoutParams.EXPANDED && child != mMenuView) {
|
||||
child.setVisibility(mExpandedActionView != null ? GONE : VISIBLE);
|
||||
void addChildrenForExpandedActionView() {
|
||||
final int count = mHiddenViews.size();
|
||||
// Re-add in reverse order since we removed in reverse order
|
||||
for (int i = count - 1; i >= 0; i--) {
|
||||
addView(mHiddenViews.get(i));
|
||||
}
|
||||
mHiddenViews.clear();
|
||||
}
|
||||
|
||||
private boolean isChildOrHidden(View child) {
|
||||
return child.getParent() == this || mHiddenViews.contains(child);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1971,7 +1987,7 @@ public class Toolbar extends ViewGroup {
|
||||
addView(mExpandedActionView);
|
||||
}
|
||||
|
||||
setChildVisibilityForExpandedActionView(true);
|
||||
removeChildrenForExpandedActionView();
|
||||
requestLayout();
|
||||
item.setActionViewExpanded(true);
|
||||
|
||||
@@ -1994,7 +2010,7 @@ public class Toolbar extends ViewGroup {
|
||||
removeView(mCollapseButtonView);
|
||||
mExpandedActionView = null;
|
||||
|
||||
setChildVisibilityForExpandedActionView(false);
|
||||
addChildrenForExpandedActionView();
|
||||
mCurrentExpandedItem = null;
|
||||
requestLayout();
|
||||
item.setActionViewExpanded(false);
|
||||
|
||||
Reference in New Issue
Block a user