Propagate pointer size from Android MotionEvent. (#23536)

diff --git a/bin/internal/engine.version b/bin/internal/engine.version
index 819f2f9..cdc3f4c 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 defe5d1..e806cdb 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 diffPointerCoords(Map<String, dynamic> expected,
     Map<String, dynamic> actual, int pointerIdx, StringBuffer diffBuffer) {
-  diffMaps(expected, actual, diffBuffer,
-      messagePrefix: '[pointerCoord $pointerIdx] ',
-      excludeKeys: <String>[
-        '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 0ca4ea6..f0aa369 100644
--- a/packages/flutter/lib/src/gestures/converter.dart
+++ b/packages/flutter/lib/src/gestures/converter.dart
@@ -127,6 +127,7 @@
             pressureMax: datum.pressureMax,
             distance: datum.distance,
             distanceMax: datum.distanceMax,
+            size: datum.size,
             radiusMajor: radiusMajor,
             radiusMinor: radiusMinor,
             radiusMin: radiusMin,
@@ -176,6 +177,7 @@
               pressureMax: datum.pressureMax,
               distance: datum.distance,
               distanceMax: datum.distanceMax,
+              size: datum.size,
               radiusMajor: radiusMajor,
               radiusMinor: radiusMinor,
               radiusMin: radiusMin,
@@ -200,6 +202,7 @@
             pressureMin: datum.pressureMin,
             pressureMax: datum.pressureMax,
             distanceMax: datum.distanceMax,
+            size: datum.size,
             radiusMajor: radiusMajor,
             radiusMinor: radiusMinor,
             radiusMin: radiusMin,
@@ -230,6 +233,7 @@
             pressureMin: datum.pressureMin,
             pressureMax: datum.pressureMax,
             distanceMax: datum.distanceMax,
+            size: datum.size,
             radiusMajor: radiusMajor,
             radiusMinor: radiusMinor,
             radiusMin: radiusMin,
@@ -264,6 +268,7 @@
               pressureMin: datum.pressureMin,
               pressureMax: datum.pressureMax,
               distanceMax: datum.distanceMax,
+              size: datum.size,
               radiusMajor: radiusMajor,
               radiusMinor: radiusMinor,
               radiusMin: radiusMin,
@@ -290,6 +295,7 @@
               pressureMax: datum.pressureMax,
               distance: datum.distance,
               distanceMax: datum.distanceMax,
+              size: datum.size,
               radiusMajor: radiusMajor,
               radiusMinor: radiusMinor,
               radiusMin: radiusMin,
@@ -310,6 +316,7 @@
               pressureMax: datum.pressureMax,
               distance: datum.distance,
               distanceMax: datum.distanceMax,
+              size: datum.size,
               radiusMajor: radiusMajor,
               radiusMinor: radiusMinor,
               radiusMin: radiusMin,
@@ -335,6 +342,7 @@
               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 5d31de7..df83258 100644
--- a/packages/flutter/lib/src/gestures/events.dart
+++ b/packages/flutter/lib/src/gestures/events.dart
@@ -108,6 +108,7 @@
     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 @@
   /// 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 @@
              'distance: $distance, '
              'distanceMin: $distanceMin, '
              'distanceMax: $distanceMax, '
+             'size: $size, '
              'radiusMajor: $radiusMajor, '
              'radiusMinor: $radiusMinor, '
              'radiusMin: $radiusMin, '
@@ -374,6 +384,7 @@
     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 @@
     pressureMax: pressureMax,
     distance: distance,
     distanceMax: distanceMax,
+    size: size,
     radiusMajor: radiusMajor,
     radiusMinor: radiusMinor,
     radiusMin: radiusMin,
@@ -421,6 +433,7 @@
     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 @@
     pressureMax: pressureMax,
     distance: 0.0,
     distanceMax: distanceMax,
+    size: size,
     radiusMajor: radiusMajor,
     radiusMinor: radiusMinor,
     radiusMin: radiusMin,
@@ -474,6 +488,7 @@
     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 @@
     pressureMax: pressureMax,
     distance: 0.0,
     distanceMax: distanceMax,
+    size: size,
     radiusMajor: radiusMajor,
     radiusMinor: radiusMinor,
     radiusMin: radiusMin,
@@ -524,6 +540,7 @@
     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 @@
     pressureMax: pressureMax,
     distance: distance,
     distanceMax: distanceMax,
+    size: size,
     radiusMajor: radiusMajor,
     radiusMinor: radiusMinor,
     radiusMin: radiusMin,
@@ -570,6 +588,7 @@
     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 @@
     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 93f6e12..1734c01 100644
--- a/packages/flutter/lib/src/rendering/platform_view.dart
+++ b/packages/flutter/lib/src/rendering/platform_view.dart
@@ -422,12 +422,7 @@
     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,