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

Commit 01feaee3 authored by Adam Powell's avatar Adam Powell
Browse files

Fix bug 3372468 - ActionBar menu shouldn't be clickable after

ActionBar.hide() is called

Action bar will capture touch events and prevent focus from passing to
its children while animating out.

Change-Id: I4501f785ead2afa34f020f9bc1a1121932f3c047
parent 360e40ef
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.internal.app;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuPopupHelper;
import com.android.internal.view.menu.MenuPopupHelper;
import com.android.internal.view.menu.SubMenuBuilder;
import com.android.internal.view.menu.SubMenuBuilder;
import com.android.internal.widget.ActionBarContainer;
import com.android.internal.widget.ActionBarContextView;
import com.android.internal.widget.ActionBarContextView;
import com.android.internal.widget.ActionBarView;
import com.android.internal.widget.ActionBarView;


@@ -65,7 +66,7 @@ public class ActionBarImpl extends ActionBar {
    private Activity mActivity;
    private Activity mActivity;
    private Dialog mDialog;
    private Dialog mDialog;


    private FrameLayout mContainerView;
    private ActionBarContainer mContainerView;
    private ActionBarView mActionView;
    private ActionBarView mActionView;
    private ActionBarContextView mUpperContextView;
    private ActionBarContextView mUpperContextView;
    private LinearLayout mLowerContextView;
    private LinearLayout mLowerContextView;
@@ -151,6 +152,7 @@ public class ActionBarImpl extends ActionBar {
                mContentView.setTranslationY(0);
                mContentView.setTranslationY(0);
            }
            }
            mContainerView.setVisibility(View.GONE);
            mContainerView.setVisibility(View.GONE);
            mContainerView.setTransitioning(false);
            mCurrentAnim = null;
            mCurrentAnim = null;
        }
        }


@@ -205,7 +207,7 @@ public class ActionBarImpl extends ActionBar {
                com.android.internal.R.id.action_context_bar);
                com.android.internal.R.id.action_context_bar);
        mLowerContextView = (LinearLayout) decor.findViewById(
        mLowerContextView = (LinearLayout) decor.findViewById(
                com.android.internal.R.id.lower_action_context_bar);
                com.android.internal.R.id.lower_action_context_bar);
        mContainerView = (FrameLayout) decor.findViewById(
        mContainerView = (ActionBarContainer) decor.findViewById(
                com.android.internal.R.id.action_bar_container);
                com.android.internal.R.id.action_bar_container);


        if (mActionView == null || mUpperContextView == null || mContainerView == null) {
        if (mActionView == null || mUpperContextView == null || mContainerView == null) {
@@ -533,6 +535,7 @@ public class ActionBarImpl extends ActionBar {


        if (mShowHideAnimationEnabled) {
        if (mShowHideAnimationEnabled) {
            mContainerView.setAlpha(1);
            mContainerView.setAlpha(1);
            mContainerView.setTransitioning(true);
            AnimatorSet anim = new AnimatorSet();
            AnimatorSet anim = new AnimatorSet();
            AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 0));
            AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 0));
            if (mContentView != null) {
            if (mContentView != null) {
+21 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@ import android.widget.FrameLayout;
 * @hide
 * @hide
 */
 */
public class ActionBarContainer extends FrameLayout {
public class ActionBarContainer extends FrameLayout {
    private boolean mIsTransitioning;

    public ActionBarContainer(Context context) {
    public ActionBarContainer(Context context) {
        this(context, null);
        this(context, null);
    }
    }
@@ -41,6 +43,25 @@ public class ActionBarContainer extends FrameLayout {
        a.recycle();
        a.recycle();
    }
    }


    /**
     * Set the action bar into a "transitioning" state. While transitioning
     * the bar will block focus and touch from all of its descendants. This
     * prevents the user from interacting with the bar while it is animating
     * in or out.
     *
     * @param isTransitioning true if the bar is currently transitioning, false otherwise.
     */
    public void setTransitioning(boolean isTransitioning) {
        mIsTransitioning = isTransitioning;
        setDescendantFocusability(isTransitioning ? FOCUS_BLOCK_DESCENDANTS
                : FOCUS_AFTER_DESCENDANTS);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return mIsTransitioning || super.onInterceptTouchEvent(ev);
    }

    @Override
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        super.onTouchEvent(ev);