Skip to content

Commit 2ab5099

Browse files
authored
Add embedderId to PointerEvent (flutter#60930)
This field is used to look-up the event in the platform that resuted a given `PointerEvent`. This is currently only used on Android, where the `embedderId` is set to be the `motionEventId` for a given `MotionEvent`. Roll engine to d0d6a4c
1 parent f111a82 commit 2ab5099

File tree

5 files changed

+59
-1
lines changed

5 files changed

+59
-1
lines changed

bin/internal/engine.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
f22ac9da9c78215a3caf038b2205444dc2ee3d0d
1+
d0d6a4c2362d2ed478006bb3b01c34c0e96033b4

dev/integration_tests/android_views/lib/wm_integrations.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ class WindowManagerBodyState extends State<WindowManagerBody> {
219219
eventTime: 723657071,
220220
action: 0,
221221
xPrecision: 1.0,
222+
motionEventId: 1,
222223
),
223224
AndroidMotionEvent(
224225
downTime: 723657071,
@@ -252,6 +253,7 @@ class WindowManagerBodyState extends State<WindowManagerBody> {
252253
edgeFlags: 0,
253254
source: 4098,
254255
flags: 0,
256+
motionEventId: 2,
255257
),
256258
];
257259
}

packages/flutter/lib/src/gestures/converter.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class PointerEventConverter {
7474
radiusMax: radiusMax,
7575
orientation: datum.orientation,
7676
tilt: datum.tilt,
77+
embedderId: datum.embedderId,
7778
);
7879
break;
7980
case ui.PointerChange.hover:
@@ -97,6 +98,7 @@ class PointerEventConverter {
9798
orientation: datum.orientation,
9899
tilt: datum.tilt,
99100
synthesized: datum.synthesized,
101+
embedderId: datum.embedderId,
100102
);
101103
break;
102104
case ui.PointerChange.down:
@@ -119,6 +121,7 @@ class PointerEventConverter {
119121
radiusMax: radiusMax,
120122
orientation: datum.orientation,
121123
tilt: datum.tilt,
124+
embedderId: datum.embedderId,
122125
);
123126
break;
124127
case ui.PointerChange.move:
@@ -144,6 +147,7 @@ class PointerEventConverter {
144147
tilt: datum.tilt,
145148
platformData: datum.platformData,
146149
synthesized: datum.synthesized,
150+
embedderId: datum.embedderId,
147151
);
148152
break;
149153
case ui.PointerChange.up:
@@ -167,6 +171,7 @@ class PointerEventConverter {
167171
radiusMax: radiusMax,
168172
orientation: datum.orientation,
169173
tilt: datum.tilt,
174+
embedderId: datum.embedderId,
170175
);
171176
break;
172177
case ui.PointerChange.cancel:
@@ -189,6 +194,7 @@ class PointerEventConverter {
189194
radiusMax: radiusMax,
190195
orientation: datum.orientation,
191196
tilt: datum.tilt,
197+
embedderId: datum.embedderId,
192198
);
193199
break;
194200
case ui.PointerChange.remove:
@@ -203,6 +209,7 @@ class PointerEventConverter {
203209
distanceMax: datum.distanceMax,
204210
radiusMin: radiusMin,
205211
radiusMax: radiusMax,
212+
embedderId: datum.embedderId,
206213
);
207214
break;
208215
}
@@ -217,6 +224,7 @@ class PointerEventConverter {
217224
device: datum.device,
218225
position: position,
219226
scrollDelta: scrollDelta,
227+
embedderId: datum.embedderId,
220228
);
221229
break;
222230
case ui.PointerSignalKind.none:

packages/flutter/lib/src/gestures/events.dart

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ abstract class PointerEvent with Diagnosticable {
202202
/// Abstract const constructor. This constructor enables subclasses to provide
203203
/// const constructors so that they can be used in const expressions.
204204
const PointerEvent({
205+
this.embedderId = 0,
205206
this.timeStamp = Duration.zero,
206207
this.pointer = 0,
207208
this.kind = PointerDeviceKind.touch,
@@ -232,6 +233,14 @@ abstract class PointerEvent with Diagnosticable {
232233
}) : localPosition = localPosition ?? position,
233234
localDelta = localDelta ?? delta;
234235

236+
/// Unique identifier that ties the [PointerEvent] to the embedder event that created it.
237+
///
238+
/// No two pointer events can have the same [embedderId] on platforms that set it.
239+
/// This is different from [pointer] identifier - used for hit-testing,
240+
/// whereas [embedderId] is used to identify the platform event.
241+
///
242+
/// On Android this is ID of the underlying [MotionEvent](https://developer.android.com/reference/android/view/MotionEvent).
243+
final int embedderId;
235244

236245
/// Time of event dispatch, relative to an arbitrary timeline.
237246
final Duration timeStamp;
@@ -504,6 +513,7 @@ abstract class PointerEvent with Diagnosticable {
504513
properties.add(IntProperty('platformData', platformData, defaultValue: 0, level: DiagnosticLevel.debug));
505514
properties.add(FlagProperty('obscured', value: obscured, ifTrue: 'obscured', level: DiagnosticLevel.debug));
506515
properties.add(FlagProperty('synthesized', value: synthesized, ifTrue: 'synthesized', level: DiagnosticLevel.debug));
516+
properties.add(IntProperty('embedderId', embedderId, defaultValue: 0, level: DiagnosticLevel.debug));
507517
}
508518

509519
/// Returns a complete textual description of this event.
@@ -592,6 +602,7 @@ class PointerAddedEvent extends PointerEvent {
592602
double tilt = 0.0,
593603
Matrix4 transform,
594604
PointerAddedEvent original,
605+
int embedderId = 0,
595606
}) : super(
596607
timeStamp: timeStamp,
597608
kind: kind,
@@ -610,6 +621,7 @@ class PointerAddedEvent extends PointerEvent {
610621
tilt: tilt,
611622
transform: transform,
612623
original: original,
624+
embedderId: embedderId,
613625
);
614626

615627
@override
@@ -634,6 +646,7 @@ class PointerAddedEvent extends PointerEvent {
634646
tilt: tilt,
635647
transform: transform,
636648
original: original as PointerAddedEvent ?? this,
649+
embedderId: embedderId,
637650
);
638651
}
639652
}
@@ -660,6 +673,7 @@ class PointerRemovedEvent extends PointerEvent {
660673
double radiusMax = 0.0,
661674
Matrix4 transform,
662675
PointerRemovedEvent original,
676+
int embedderId = 0,
663677
}) : super(
664678
timeStamp: timeStamp,
665679
kind: kind,
@@ -675,6 +689,7 @@ class PointerRemovedEvent extends PointerEvent {
675689
radiusMax: radiusMax,
676690
transform: transform,
677691
original: original,
692+
embedderId: embedderId,
678693
);
679694

680695
@override
@@ -696,6 +711,7 @@ class PointerRemovedEvent extends PointerEvent {
696711
radiusMax: radiusMax,
697712
transform: transform,
698713
original: original as PointerRemovedEvent ?? this,
714+
embedderId: embedderId,
699715
);
700716
}
701717
}
@@ -738,6 +754,7 @@ class PointerHoverEvent extends PointerEvent {
738754
bool synthesized = false,
739755
Matrix4 transform,
740756
PointerHoverEvent original,
757+
int embedderId = 0,
741758
}) : super(
742759
timeStamp: timeStamp,
743760
kind: kind,
@@ -764,6 +781,7 @@ class PointerHoverEvent extends PointerEvent {
764781
synthesized: synthesized,
765782
transform: transform,
766783
original: original,
784+
embedderId: embedderId,
767785
);
768786

769787
@override
@@ -801,6 +819,7 @@ class PointerHoverEvent extends PointerEvent {
801819
synthesized: synthesized,
802820
transform: transform,
803821
original: original as PointerHoverEvent ?? this,
822+
embedderId: embedderId,
804823
);
805824
}
806825
}
@@ -844,6 +863,7 @@ class PointerEnterEvent extends PointerEvent {
844863
bool synthesized = false,
845864
Matrix4 transform,
846865
PointerEnterEvent original,
866+
int embedderId = 0,
847867
}) : super(
848868
timeStamp: timeStamp,
849869
kind: kind,
@@ -870,6 +890,7 @@ class PointerEnterEvent extends PointerEvent {
870890
synthesized: synthesized,
871891
transform: transform,
872892
original: original,
893+
embedderId: embedderId,
873894
);
874895

875896
/// Creates an enter event from a [PointerHoverEvent].
@@ -947,6 +968,7 @@ class PointerEnterEvent extends PointerEvent {
947968
synthesized: synthesized,
948969
transform: transform,
949970
original: original as PointerEnterEvent ?? this,
971+
embedderId: embedderId,
950972
);
951973
}
952974
}
@@ -990,6 +1012,7 @@ class PointerExitEvent extends PointerEvent {
9901012
bool synthesized = false,
9911013
Matrix4 transform,
9921014
PointerExitEvent original,
1015+
int embedderId = 0,
9931016
}) : super(
9941017
timeStamp: timeStamp,
9951018
kind: kind,
@@ -1016,6 +1039,7 @@ class PointerExitEvent extends PointerEvent {
10161039
synthesized: synthesized,
10171040
transform: transform,
10181041
original: original,
1042+
embedderId: embedderId,
10191043
);
10201044

10211045
/// Creates an exit event from a [PointerHoverEvent].
@@ -1093,6 +1117,7 @@ class PointerExitEvent extends PointerEvent {
10931117
synthesized: synthesized,
10941118
transform: transform,
10951119
original: original as PointerExitEvent ?? this,
1120+
embedderId: embedderId,
10961121
);
10971122
}
10981123
}
@@ -1124,6 +1149,7 @@ class PointerDownEvent extends PointerEvent {
11241149
double tilt = 0.0,
11251150
Matrix4 transform,
11261151
PointerDownEvent original,
1152+
int embedderId = 0,
11271153
}) : super(
11281154
timeStamp: timeStamp,
11291155
pointer: pointer,
@@ -1148,6 +1174,7 @@ class PointerDownEvent extends PointerEvent {
11481174
tilt: tilt,
11491175
transform: transform,
11501176
original: original,
1177+
embedderId: embedderId,
11511178
);
11521179

11531180
@override
@@ -1177,6 +1204,7 @@ class PointerDownEvent extends PointerEvent {
11771204
tilt: tilt,
11781205
transform: transform,
11791206
original: original as PointerDownEvent ?? this,
1207+
embedderId: embedderId,
11801208
);
11811209
}
11821210
}
@@ -1218,6 +1246,7 @@ class PointerMoveEvent extends PointerEvent {
12181246
bool synthesized = false,
12191247
Matrix4 transform,
12201248
PointerMoveEvent original,
1249+
int embedderId = 0,
12211250
}) : super(
12221251
timeStamp: timeStamp,
12231252
pointer: pointer,
@@ -1246,6 +1275,7 @@ class PointerMoveEvent extends PointerEvent {
12461275
synthesized: synthesized,
12471276
transform: transform,
12481277
original: original,
1278+
embedderId: embedderId,
12491279
);
12501280

12511281
@override
@@ -1286,6 +1316,7 @@ class PointerMoveEvent extends PointerEvent {
12861316
synthesized: synthesized,
12871317
transform: transform,
12881318
original: original as PointerMoveEvent ?? this,
1319+
embedderId: embedderId,
12891320
);
12901321
}
12911322
}
@@ -1320,6 +1351,7 @@ class PointerUpEvent extends PointerEvent {
13201351
double tilt = 0.0,
13211352
Matrix4 transform,
13221353
PointerUpEvent original,
1354+
int embedderId = 0,
13231355
}) : super(
13241356
timeStamp: timeStamp,
13251357
pointer: pointer,
@@ -1344,6 +1376,7 @@ class PointerUpEvent extends PointerEvent {
13441376
tilt: tilt,
13451377
transform: transform,
13461378
original: original,
1379+
embedderId: embedderId,
13471380
);
13481381

13491382
@override
@@ -1374,6 +1407,7 @@ class PointerUpEvent extends PointerEvent {
13741407
tilt: tilt,
13751408
transform: transform,
13761409
original: original as PointerUpEvent ?? this,
1410+
embedderId: embedderId,
13771411
);
13781412
}
13791413
}
@@ -1395,6 +1429,7 @@ abstract class PointerSignalEvent extends PointerEvent {
13951429
Offset localPosition,
13961430
Matrix4 transform,
13971431
PointerSignalEvent original,
1432+
int embedderId = 0,
13981433
}) : super(
13991434
timeStamp: timeStamp,
14001435
pointer: pointer,
@@ -1404,6 +1439,7 @@ abstract class PointerSignalEvent extends PointerEvent {
14041439
localPosition: localPosition,
14051440
transform: transform,
14061441
original: original,
1442+
embedderId: embedderId,
14071443
);
14081444
}
14091445

@@ -1424,6 +1460,7 @@ class PointerScrollEvent extends PointerSignalEvent {
14241460
this.scrollDelta = Offset.zero,
14251461
Matrix4 transform,
14261462
PointerScrollEvent original,
1463+
int embedderId = 0,
14271464
}) : assert(timeStamp != null),
14281465
assert(kind != null),
14291466
assert(device != null),
@@ -1437,6 +1474,7 @@ class PointerScrollEvent extends PointerSignalEvent {
14371474
localPosition: localPosition,
14381475
transform: transform,
14391476
original: original,
1477+
embedderId: embedderId,
14401478
);
14411479

14421480
/// The amount to scroll, in logical pixels.
@@ -1456,6 +1494,7 @@ class PointerScrollEvent extends PointerSignalEvent {
14561494
scrollDelta: scrollDelta,
14571495
transform: transform,
14581496
original: original as PointerScrollEvent ?? this,
1497+
embedderId: embedderId,
14591498
);
14601499
}
14611500

@@ -1493,6 +1532,7 @@ class PointerCancelEvent extends PointerEvent {
14931532
double tilt = 0.0,
14941533
Matrix4 transform,
14951534
PointerCancelEvent original,
1535+
int embedderId = 0,
14961536
}) : super(
14971537
timeStamp: timeStamp,
14981538
pointer: pointer,
@@ -1517,6 +1557,7 @@ class PointerCancelEvent extends PointerEvent {
15171557
tilt: tilt,
15181558
transform: transform,
15191559
original: original,
1560+
embedderId: embedderId,
15201561
);
15211562

15221563
@override
@@ -1546,6 +1587,7 @@ class PointerCancelEvent extends PointerEvent {
15461587
tilt: tilt,
15471588
transform: transform,
15481589
original: original as PointerCancelEvent ?? this,
1590+
embedderId: embedderId,
15491591
);
15501592
}
15511593
}

0 commit comments

Comments
 (0)