Unverified Commit 2ab50994 authored by Kaushik Iska's avatar Kaushik Iska Committed by GitHub

Add `embedderId` to `PointerEvent` (#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 d0d6a4c2362d2ed478006bb3b01c34c0e96033b4
parent f111a823
f22ac9da9c78215a3caf038b2205444dc2ee3d0d d0d6a4c2362d2ed478006bb3b01c34c0e96033b4
...@@ -219,6 +219,7 @@ class WindowManagerBodyState extends State<WindowManagerBody> { ...@@ -219,6 +219,7 @@ class WindowManagerBodyState extends State<WindowManagerBody> {
eventTime: 723657071, eventTime: 723657071,
action: 0, action: 0,
xPrecision: 1.0, xPrecision: 1.0,
motionEventId: 1,
), ),
AndroidMotionEvent( AndroidMotionEvent(
downTime: 723657071, downTime: 723657071,
...@@ -252,6 +253,7 @@ class WindowManagerBodyState extends State<WindowManagerBody> { ...@@ -252,6 +253,7 @@ class WindowManagerBodyState extends State<WindowManagerBody> {
edgeFlags: 0, edgeFlags: 0,
source: 4098, source: 4098,
flags: 0, flags: 0,
motionEventId: 2,
), ),
]; ];
} }
...@@ -74,6 +74,7 @@ class PointerEventConverter { ...@@ -74,6 +74,7 @@ class PointerEventConverter {
radiusMax: radiusMax, radiusMax: radiusMax,
orientation: datum.orientation, orientation: datum.orientation,
tilt: datum.tilt, tilt: datum.tilt,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerChange.hover: case ui.PointerChange.hover:
...@@ -97,6 +98,7 @@ class PointerEventConverter { ...@@ -97,6 +98,7 @@ class PointerEventConverter {
orientation: datum.orientation, orientation: datum.orientation,
tilt: datum.tilt, tilt: datum.tilt,
synthesized: datum.synthesized, synthesized: datum.synthesized,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerChange.down: case ui.PointerChange.down:
...@@ -119,6 +121,7 @@ class PointerEventConverter { ...@@ -119,6 +121,7 @@ class PointerEventConverter {
radiusMax: radiusMax, radiusMax: radiusMax,
orientation: datum.orientation, orientation: datum.orientation,
tilt: datum.tilt, tilt: datum.tilt,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerChange.move: case ui.PointerChange.move:
...@@ -144,6 +147,7 @@ class PointerEventConverter { ...@@ -144,6 +147,7 @@ class PointerEventConverter {
tilt: datum.tilt, tilt: datum.tilt,
platformData: datum.platformData, platformData: datum.platformData,
synthesized: datum.synthesized, synthesized: datum.synthesized,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerChange.up: case ui.PointerChange.up:
...@@ -167,6 +171,7 @@ class PointerEventConverter { ...@@ -167,6 +171,7 @@ class PointerEventConverter {
radiusMax: radiusMax, radiusMax: radiusMax,
orientation: datum.orientation, orientation: datum.orientation,
tilt: datum.tilt, tilt: datum.tilt,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerChange.cancel: case ui.PointerChange.cancel:
...@@ -189,6 +194,7 @@ class PointerEventConverter { ...@@ -189,6 +194,7 @@ class PointerEventConverter {
radiusMax: radiusMax, radiusMax: radiusMax,
orientation: datum.orientation, orientation: datum.orientation,
tilt: datum.tilt, tilt: datum.tilt,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerChange.remove: case ui.PointerChange.remove:
...@@ -203,6 +209,7 @@ class PointerEventConverter { ...@@ -203,6 +209,7 @@ class PointerEventConverter {
distanceMax: datum.distanceMax, distanceMax: datum.distanceMax,
radiusMin: radiusMin, radiusMin: radiusMin,
radiusMax: radiusMax, radiusMax: radiusMax,
embedderId: datum.embedderId,
); );
break; break;
} }
...@@ -217,6 +224,7 @@ class PointerEventConverter { ...@@ -217,6 +224,7 @@ class PointerEventConverter {
device: datum.device, device: datum.device,
position: position, position: position,
scrollDelta: scrollDelta, scrollDelta: scrollDelta,
embedderId: datum.embedderId,
); );
break; break;
case ui.PointerSignalKind.none: case ui.PointerSignalKind.none:
......
...@@ -202,6 +202,7 @@ abstract class PointerEvent with Diagnosticable { ...@@ -202,6 +202,7 @@ abstract class PointerEvent with Diagnosticable {
/// Abstract const constructor. This constructor enables subclasses to provide /// Abstract const constructor. This constructor enables subclasses to provide
/// const constructors so that they can be used in const expressions. /// const constructors so that they can be used in const expressions.
const PointerEvent({ const PointerEvent({
this.embedderId = 0,
this.timeStamp = Duration.zero, this.timeStamp = Duration.zero,
this.pointer = 0, this.pointer = 0,
this.kind = PointerDeviceKind.touch, this.kind = PointerDeviceKind.touch,
...@@ -232,6 +233,14 @@ abstract class PointerEvent with Diagnosticable { ...@@ -232,6 +233,14 @@ abstract class PointerEvent with Diagnosticable {
}) : localPosition = localPosition ?? position, }) : localPosition = localPosition ?? position,
localDelta = localDelta ?? delta; localDelta = localDelta ?? delta;
/// Unique identifier that ties the [PointerEvent] to the embedder event that created it.
///
/// No two pointer events can have the same [embedderId] on platforms that set it.
/// This is different from [pointer] identifier - used for hit-testing,
/// whereas [embedderId] is used to identify the platform event.
///
/// On Android this is ID of the underlying [MotionEvent](https://developer.android.com/reference/android/view/MotionEvent).
final int embedderId;
/// Time of event dispatch, relative to an arbitrary timeline. /// Time of event dispatch, relative to an arbitrary timeline.
final Duration timeStamp; final Duration timeStamp;
...@@ -504,6 +513,7 @@ abstract class PointerEvent with Diagnosticable { ...@@ -504,6 +513,7 @@ abstract class PointerEvent with Diagnosticable {
properties.add(IntProperty('platformData', platformData, defaultValue: 0, level: DiagnosticLevel.debug)); properties.add(IntProperty('platformData', platformData, defaultValue: 0, level: DiagnosticLevel.debug));
properties.add(FlagProperty('obscured', value: obscured, ifTrue: 'obscured', level: DiagnosticLevel.debug)); properties.add(FlagProperty('obscured', value: obscured, ifTrue: 'obscured', level: DiagnosticLevel.debug));
properties.add(FlagProperty('synthesized', value: synthesized, ifTrue: 'synthesized', level: DiagnosticLevel.debug)); properties.add(FlagProperty('synthesized', value: synthesized, ifTrue: 'synthesized', level: DiagnosticLevel.debug));
properties.add(IntProperty('embedderId', embedderId, defaultValue: 0, level: DiagnosticLevel.debug));
} }
/// Returns a complete textual description of this event. /// Returns a complete textual description of this event.
...@@ -592,6 +602,7 @@ class PointerAddedEvent extends PointerEvent { ...@@ -592,6 +602,7 @@ class PointerAddedEvent extends PointerEvent {
double tilt = 0.0, double tilt = 0.0,
Matrix4 transform, Matrix4 transform,
PointerAddedEvent original, PointerAddedEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
kind: kind, kind: kind,
...@@ -610,6 +621,7 @@ class PointerAddedEvent extends PointerEvent { ...@@ -610,6 +621,7 @@ class PointerAddedEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -634,6 +646,7 @@ class PointerAddedEvent extends PointerEvent { ...@@ -634,6 +646,7 @@ class PointerAddedEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original as PointerAddedEvent ?? this, original: original as PointerAddedEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -660,6 +673,7 @@ class PointerRemovedEvent extends PointerEvent { ...@@ -660,6 +673,7 @@ class PointerRemovedEvent extends PointerEvent {
double radiusMax = 0.0, double radiusMax = 0.0,
Matrix4 transform, Matrix4 transform,
PointerRemovedEvent original, PointerRemovedEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
kind: kind, kind: kind,
...@@ -675,6 +689,7 @@ class PointerRemovedEvent extends PointerEvent { ...@@ -675,6 +689,7 @@ class PointerRemovedEvent extends PointerEvent {
radiusMax: radiusMax, radiusMax: radiusMax,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -696,6 +711,7 @@ class PointerRemovedEvent extends PointerEvent { ...@@ -696,6 +711,7 @@ class PointerRemovedEvent extends PointerEvent {
radiusMax: radiusMax, radiusMax: radiusMax,
transform: transform, transform: transform,
original: original as PointerRemovedEvent ?? this, original: original as PointerRemovedEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -738,6 +754,7 @@ class PointerHoverEvent extends PointerEvent { ...@@ -738,6 +754,7 @@ class PointerHoverEvent extends PointerEvent {
bool synthesized = false, bool synthesized = false,
Matrix4 transform, Matrix4 transform,
PointerHoverEvent original, PointerHoverEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
kind: kind, kind: kind,
...@@ -764,6 +781,7 @@ class PointerHoverEvent extends PointerEvent { ...@@ -764,6 +781,7 @@ class PointerHoverEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -801,6 +819,7 @@ class PointerHoverEvent extends PointerEvent { ...@@ -801,6 +819,7 @@ class PointerHoverEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original as PointerHoverEvent ?? this, original: original as PointerHoverEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -844,6 +863,7 @@ class PointerEnterEvent extends PointerEvent { ...@@ -844,6 +863,7 @@ class PointerEnterEvent extends PointerEvent {
bool synthesized = false, bool synthesized = false,
Matrix4 transform, Matrix4 transform,
PointerEnterEvent original, PointerEnterEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
kind: kind, kind: kind,
...@@ -870,6 +890,7 @@ class PointerEnterEvent extends PointerEvent { ...@@ -870,6 +890,7 @@ class PointerEnterEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
/// Creates an enter event from a [PointerHoverEvent]. /// Creates an enter event from a [PointerHoverEvent].
...@@ -947,6 +968,7 @@ class PointerEnterEvent extends PointerEvent { ...@@ -947,6 +968,7 @@ class PointerEnterEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original as PointerEnterEvent ?? this, original: original as PointerEnterEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -990,6 +1012,7 @@ class PointerExitEvent extends PointerEvent { ...@@ -990,6 +1012,7 @@ class PointerExitEvent extends PointerEvent {
bool synthesized = false, bool synthesized = false,
Matrix4 transform, Matrix4 transform,
PointerExitEvent original, PointerExitEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
kind: kind, kind: kind,
...@@ -1016,6 +1039,7 @@ class PointerExitEvent extends PointerEvent { ...@@ -1016,6 +1039,7 @@ class PointerExitEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
/// Creates an exit event from a [PointerHoverEvent]. /// Creates an exit event from a [PointerHoverEvent].
...@@ -1093,6 +1117,7 @@ class PointerExitEvent extends PointerEvent { ...@@ -1093,6 +1117,7 @@ class PointerExitEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original as PointerExitEvent ?? this, original: original as PointerExitEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -1124,6 +1149,7 @@ class PointerDownEvent extends PointerEvent { ...@@ -1124,6 +1149,7 @@ class PointerDownEvent extends PointerEvent {
double tilt = 0.0, double tilt = 0.0,
Matrix4 transform, Matrix4 transform,
PointerDownEvent original, PointerDownEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
pointer: pointer, pointer: pointer,
...@@ -1148,6 +1174,7 @@ class PointerDownEvent extends PointerEvent { ...@@ -1148,6 +1174,7 @@ class PointerDownEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -1177,6 +1204,7 @@ class PointerDownEvent extends PointerEvent { ...@@ -1177,6 +1204,7 @@ class PointerDownEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original as PointerDownEvent ?? this, original: original as PointerDownEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -1218,6 +1246,7 @@ class PointerMoveEvent extends PointerEvent { ...@@ -1218,6 +1246,7 @@ class PointerMoveEvent extends PointerEvent {
bool synthesized = false, bool synthesized = false,
Matrix4 transform, Matrix4 transform,
PointerMoveEvent original, PointerMoveEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
pointer: pointer, pointer: pointer,
...@@ -1246,6 +1275,7 @@ class PointerMoveEvent extends PointerEvent { ...@@ -1246,6 +1275,7 @@ class PointerMoveEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -1286,6 +1316,7 @@ class PointerMoveEvent extends PointerEvent { ...@@ -1286,6 +1316,7 @@ class PointerMoveEvent extends PointerEvent {
synthesized: synthesized, synthesized: synthesized,
transform: transform, transform: transform,
original: original as PointerMoveEvent ?? this, original: original as PointerMoveEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -1320,6 +1351,7 @@ class PointerUpEvent extends PointerEvent { ...@@ -1320,6 +1351,7 @@ class PointerUpEvent extends PointerEvent {
double tilt = 0.0, double tilt = 0.0,
Matrix4 transform, Matrix4 transform,
PointerUpEvent original, PointerUpEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
pointer: pointer, pointer: pointer,
...@@ -1344,6 +1376,7 @@ class PointerUpEvent extends PointerEvent { ...@@ -1344,6 +1376,7 @@ class PointerUpEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -1374,6 +1407,7 @@ class PointerUpEvent extends PointerEvent { ...@@ -1374,6 +1407,7 @@ class PointerUpEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original as PointerUpEvent ?? this, original: original as PointerUpEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -1395,6 +1429,7 @@ abstract class PointerSignalEvent extends PointerEvent { ...@@ -1395,6 +1429,7 @@ abstract class PointerSignalEvent extends PointerEvent {
Offset localPosition, Offset localPosition,
Matrix4 transform, Matrix4 transform,
PointerSignalEvent original, PointerSignalEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
pointer: pointer, pointer: pointer,
...@@ -1404,6 +1439,7 @@ abstract class PointerSignalEvent extends PointerEvent { ...@@ -1404,6 +1439,7 @@ abstract class PointerSignalEvent extends PointerEvent {
localPosition: localPosition, localPosition: localPosition,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
} }
...@@ -1424,6 +1460,7 @@ class PointerScrollEvent extends PointerSignalEvent { ...@@ -1424,6 +1460,7 @@ class PointerScrollEvent extends PointerSignalEvent {
this.scrollDelta = Offset.zero, this.scrollDelta = Offset.zero,
Matrix4 transform, Matrix4 transform,
PointerScrollEvent original, PointerScrollEvent original,
int embedderId = 0,
}) : assert(timeStamp != null), }) : assert(timeStamp != null),
assert(kind != null), assert(kind != null),
assert(device != null), assert(device != null),
...@@ -1437,6 +1474,7 @@ class PointerScrollEvent extends PointerSignalEvent { ...@@ -1437,6 +1474,7 @@ class PointerScrollEvent extends PointerSignalEvent {
localPosition: localPosition, localPosition: localPosition,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
/// The amount to scroll, in logical pixels. /// The amount to scroll, in logical pixels.
...@@ -1456,6 +1494,7 @@ class PointerScrollEvent extends PointerSignalEvent { ...@@ -1456,6 +1494,7 @@ class PointerScrollEvent extends PointerSignalEvent {
scrollDelta: scrollDelta, scrollDelta: scrollDelta,
transform: transform, transform: transform,
original: original as PointerScrollEvent ?? this, original: original as PointerScrollEvent ?? this,
embedderId: embedderId,
); );
} }
...@@ -1493,6 +1532,7 @@ class PointerCancelEvent extends PointerEvent { ...@@ -1493,6 +1532,7 @@ class PointerCancelEvent extends PointerEvent {
double tilt = 0.0, double tilt = 0.0,
Matrix4 transform, Matrix4 transform,
PointerCancelEvent original, PointerCancelEvent original,
int embedderId = 0,
}) : super( }) : super(
timeStamp: timeStamp, timeStamp: timeStamp,
pointer: pointer, pointer: pointer,
...@@ -1517,6 +1557,7 @@ class PointerCancelEvent extends PointerEvent { ...@@ -1517,6 +1557,7 @@ class PointerCancelEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original, original: original,
embedderId: embedderId,
); );
@override @override
...@@ -1546,6 +1587,7 @@ class PointerCancelEvent extends PointerEvent { ...@@ -1546,6 +1587,7 @@ class PointerCancelEvent extends PointerEvent {
tilt: tilt, tilt: tilt,
transform: transform, transform: transform,
original: original as PointerCancelEvent ?? this, original: original as PointerCancelEvent ?? this,
embedderId: embedderId,
); );
} }
} }
...@@ -368,6 +368,7 @@ class AndroidMotionEvent { ...@@ -368,6 +368,7 @@ class AndroidMotionEvent {
@required this.edgeFlags, @required this.edgeFlags,
@required this.source, @required this.source,
@required this.flags, @required this.flags,
@required this.motionEventId,
}) : assert(downTime != null), }) : assert(downTime != null),
assert(eventTime != null), assert(eventTime != null),
assert(action != null), assert(action != null),
...@@ -449,6 +450,9 @@ class AndroidMotionEvent { ...@@ -449,6 +450,9 @@ class AndroidMotionEvent {
/// See Android's [MotionEvent#getFlags](https://developer.android.com/reference/android/view/MotionEvent.html#getFlags()). /// See Android's [MotionEvent#getFlags](https://developer.android.com/reference/android/view/MotionEvent.html#getFlags()).
final int flags; final int flags;
/// Used to identify this [MotionEvent](https://developer.android.com/reference/android/view/MotionEvent.html) uniquely in the Flutter Engine.
final int motionEventId;
List<dynamic> _asList(int viewId) { List<dynamic> _asList(int viewId) {
return <dynamic>[ return <dynamic>[
viewId, viewId,
...@@ -466,6 +470,7 @@ class AndroidMotionEvent { ...@@ -466,6 +470,7 @@ class AndroidMotionEvent {
edgeFlags, edgeFlags,
source, source,
flags, flags,
motionEventId,
]; ];
} }
...@@ -602,6 +607,7 @@ class _AndroidMotionEventConverter { ...@@ -602,6 +607,7 @@ class _AndroidMotionEventConverter {
edgeFlags: 0, edgeFlags: 0,
source: 0, source: 0,
flags: 0, flags: 0,
motionEventId: event.embedderId,
); );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment