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

Commit ce50b819 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Fix intercept logic in NotificationPanelView.

We need to make sure that we only block the disallow intercept
request when interacting with the ScrollView. In the past, we also
blocked the disallow intercept request for the brightness slider, for
example.

Bug: 15169261
Change-Id: I02dd1e399a527509d631fdde54249d57748b20f2
parent 88aca033
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -353,10 +353,12 @@ public class NotificationPanelView extends PanelView implements
    @Override
    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        // Block request so we can still intercept the scrolling when QS is expanded.
        if (!mQsExpanded) {
            super.requestDisallowInterceptTouchEvent(disallowIntercept);
        // Block request when interacting with the scroll view so we can still intercept the
        // scrolling when QS is expanded.
        if (mScrollView.isDispatchingTouchEvent()) {
            return;
        }
        super.requestDisallowInterceptTouchEvent(disallowIntercept);
    }

    private void flingWithCurrentVelocity() {
+14 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;

@@ -28,6 +29,7 @@ public class ObservableScrollView extends ScrollView {

    private Listener mListener;
    private int mLastOverscrollAmount;
    private boolean mDispatchingTouchEvent;

    public ObservableScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -41,6 +43,10 @@ public class ObservableScrollView extends ScrollView {
        return getScrollY() == getMaxScrollY();
    }

    public boolean isDispatchingTouchEvent() {
        return mDispatchingTouchEvent;
    }

    private int getMaxScrollY() {
        int scrollRange = 0;
        if (getChildCount() > 0) {
@@ -51,6 +57,14 @@ public class ObservableScrollView extends ScrollView {
        return scrollRange;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        mDispatchingTouchEvent = true;
        boolean result = super.dispatchTouchEvent(ev);
        mDispatchingTouchEvent = false;
        return result;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);