@@ -218,4 +218,62 @@ public void unexpectedMaskedAction() {
218218 touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_BUTTON_PRESS , 0.0f , 0.0f , 0 ));
219219 verify (mockRenderer , never ()).dispatchPointerDataPacket (ByteBuffer .allocate (0 ), 0 );
220220 }
221+
222+ @ Test
223+ public void unexpectedPointerChange () {
224+ // Regression test for https://github.com/flutter/flutter/issues/129765
225+
226+ MotionEventMocker mocker =
227+ new MotionEventMocker (0 , InputDevice .SOURCE_MOUSE , MotionEvent .TOOL_TYPE_MOUSE );
228+
229+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_DOWN , 0.0f , 0.0f , 0 ));
230+ InOrder inOrder = inOrder (mockRenderer );
231+ inOrder
232+ .verify (mockRenderer )
233+ .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
234+ ByteBuffer packet = packetCaptor .getValue ();
235+ assertEquals (AndroidTouchProcessor .PointerChange .PAN_ZOOM_START , readPointerChange (packet ));
236+ assertEquals (AndroidTouchProcessor .PointerDeviceKind .TRACKPAD , readPointerDeviceKind (packet ));
237+ assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
238+ assertEquals (0.0 , readPointerPhysicalX (packet ));
239+ assertEquals (0.0 , readPointerPhysicalY (packet ));
240+
241+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_MOVE , 10.0f , 5.0f , 0 ));
242+ inOrder
243+ .verify (mockRenderer )
244+ .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
245+ packet = packetCaptor .getValue ();
246+ assertEquals (AndroidTouchProcessor .PointerChange .PAN_ZOOM_UPDATE , readPointerChange (packet ));
247+ assertEquals (AndroidTouchProcessor .PointerDeviceKind .TRACKPAD , readPointerDeviceKind (packet ));
248+ assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
249+ assertEquals (0.0 , readPointerPhysicalX (packet ));
250+ assertEquals (0.0 , readPointerPhysicalY (packet ));
251+ assertEquals (10.0 , readPointerPanX (packet ));
252+ assertEquals (5.0 , readPointerPanY (packet ));
253+
254+ touchProcessor .onGenericMotionEvent (mocker .mockEvent (MotionEvent .ACTION_SCROLL , 0.0f , 0.0f , 0 ));
255+ inOrder
256+ .verify (mockRenderer )
257+ .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
258+ packet = packetCaptor .getValue ();
259+ assertEquals (AndroidTouchProcessor .PointerChange .PAN_ZOOM_UPDATE , readPointerChange (packet ));
260+ assertEquals (AndroidTouchProcessor .PointerDeviceKind .TRACKPAD , readPointerDeviceKind (packet ));
261+ assertEquals (AndroidTouchProcessor .PointerSignalKind .SCROLL , readPointerSignalKind (packet ));
262+ assertEquals (0.0 , readPointerPhysicalX (packet ));
263+ assertEquals (0.0 , readPointerPhysicalY (packet ));
264+ assertEquals (0.0 , readPointerPanX (packet ));
265+ assertEquals (0.0 , readPointerPanY (packet ));
266+
267+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_UP , 10.0f , 5.0f , 0 ));
268+ inOrder
269+ .verify (mockRenderer )
270+ .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
271+ packet = packetCaptor .getValue ();
272+ assertEquals (AndroidTouchProcessor .PointerChange .PAN_ZOOM_END , readPointerChange (packet ));
273+ assertEquals (AndroidTouchProcessor .PointerDeviceKind .TRACKPAD , readPointerDeviceKind (packet ));
274+ assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
275+ assertEquals (0.0 , readPointerPhysicalX (packet ));
276+ assertEquals (0.0 , readPointerPhysicalY (packet ));
277+ inOrder .verifyNoMoreInteractions ();
278+ }
221279}
0 commit comments