diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 819f2f9e3fb..cdc3f4cb366 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -9c46333e143bb7f0823358811da8ee96e1c13e55 +dd791f36aca8fc6f13d6e2fa60f20d4ebea89825 diff --git a/dev/integration_tests/android_views/lib/motion_event_diff.dart b/dev/integration_tests/android_views/lib/motion_event_diff.dart index defe5d1cd39..e806cdb72f6 100644 --- a/dev/integration_tests/android_views/lib/motion_event_diff.dart +++ b/dev/integration_tests/android_views/lib/motion_event_diff.dart @@ -122,11 +122,7 @@ void diffPointerCoordsList(StringBuffer diffBuffer, void diffPointerCoords(Map expected, Map actual, int pointerIdx, StringBuffer diffBuffer) { - diffMaps(expected, actual, diffBuffer, - messagePrefix: '[pointerCoord $pointerIdx] ', - excludeKeys: [ - 'size', // Currently the framework doesn't get the size from the engine. - ]); + diffMaps(expected, actual, diffBuffer, messagePrefix: '[pointerCoord $pointerIdx] '); } void diffMaps( diff --git a/packages/flutter/lib/src/gestures/converter.dart b/packages/flutter/lib/src/gestures/converter.dart index 0ca4ea6d9a4..f0aa36983b3 100644 --- a/packages/flutter/lib/src/gestures/converter.dart +++ b/packages/flutter/lib/src/gestures/converter.dart @@ -127,6 +127,7 @@ class PointerEventConverter { pressureMax: datum.pressureMax, distance: datum.distance, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -176,6 +177,7 @@ class PointerEventConverter { pressureMax: datum.pressureMax, distance: datum.distance, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -200,6 +202,7 @@ class PointerEventConverter { pressureMin: datum.pressureMin, pressureMax: datum.pressureMax, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -230,6 +233,7 @@ class PointerEventConverter { pressureMin: datum.pressureMin, pressureMax: datum.pressureMax, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -264,6 +268,7 @@ class PointerEventConverter { pressureMin: datum.pressureMin, pressureMax: datum.pressureMax, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -290,6 +295,7 @@ class PointerEventConverter { pressureMax: datum.pressureMax, distance: datum.distance, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -310,6 +316,7 @@ class PointerEventConverter { pressureMax: datum.pressureMax, distance: datum.distance, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -335,6 +342,7 @@ class PointerEventConverter { pressureMax: datum.pressureMax, distance: datum.distance, distanceMax: datum.distanceMax, + size: datum.size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, diff --git a/packages/flutter/lib/src/gestures/events.dart b/packages/flutter/lib/src/gestures/events.dart index 5d31de755ca..df832589305 100644 --- a/packages/flutter/lib/src/gestures/events.dart +++ b/packages/flutter/lib/src/gestures/events.dart @@ -108,6 +108,7 @@ abstract class PointerEvent { this.pressureMax = 1.0, this.distance = 0.0, this.distanceMax = 0.0, + this.size = 0.0, this.radiusMajor = 0.0, this.radiusMinor = 0.0, this.radiusMin = 0.0, @@ -183,6 +184,14 @@ abstract class PointerEvent { /// 0.0. final double distanceMax; + /// The area of the screen being pressed, scaled to a value between 0 and 1. + /// The value of size can be used to determine fat touch events. This value + /// is only set on Android, and is a device specific approximation within + /// the range of detectable values. So, for example, the value of 0.1 could + /// mean a touch with the tip of the finger, 0.2 a touch with full finger, + /// and 0.3 the full palm. + final double size; + /// The radius of the contact ellipse along the major axis, in logical pixels. final double radiusMajor; @@ -269,6 +278,7 @@ abstract class PointerEvent { 'distance: $distance, ' 'distanceMin: $distanceMin, ' 'distanceMax: $distanceMax, ' + 'size: $size, ' 'radiusMajor: $radiusMajor, ' 'radiusMinor: $radiusMinor, ' 'radiusMin: $radiusMin, ' @@ -374,6 +384,7 @@ class PointerHoverEvent extends PointerEvent { double pressureMax = 1.0, double distance = 0.0, double distanceMax = 0.0, + double size = 0.0, double radiusMajor = 0.0, double radiusMinor = 0.0, double radiusMin = 0.0, @@ -394,6 +405,7 @@ class PointerHoverEvent extends PointerEvent { pressureMax: pressureMax, distance: distance, distanceMax: distanceMax, + size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -421,6 +433,7 @@ class PointerDownEvent extends PointerEvent { double pressureMin = 1.0, double pressureMax = 1.0, double distanceMax = 0.0, + double size = 0.0, double radiusMajor = 0.0, double radiusMinor = 0.0, double radiusMin = 0.0, @@ -441,6 +454,7 @@ class PointerDownEvent extends PointerEvent { pressureMax: pressureMax, distance: 0.0, distanceMax: distanceMax, + size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -474,6 +488,7 @@ class PointerMoveEvent extends PointerEvent { double pressureMin = 1.0, double pressureMax = 1.0, double distanceMax = 0.0, + double size = 0.0, double radiusMajor = 0.0, double radiusMinor = 0.0, double radiusMin = 0.0, @@ -496,6 +511,7 @@ class PointerMoveEvent extends PointerEvent { pressureMax: pressureMax, distance: 0.0, distanceMax: distanceMax, + size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -524,6 +540,7 @@ class PointerUpEvent extends PointerEvent { double pressureMax = 1.0, double distance = 0.0, double distanceMax = 0.0, + double size = 0.0, double radiusMajor = 0.0, double radiusMinor = 0.0, double radiusMin = 0.0, @@ -544,6 +561,7 @@ class PointerUpEvent extends PointerEvent { pressureMax: pressureMax, distance: distance, distanceMax: distanceMax, + size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, @@ -570,6 +588,7 @@ class PointerCancelEvent extends PointerEvent { double pressureMax = 1.0, double distance = 0.0, double distanceMax = 0.0, + double size = 0.0, double radiusMajor = 0.0, double radiusMinor = 0.0, double radiusMin = 0.0, @@ -589,6 +608,7 @@ class PointerCancelEvent extends PointerEvent { pressureMax: pressureMax, distance: distance, distanceMax: distanceMax, + size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, radiusMin: radiusMin, diff --git a/packages/flutter/lib/src/rendering/platform_view.dart b/packages/flutter/lib/src/rendering/platform_view.dart index 93f6e12e1e3..1734c01f92e 100644 --- a/packages/flutter/lib/src/rendering/platform_view.dart +++ b/packages/flutter/lib/src/rendering/platform_view.dart @@ -422,12 +422,7 @@ class _MotionEventsDispatcher { return AndroidPointerCoords( orientation: event.orientation, pressure: event.pressure, - // Currently the engine omits the pointer size, for now I'm fixing this to 0.33 which is roughly - // what I typically see on Android. - // - // TODO(amirh): Use the original pointer's size. - // https://github.com/flutter/flutter/issues/20300 - size: 0.333, + size: event.size, toolMajor: event.radiusMajor, toolMinor: event.radiusMinor, touchMajor: event.radiusMajor,