[PointerEventsListener] Add missing _getPacket result checks.
This fixes handling of cases where _getPacket returns null. Test that
crashed before but is now passing was added as part of this change.
Test: fx run-host-tests dart_widget_tests
Change-Id: I44765cc29bc92442079ceb9913835a0a5ec14e73
Reviewed-on: https://fuchsia-review.googlesource.com/c/experiences/+/402377
Reviewed-by: Sanjay Chouksey <sanjayc@google.com>
Testability-Review: Sanjay Chouksey <sanjayc@google.com>
Commit-Queue: David Reveman <reveman@google.com>
diff --git a/settings/lib/widgets/lib/src/utils/pointer_events_listener.dart b/settings/lib/widgets/lib/src/utils/pointer_events_listener.dart
index 2bda39f..39280b3 100644
--- a/settings/lib/widgets/lib/src/utils/pointer_events_listener.dart
+++ b/settings/lib/widgets/lib/src/utils/pointer_events_listener.dart
@@ -178,7 +178,10 @@
};
Timeline.timeSync('PointerEventsListener.onPointerEvent', () {
if (_kindFromPointerEvent(event) != ui.PointerDeviceKind.touch) {
- _callback(ui.PointerDataPacket(data: [_getPacket(event)]));
+ final packet = _getPacket(event);
+ if (packet != null) {
+ _callback(ui.PointerDataPacket(data: [packet]));
+ }
return;
}
final frameTime =
@@ -186,12 +189,14 @@
// Sanity check event time by clamping to frameTime.
final eventTime =
event.eventTime < frameTime ? event.eventTime : frameTime;
- var data =
+ final packet =
_getPacket(_clone(event, event.phase, event.x, event.y, eventTime));
- var resampler =
- _resamplers.putIfAbsent(data.device, () => PointerDataResampler());
- resampler.addData(data);
- _dispatchEvents();
+ if (packet != null) {
+ var resampler = _resamplers.putIfAbsent(
+ packet.device, () => PointerDataResampler());
+ resampler.addData(packet);
+ _dispatchEvents();
+ }
}, arguments: eventArguments);
}
diff --git a/settings/lib/widgets/test/pointer_events_listener_test.dart b/settings/lib/widgets/test/pointer_events_listener_test.dart
index 7fdd846..62c3330 100644
--- a/settings/lib/widgets/test/pointer_events_listener_test.dart
+++ b/settings/lib/widgets/test/pointer_events_listener_test.dart
@@ -288,4 +288,19 @@
expect(result[1].physicalDeltaX, 25.0 * ui.window.devicePixelRatio);
expect(result[1].physicalDeltaY, 0.0);
});
+
+ test('outside window', () {
+ final event0 = _createSimulatedPointerEvent(
+ PointerEventPhase.down, 1000, ui.window.physicalSize.width, 0.0);
+ final event1 = _createSimulatedPointerEvent(
+ PointerEventPhase.up, 2000, 0.0, ui.window.physicalSize.height);
+
+ var frameTime = Duration(milliseconds: 16);
+ when(scheduler.currentSystemFrameTimeStamp).thenReturn(frameTime);
+
+ pointerEventsListener..onPointerEvent(event0)..onPointerEvent(event1);
+
+ // No pointer events should have been dispatched as events are outside the window.
+ expect(result.isEmpty, true);
+ });
}