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

Commit 91e9bb3b authored by Chris Tate's avatar Chris Tate
Browse files

Elide undelivered drag-location messages

The recipient app could be receiving drag location updates faster than
it handled them, leading to progressive poor responsiveness.  Now we
discard any undelivered pending location updates and replace them with
the newest data point when the location is updated.

Change-Id: I7299d205a0ef8ef8f5f32fd14e9ef87383d92717
parent be27cc69
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -1692,6 +1692,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn
    public final static int CHECK_FOCUS = 1013;
    public final static int CHECK_FOCUS = 1013;
    public final static int CLOSE_SYSTEM_DIALOGS = 1014;
    public final static int CLOSE_SYSTEM_DIALOGS = 1014;
    public final static int DISPATCH_DRAG_EVENT = 1015;
    public final static int DISPATCH_DRAG_EVENT = 1015;
    public final static int DISPATCH_DRAG_LOCATION_EVENT = 1016;


    @Override
    @Override
    public void handleMessage(Message msg) {
    public void handleMessage(Message msg) {
@@ -1867,7 +1868,8 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn
                mView.onCloseSystemDialogs((String)msg.obj);
                mView.onCloseSystemDialogs((String)msg.obj);
            }
            }
        } break;
        } break;
        case DISPATCH_DRAG_EVENT: {
        case DISPATCH_DRAG_EVENT:
        case DISPATCH_DRAG_LOCATION_EVENT: {
            handleDragEvent((DragEvent)msg.obj);
            handleDragEvent((DragEvent)msg.obj);
        } break;
        } break;
        }
        }
@@ -2841,7 +2843,14 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn
    }
    }


    public void dispatchDragEvent(DragEvent event) {
    public void dispatchDragEvent(DragEvent event) {
        Message msg = obtainMessage(DISPATCH_DRAG_EVENT, event);
        final int what;
        if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
            what = DISPATCH_DRAG_LOCATION_EVENT;
            removeMessages(what);
        } else {
            what = DISPATCH_DRAG_EVENT;
        }
        Message msg = obtainMessage(what, event);
        sendMessage(msg);
        sendMessage(msg);
    }
    }