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

Commit 74a7ee71 authored by Massimo Carli's avatar Massimo Carli Committed by Automerger Merge Worker
Browse files

Merge "Fix NPE in letterbox double tap" into udc-qpr-dev am: 9e22e96f

parents 09a3d596 9e22e96f
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.os.InputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
import static android.view.SurfaceControl.HIDDEN;
import static android.window.TaskConstants.TASK_CHILD_LAYER_LETTERBOX_BACKGROUND;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
@@ -256,11 +255,11 @@ public class Letterbox {
        private final GestureDetector mDoubleTapDetector;
        private final DoubleTapListener mDoubleTapListener;

        TapEventReceiver(InputChannel inputChannel, Context context) {
        TapEventReceiver(InputChannel inputChannel, WindowManagerService wmService) {
            super(inputChannel, UiThread.getHandler().getLooper());
            mDoubleTapListener = new DoubleTapListener();
            mDoubleTapListener = new DoubleTapListener(wmService);
            mDoubleTapDetector = new GestureDetector(
                    context, mDoubleTapListener, UiThread.getHandler());
                    wmService.mContext, mDoubleTapListener, UiThread.getHandler());
        }

        @Override
@@ -271,9 +270,18 @@ public class Letterbox {
    }

    private class DoubleTapListener extends GestureDetector.SimpleOnGestureListener {
        private final WindowManagerService mWmService;

        private DoubleTapListener(WindowManagerService wmService) {
            mWmService = wmService;
        }

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            if (e.getAction() == MotionEvent.ACTION_UP) {
            synchronized (mWmService.mGlobalLock) {
                // This check prevents late events to be handled in case the Letterbox has been
                // already destroyed and so mOuter.isEmpty() is true.
                if (!mOuter.isEmpty() && e.getAction() == MotionEvent.ACTION_UP) {
                    mDoubleTapCallbackX.accept((int) e.getRawX());
                    mDoubleTapCallbackY.accept((int) e.getRawY());
                    return true;
@@ -281,6 +289,7 @@ public class Letterbox {
                return false;
            }
        }
    }

    private final class InputInterceptor {

@@ -294,7 +303,7 @@ public class Letterbox {
            mWmService = win.mWmService;
            final String name = namePrefix + (win.mActivityRecord != null ? win.mActivityRecord : win);
            mClientChannel = mWmService.mInputManager.createInputChannel(name);
            mInputEventReceiver = new TapEventReceiver(mClientChannel, mWmService.mContext);
            mInputEventReceiver = new TapEventReceiver(mClientChannel, mWmService);

            mToken = mClientChannel.getToken();