Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a5cc281 authored by Adam Powell's avatar Adam Powell
Browse files

Fix bug 5124021 - Menu visibility incorrect when restoring ListView

selection mode

Fix visibility of menus when action modes are initiailized early.

Fix ListView problems persisting check states.

Change-Id: Idc21036dc39259e72f0e6831a0ccb4695f8858ef
parent b8a9e15c
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -1574,8 +1574,17 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te

        ss.inActionMode = mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null;

        ss.checkState = mCheckStates;
        ss.checkIdState = mCheckedIdStates;
        if (mCheckStates != null) {
            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;

        return ss;
+14 −1
Original line number Diff line number Diff line
@@ -56,6 +56,16 @@ public abstract class AbsActionBarView extends ViewGroup {
        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) {
        if (mVisibilityAnim != null) {
            mVisibilityAnim.cancel();
@@ -179,7 +189,7 @@ public abstract class AbsActionBarView extends ViewGroup {

    protected class VisibilityAnimListener implements Animator.AnimatorListener {
        private boolean mCanceled = false;
        private int mFinalVisibility;
        int mFinalVisibility;

        public VisibilityAnimListener withFinalVisibility(int visibility) {
            mFinalVisibility = visibility;
@@ -199,6 +209,9 @@ public abstract class AbsActionBarView extends ViewGroup {

            mVisibilityAnim = null;
            setVisibility(mFinalVisibility);
            if (mSplitView != null && mMenuView != null) {
                mMenuView.setVisibility(mFinalVisibility);
            }
        }

        @Override
+4 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.util.AttributeSet;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -270,14 +271,14 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
    }

    @Override
    protected LayoutParams generateDefaultLayoutParams() {
    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
        // Used by custom views if they don't supply layout params. Everything else
        // added to an ActionBarContextView should have them already.
        return new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    }

    @Override
    public LayoutParams generateLayoutParams(AttributeSet attrs) {
    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
        return new MarginLayoutParams(getContext(), attrs);
    }

@@ -321,7 +322,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
        }

        if (mCustomView != null) {
            LayoutParams lp = mCustomView.getLayoutParams();
            ViewGroup.LayoutParams lp = mCustomView.getLayoutParams();
            final int customWidthMode = lp.width != LayoutParams.WRAP_CONTENT ?
                    MeasureSpec.EXACTLY : MeasureSpec.AT_MOST;
            final int customWidth = lp.width >= 0 ?
+7 −6
Original line number Diff line number Diff line
@@ -401,6 +401,7 @@ public class ActionBarView extends AbsActionBarView {
                if (oldParent != null && oldParent != mSplitView) {
                    oldParent.removeView(menuView);
                }
                menuView.setVisibility(getAnimatedVisibility());
                mSplitView.addView(menuView, layoutParams);
            } else {
                // We'll add this later if we missed it this time.
@@ -683,7 +684,7 @@ public class ActionBarView extends AbsActionBarView {
    }

    @Override
    protected LayoutParams generateDefaultLayoutParams() {
    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
        // Used by custom nav views if they don't supply layout params. Everything else
        // added to an ActionBarView should have them already.
        return new ActionBar.LayoutParams(DEFAULT_CUSTOM_GRAVITY);
@@ -810,7 +811,7 @@ public class ActionBarView extends AbsActionBarView {
        HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout;

        if (homeLayout.getVisibility() != GONE) {
            final LayoutParams lp = homeLayout.getLayoutParams();
            final ViewGroup.LayoutParams lp = homeLayout.getLayoutParams();
            int homeWidthSpec;
            if (lp.width < 0) {
                homeWidthSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST);
@@ -881,7 +882,7 @@ public class ActionBarView extends AbsActionBarView {
        }

        if (customView != null) {
            final LayoutParams lp = generateLayoutParams(customView.getLayoutParams());
            final ViewGroup.LayoutParams lp = generateLayoutParams(customView.getLayoutParams());
            final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ?
                    (ActionBar.LayoutParams) lp : null;

@@ -1017,7 +1018,7 @@ public class ActionBarView extends AbsActionBarView {
            customView = mCustomNavView;
        }
        if (customView != null) {
            LayoutParams lp = customView.getLayoutParams();
            ViewGroup.LayoutParams lp = customView.getLayoutParams();
            final ActionBar.LayoutParams ablp = lp instanceof ActionBar.LayoutParams ?
                    (ActionBar.LayoutParams) lp : null;

@@ -1095,12 +1096,12 @@ public class ActionBarView extends AbsActionBarView {
    }

    @Override
    public LayoutParams generateLayoutParams(AttributeSet attrs) {
    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
        return new ActionBar.LayoutParams(getContext(), attrs);
    }

    @Override
    public LayoutParams generateLayoutParams(LayoutParams lp) {
    public ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
        if (lp == null) {
            lp = generateDefaultLayoutParams();
        }