Merge "Fix bug 5124021 - Menu visibility incorrect when restoring ListView selection mode"

This commit is contained in:
Adam Powell
2011-08-29 10:42:43 -07:00
committed by Android (Google) Code Review
4 changed files with 36 additions and 12 deletions

View File

@@ -1574,8 +1574,17 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
ss.inActionMode = mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null; ss.inActionMode = mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null;
ss.checkState = mCheckStates; if (mCheckStates != null) {
ss.checkIdState = mCheckedIdStates; ss.checkState = mCheckStates.clone();
}
if (mCheckedIdStates != null) {
final LongSparseArray<Boolean> idState = new LongSparseArray<Boolean>();
final int count = mCheckedIdStates.size();
for (int i = 0; i < count; i++) {
idState.put(mCheckedIdStates.keyAt(i), mCheckedIdStates.valueAt(i));
}
ss.checkIdState = idState;
}
ss.checkedItemCount = mCheckedItemCount; ss.checkedItemCount = mCheckedItemCount;
return ss; return ss;

View File

@@ -56,6 +56,16 @@ public abstract class AbsActionBarView extends ViewGroup {
mSplitView = splitView; mSplitView = splitView;
} }
/**
* @return Current visibility or if animating, the visibility being animated to.
*/
public int getAnimatedVisibility() {
if (mVisibilityAnim != null) {
return mVisAnimListener.mFinalVisibility;
}
return getVisibility();
}
public void animateToVisibility(int visibility) { public void animateToVisibility(int visibility) {
if (mVisibilityAnim != null) { if (mVisibilityAnim != null) {
mVisibilityAnim.cancel(); mVisibilityAnim.cancel();
@@ -179,7 +189,7 @@ public abstract class AbsActionBarView extends ViewGroup {
protected class VisibilityAnimListener implements Animator.AnimatorListener { protected class VisibilityAnimListener implements Animator.AnimatorListener {
private boolean mCanceled = false; private boolean mCanceled = false;
private int mFinalVisibility; int mFinalVisibility;
public VisibilityAnimListener withFinalVisibility(int visibility) { public VisibilityAnimListener withFinalVisibility(int visibility) {
mFinalVisibility = visibility; mFinalVisibility = visibility;
@@ -199,6 +209,9 @@ public abstract class AbsActionBarView extends ViewGroup {
mVisibilityAnim = null; mVisibilityAnim = null;
setVisibility(mFinalVisibility); setVisibility(mFinalVisibility);
if (mSplitView != null && mMenuView != null) {
mMenuView.setVisibility(mFinalVisibility);
}
} }
@Override @Override

View File

@@ -33,6 +33,7 @@ import android.util.AttributeSet;
import android.view.ActionMode; import android.view.ActionMode;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator; import android.view.animation.DecelerateInterpolator;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
@@ -270,14 +271,14 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
} }
@Override @Override
protected LayoutParams generateDefaultLayoutParams() { protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
// Used by custom views if they don't supply layout params. Everything else // Used by custom views if they don't supply layout params. Everything else
// added to an ActionBarContextView should have them already. // added to an ActionBarContextView should have them already.
return new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); return new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
} }
@Override @Override
public LayoutParams generateLayoutParams(AttributeSet attrs) { public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
return new MarginLayoutParams(getContext(), attrs); return new MarginLayoutParams(getContext(), attrs);
} }
@@ -321,7 +322,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
} }
if (mCustomView != null) { if (mCustomView != null) {
LayoutParams lp = mCustomView.getLayoutParams(); ViewGroup.LayoutParams lp = mCustomView.getLayoutParams();
final int customWidthMode = lp.width != LayoutParams.WRAP_CONTENT ? final int customWidthMode = lp.width != LayoutParams.WRAP_CONTENT ?
MeasureSpec.EXACTLY : MeasureSpec.AT_MOST; MeasureSpec.EXACTLY : MeasureSpec.AT_MOST;
final int customWidth = lp.width >= 0 ? final int customWidth = lp.width >= 0 ?

View File

@@ -401,6 +401,7 @@ public class ActionBarView extends AbsActionBarView {
if (oldParent != null && oldParent != mSplitView) { if (oldParent != null && oldParent != mSplitView) {
oldParent.removeView(menuView); oldParent.removeView(menuView);
} }
menuView.setVisibility(getAnimatedVisibility());
mSplitView.addView(menuView, layoutParams); mSplitView.addView(menuView, layoutParams);
} else { } else {
// We'll add this later if we missed it this time. // We'll add this later if we missed it this time.
@@ -683,7 +684,7 @@ public class ActionBarView extends AbsActionBarView {
} }
@Override @Override
protected LayoutParams generateDefaultLayoutParams() { protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
// Used by custom nav views if they don't supply layout params. Everything else // Used by custom nav views if they don't supply layout params. Everything else
// added to an ActionBarView should have them already. // added to an ActionBarView should have them already.
return new ActionBar.LayoutParams(DEFAULT_CUSTOM_GRAVITY); return new ActionBar.LayoutParams(DEFAULT_CUSTOM_GRAVITY);
@@ -810,7 +811,7 @@ public class ActionBarView extends AbsActionBarView {
HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout; HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout;
if (homeLayout.getVisibility() != GONE) { if (homeLayout.getVisibility() != GONE) {
final LayoutParams lp = homeLayout.getLayoutParams(); final ViewGroup.LayoutParams lp = homeLayout.getLayoutParams();
int homeWidthSpec; int homeWidthSpec;
if (lp.width < 0) { if (lp.width < 0) {
homeWidthSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST); homeWidthSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST);
@@ -881,7 +882,7 @@ public class ActionBarView extends AbsActionBarView {
} }
if (customView != null) { if (customView != null) {
final LayoutParams lp = generateLayoutParams(customView.getLayoutParams()); final ViewGroup.LayoutParams lp = generateLayoutParams(customView.getLayoutParams());
final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ? final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ?
(ActionBar.LayoutParams) lp : null; (ActionBar.LayoutParams) lp : null;
@@ -1017,7 +1018,7 @@ public class ActionBarView extends AbsActionBarView {
customView = mCustomNavView; customView = mCustomNavView;
} }
if (customView != null) { if (customView != null) {
LayoutParams lp = customView.getLayoutParams(); ViewGroup.LayoutParams lp = customView.getLayoutParams();
final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ? final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ?
(ActionBar.LayoutParams) lp : null; (ActionBar.LayoutParams) lp : null;
@@ -1095,12 +1096,12 @@ public class ActionBarView extends AbsActionBarView {
} }
@Override @Override
public LayoutParams generateLayoutParams(AttributeSet attrs) { public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
return new ActionBar.LayoutParams(getContext(), attrs); return new ActionBar.LayoutParams(getContext(), attrs);
} }
@Override @Override
public LayoutParams generateLayoutParams(LayoutParams lp) { public ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
if (lp == null) { if (lp == null) {
lp = generateDefaultLayoutParams(); lp = generateDefaultLayoutParams();
} }