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

Commit 84798da0 authored by Keun young Park's avatar Keun young Park
Browse files

Fix crash coming from accessing invalid display from GestureDetector

- Quick removal of display during boot-up leads into system server crash
- Check if display is still existing before creating GestureDetector

Bug: 157256737
Test: N/A (need to check occasional failures in emulator tests)
Change-Id: I2b04b0e8dea195ffdb1ac1390ef2ba0d4eebfd1b
parent 7e24d133
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.SystemClock;
import android.util.Slog;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.DisplayInfo;
import android.view.GestureDetector;
import android.view.InputDevice;
import android.view.MotionEvent;
@@ -117,8 +118,17 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
        // GestureDetector would get a ViewConfiguration instance by context, that may also
        // create a new WindowManagerImpl for the new display, and lock WindowManagerGlobal
        // temporarily in the constructor that would make a deadlock.
        mHandler.post(() -> mGestureDetector =
                new GestureDetector(mContext, new FlingGestureDetector(), mHandler) {});
        mHandler.post(() -> {
            final int displayId = mContext.getDisplayId();
            final DisplayInfo info = DisplayManagerGlobal.getInstance().getDisplayInfo(displayId);
            if (info == null) {
                // Display already removed, stop here.
                Slog.w(TAG, "Cannot create GestureDetector, display removed:" + displayId);
                return;
            }
            mGestureDetector = new GestureDetector(mContext, new FlingGestureDetector(), mHandler) {
            };
        });
    }

    @Override