Merge "Fix bug 5124021 - Menu visibility incorrect when restoring ListView selection mode"
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 ?
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user