diff options
author | Adam Powell <adamp@google.com> | 2014-08-26 01:29:14 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-26 01:29:15 +0000 |
commit | b79a70ab7177386ec1c3a2c83fe2ded4cf040fb9 (patch) | |
tree | 05af4e48369df37400960deb934b528ffa2d1091 /core/java/android | |
parent | ad3fc407377597a23dd97cd92c72abaad1acca6c (diff) | |
parent | 31c91c81798802f62d55f8bccb6d4071471c1aa4 (diff) | |
download | frameworks_base-b79a70ab7177386ec1c3a2c83fe2ded4cf040fb9.zip frameworks_base-b79a70ab7177386ec1c3a2c83fe2ded4cf040fb9.tar.gz frameworks_base-b79a70ab7177386ec1c3a2c83fe2ded4cf040fb9.tar.bz2 |
Merge "Add state save/restore for Toolbar" into lmp-dev
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/widget/Toolbar.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 0b15eb6..818efaa 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -156,6 +156,12 @@ public class Toolbar extends ViewGroup { private boolean mCollapsible; + private final Runnable mShowOverflowMenuRunnable = new Runnable() { + @Override public void run() { + showOverflowMenu(); + } + }; + public Toolbar(Context context) { this(context, null); } @@ -404,6 +410,7 @@ public class Toolbar extends ViewGroup { ensureLogoView(); if (mLogoView.getParent() == null) { addSystemView(mLogoView); + updateChildVisibilityForExpandedActionView(mLogoView); } } else if (mLogoView != null && mLogoView.getParent() != null) { removeView(mLogoView); @@ -545,6 +552,7 @@ public class Toolbar extends ViewGroup { } if (mTitleTextView.getParent() == null) { addSystemView(mTitleTextView); + updateChildVisibilityForExpandedActionView(mTitleTextView); } } else if (mTitleTextView != null && mTitleTextView.getParent() != null) { removeView(mTitleTextView); @@ -598,6 +606,7 @@ public class Toolbar extends ViewGroup { } if (mSubtitleTextView.getParent() == null) { addSystemView(mSubtitleTextView); + updateChildVisibilityForExpandedActionView(mSubtitleTextView); } } else if (mSubtitleTextView != null && mSubtitleTextView.getParent() != null) { removeView(mSubtitleTextView); @@ -728,6 +737,7 @@ public class Toolbar extends ViewGroup { ensureNavButtonView(); if (mNavButtonView.getParent() == null) { addSystemView(mNavButtonView); + updateChildVisibilityForExpandedActionView(mNavButtonView); } } else if (mNavButtonView != null && mNavButtonView.getParent() != null) { removeView(mNavButtonView); @@ -979,6 +989,13 @@ public class Toolbar extends ViewGroup { @Override protected Parcelable onSaveInstanceState() { SavedState state = new SavedState(super.onSaveInstanceState()); + + if (mExpandedMenuPresenter != null && mExpandedMenuPresenter.mCurrentExpandedItem != null) { + state.expandedMenuItemId = mExpandedMenuPresenter.mCurrentExpandedItem.getItemId(); + } + + state.isOverflowOpen = isOverflowMenuShowing(); + return state; } @@ -986,6 +1003,29 @@ public class Toolbar extends ViewGroup { protected void onRestoreInstanceState(Parcelable state) { final SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); + + final Menu menu = mMenuView != null ? mMenuView.peekMenu() : null; + if (ss.expandedMenuItemId != 0 && mExpandedMenuPresenter != null && menu != null) { + final MenuItem item = menu.findItem(ss.expandedMenuItemId); + if (item != null) { + item.expandActionView(); + } + } + + if (ss.isOverflowOpen) { + postShowOverflowMenu(); + } + } + + private void postShowOverflowMenu() { + removeCallbacks(mShowOverflowMenuRunnable); + post(mShowOverflowMenuRunnable); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + removeCallbacks(mShowOverflowMenuRunnable); } /** @@ -1591,6 +1631,13 @@ public class Toolbar extends ViewGroup { } } + private void updateChildVisibilityForExpandedActionView(View child) { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + if (lp.mViewType != LayoutParams.EXPANDED && child != mMenuView) { + child.setVisibility(mExpandedActionView != null ? GONE : VISIBLE); + } + } + /** * Force the toolbar to collapse to zero-height during measurement if * it could be considered "empty" (no visible elements with nonzero measured size) @@ -1673,8 +1720,13 @@ public class Toolbar extends ViewGroup { } static class SavedState extends BaseSavedState { + public int expandedMenuItemId; + public boolean isOverflowOpen; + public SavedState(Parcel source) { super(source); + expandedMenuItemId = source.readInt(); + isOverflowOpen = source.readInt() != 0; } public SavedState(Parcelable superState) { @@ -1684,6 +1736,8 @@ public class Toolbar extends ViewGroup { @Override public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); + out.writeInt(expandedMenuItemId); + out.writeInt(isOverflowOpen ? 1 : 0); } public static final Creator<SavedState> CREATOR = new Creator<SavedState>() { |