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

Commit 745df7c4 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Skipping touch dispatch when it happens withing the window gesture region

> Those events are already proxied through the TouchInteractionService

Change-Id: If06483f208cbd462fdfdf01abba27bd937b766e7
parent 1f95993e
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -17,12 +17,18 @@ package com.android.quickstep.fallback;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Insets;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewDebug;
import android.view.WindowInsets;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.views.BaseDragLayer;
@@ -33,6 +39,9 @@ public class RecentsRootView extends BaseDragLayer<RecentsActivity> {
    private static final int MIN_SIZE = 10;
    private final RecentsActivity mActivity;

    @ViewDebug.ExportedProperty(category = "launcher")
    private final RectF mTouchExcludeRegion = new RectF();

    private final Point mLastKnownSize = new Point(MIN_SIZE, MIN_SIZE);

    public RecentsRootView(Context context, AttributeSet attrs) {
@@ -88,4 +97,29 @@ public class RecentsRootView extends BaseDragLayer<RecentsActivity> {
        mActivity.getDeviceProfile().updateInsets(mInsets);
        super.setInsets(mInsets);
    }

    @Override
    public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) {
        if (Utilities.ATLEAST_Q) {
            Insets gestureInsets = insets.getMandatorySystemGestureInsets();
            mTouchExcludeRegion.set(gestureInsets.left, gestureInsets.top,
                    gestureInsets.right, gestureInsets.bottom);
        }
        return super.dispatchApplyWindowInsets(insets);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            float x = ev.getX();
            float y = ev.getY();
            if (y < mTouchExcludeRegion.top
                    || x < mTouchExcludeRegion.left
                    || x > (getWidth() - mTouchExcludeRegion.right)
                    || y > (getHeight() - mTouchExcludeRegion.bottom)) {
                return false;
            }
        }
        return super.dispatchTouchEvent(ev);
    }
}
 No newline at end of file
+32 −0
Original line number Diff line number Diff line
@@ -8,11 +8,15 @@ import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Insets;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;
import android.view.WindowInsets;

public class LauncherRootView extends InsettableFrameLayout {

@@ -23,6 +27,9 @@ public class LauncherRootView extends InsettableFrameLayout {
    @ViewDebug.ExportedProperty(category = "launcher")
    private final Rect mConsumedInsets = new Rect();

    @ViewDebug.ExportedProperty(category = "launcher")
    private final RectF mTouchExcludeRegion = new RectF();

    private View mAlignedView;
    private WindowStateListener mWindowStateListener;

@@ -145,6 +152,31 @@ public class LauncherRootView extends InsettableFrameLayout {
        }
    }

    @Override
    public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) {
        if (Utilities.ATLEAST_Q) {
            Insets gestureInsets = insets.getMandatorySystemGestureInsets();
            mTouchExcludeRegion.set(gestureInsets.left, gestureInsets.top,
                    gestureInsets.right, gestureInsets.bottom);
        }
        return super.dispatchApplyWindowInsets(insets);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            float x = ev.getX();
            float y = ev.getY();
            if (y < mTouchExcludeRegion.top
                    || x < mTouchExcludeRegion.left
                    || x > (getWidth() - mTouchExcludeRegion.right)
                    || y > (getHeight() - mTouchExcludeRegion.bottom)) {
                return false;
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    public interface WindowStateListener {

        void onWindowFocusChanged(boolean hasFocus);