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

Commit ac47ff70 authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Reset ExpandHelper when the panel is collapsed.

Fixes a rather unpleasant bug in which the ExpandHelper
could get locked in "expanding" mode if the panel was closed
(for example, with the back button) while you were in the
middle of an expand gesture. In this situation ExpandHelper
would hungrily eat all future touch events destined for the
notification panel, making it impossible to click or even
clear any notifications.

Bug: 7330828
Change-Id: I9c493db5e8fd8ef1aca53f77820780d60fa4e5a7
parent 36425d19
Loading
Loading
Loading
Loading
+39 −27
Original line number Diff line number Diff line
@@ -27,13 +27,12 @@ import android.util.Slog;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.View.OnClickListener;

import java.util.Stack;

public class ExpandHelper implements Gefingerpoken, OnClickListener {
    public interface Callback {
        View getChildAtRawPosition(float x, float y);
@@ -110,6 +109,32 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {

    private View mScrollView;

    private OnScaleGestureListener mScaleGestureListener 
            = new ScaleGestureDetector.SimpleOnScaleGestureListener() {
        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            if (DEBUG_SCALE) Slog.v(TAG, "onscalebegin()");
            float focusX = detector.getFocusX();
            float focusY = detector.getFocusY();

            final View underFocus = findView(focusX, focusY);
            if (underFocus != null) {
                startExpanding(underFocus, STRETCH);
            }
            return mExpanding;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            if (DEBUG_SCALE) Slog.v(TAG, "onscale() on " + mCurrView);
            return true;
        }

        @Override
        public void onScaleEnd(ScaleGestureDetector detector) {
        }
    };

    private class ViewScaler {
        View mView;

@@ -201,31 +226,7 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
        final ViewConfiguration configuration = ViewConfiguration.get(mContext);
        mTouchSlop = configuration.getScaledTouchSlop();

        mSGD = new ScaleGestureDetector(context,
                                         new ScaleGestureDetector.SimpleOnScaleGestureListener() {
            @Override
            public boolean onScaleBegin(ScaleGestureDetector detector) {
                if (DEBUG_SCALE) Slog.v(TAG, "onscalebegin()");
                float focusX = detector.getFocusX();
                float focusY = detector.getFocusY();

                final View underFocus = findView(focusX, focusY);
                if (underFocus != null) {
                    startExpanding(underFocus, STRETCH);
                }
                return mExpanding;
            }

            @Override
            public boolean onScale(ScaleGestureDetector detector) {
                if (DEBUG_SCALE) Slog.v(TAG, "onscale() on " + mCurrView);
                return true;
            }

            @Override
            public void onScaleEnd(ScaleGestureDetector detector) {
            }
        });
        mSGD = new ScaleGestureDetector(context, mScaleGestureListener);
    }

    private void updateExpansion() {
@@ -586,6 +587,17 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
        clearView();
    }

    /**
     * Use this to abort any pending expansions in progress.
     */
    public void cancel() {
        finishExpanding(true);
        clearView();

        // reset the gesture detector
        mSGD = new ScaleGestureDetector(mContext, mScaleGestureListener);
    }

    /**
     * Triggers haptic feedback.
     */
+1 −0
Original line number Diff line number Diff line
@@ -1368,6 +1368,7 @@ public class PhoneStatusBar extends BaseStatusBar {
            mHandler.sendEmptyMessage(MSG_CLOSE_SEARCH_PANEL);
        }

        mStatusBarWindow.cancelExpandHelper();
        mStatusBarView.collapseAllPanels(true);
    }

+4 −0
Original line number Diff line number Diff line
@@ -119,5 +119,9 @@ public class StatusBarWindowView extends FrameLayout
            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), pt);
        }
    }

    public void cancelExpandHelper() {
        mExpandHelper.cancel();
    }
}