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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user