# Integration test for touch events on embedded Android views

This test verifies that the synthesized motion events that get to embedded
Android view are equal to the motion events that originally hit the FlutterView.

The test app's Android code listens to MotionEvents that get to FlutterView and
to an embedded Android view and sends them over a platform channel to the Dart
code where the events are matched.

This is what the app looks like:

![android_views test app](https://flutter.github.io/assets-for-api-docs/assets/readme-assets/android_views_test.png)

The blue part is the embedded Android view, because it is positioned at the top
left corner, the coordinate systems for FlutterView and for the embedded view's
virtual display has the same origin (this makes the MotionEvent comparison
easier as we don't need to translate the coordinates).

The app includes the following control buttons:
  * RECORD - Start listening for MotionEvents for 3 seconds, matched/unmatched events are
    displayed in the listview as they arrive.
  * CLEAR - Clears the events that were recorded so far.
  * SAVE - Saves the events that hit FlutterView to a file.
  * PLAY FILE - Send a list of events from a bundled asset file to FlutterView.

A recorded touch events sequence is bundled as an asset in the
assets_for_android_view package which lives in the goldens repository.

When running this test with `flutter drive` the record touch sequences is
replayed and the test asserts that the events that got to FlutterView are
equivalent to the ones that got to the embedded view.

