34 Commits

Author SHA1 Message Date
Michael Goderbauer
1621baafc7
Introduce separate HitTestResults for Box and Sliver (#31894) 2019-05-09 10:00:01 +02:00
Chris Yang
3b3f6c7a04
Include platformViewId in semantics tree for iOS (#29304)
Include the platformViewId of PlatformViews in the semantics tree. The accessibility bridge in the engine can use this id to steal the semantics nodes from the actual platform view and stick them into Flutter's semantics tree.

It is the iOS PlatformView counter part of https://github.com/flutter/flutter/pull/28953. It reverts the change in 5b5d6e89ec and 03fd797eb8.

https://github.com/flutter/flutter/issues/29302
2019-03-27 13:56:23 -07:00
Alexandre Ardhuin
bfa1d25bf9
some formatting of map, parameters and spaces (#29760) 2019-03-23 00:02:21 +01:00
Alexandre Ardhuin
a6af422874
some spaces formatting (#29452)
* some space formattings

* always use blocks in if-else if a block is used

* format spaces in for and while

* allow multiline if conditions

* fix missing space
2019-03-20 23:23:31 +01:00
Michael Goderbauer
816ae4b193
Include platformViewId in semantics tree (#28953) 2019-03-12 07:44:39 -07:00
Alexandre Ardhuin
a0d1f93b07
fix block formatting (#29051) 2019-03-09 09:03:11 +01:00
Phil Quitslund
802eca29d2
set literal conversions (#27811) 2019-03-06 11:05:16 -08:00
Amir Hardon
5099701f88
Make RenderUiKitView reject absorbed touch events (#28666)
When a touch event that is in the bounds of a RenderUiKitView is absorbed by another render object,
the RenderUiKitView's handleEvent is not called for that object. On the platform side, the touch event hits the FlutterTouchInterceptingView which is waiting for a framework decision that never arrived on whether to reject or accept the gesture.

This change fixes the issue by having RenderUiKitView register a global PointerRoute, that is used to reject absorbed touch events.
2019-03-04 14:26:50 -08:00
Mouad Debbar
b94bf87c70
Text selection via mouse (#28290) 2019-03-01 13:57:10 -08:00
Alexandre Ardhuin
387f885481
Add missing trailing commas (#28673)
* add trailing commas on list/map/parameters

* add trailing commas on Invocation with nb of arg>1

* add commas for widget containing widgets

* add trailing commas if instantiation contains trailing comma

* revert bad change
2019-03-01 08:17:55 +01:00
Amir Hardon
cbff7ca43c
Cleanup temporary catchError. (#26454)
This was added to make sure we don't crash before the engine is rolled
with the system channel API addition and is no longer needed.
2019-01-15 10:13:48 -08:00
Amir Hardon
50f9b88395
Actively reject UiKitView gestures. (#25792)
flutter/engine#7307 changes the engine side of embedded UIView to only
reject gestures when the framework sends a `rejectGesture` message, so
that gesture resolution can done after a touch sequence has ended (see
PR description for flutter/engine#7307 for more details).

This change makes the framework send a `rejectGesture` message to the
engine when a UiKitView rejects a gesture.

I'm planning to land this PR before the engine side change, so right now
it swallows the exception thrown if there is no engine implementation
for `rejectGesture` (which keeps us with the current behavior). After
this change lands I'll land the engine PR, and then clean up the part
that swallows the exception.
2018-12-26 19:34:53 -08:00
Alexandre Ardhuin
e41f1463cd
make see also sections uniform (#25513) 2018-12-18 21:45:20 +01:00
Amir Hardon
563ceac8d4
Remove the WIP comment for UiKitView. (#24170)
Adds a note mentioning that this is still a release preview.
2018-11-09 16:14:44 -08:00
Amir Hardon
dc4bf652cc
Make UiKitViews participate in gesture arenas (#24027) 2018-11-08 12:11:57 -08:00
Stanislav Baranov
ba4cf054bd
Propagate positions of secondary pointers in UP events on Android (#23797) 2018-11-05 12:43:00 -08:00
Amir Hardon
8de86d412e
Re-land "Initial framework support for iOS platform views." (#23781)
Re-landing #23412 with a fix to the PlatformLayer's addToScene signature.

#23412 was broken by the change to Layer done in #23434.

It seemed green as the presubmits were done before #23434 was landed, and when #23412 landed it broke the build.

Reverts #23779
2018-10-31 15:07:09 -07:00
Amir Hardon
b20e7a2671
Revert "Initial framework support for iOS platform views. (#23412)" (#23779)
This reverts commit 67ffe1c2cbc15243e6535e7f70c0e637dc9125f1.
2018-10-31 07:06:05 -07:00
Amir Hardon
67ffe1c2cb
Initial framework support for iOS platform views. (#23412)
This PR adds the full framework stack (layer->render object->widget, and
service) for embedding iOS views with minimal functionality.

I allowed myself to throw the entire framework stack in one PR since we're mostly
mirroring the structure we already established for embedded Android views, so this PR
is a little bigger than usual. I'm happy to break it down to the
different pieces of the stack if reviewers prefer.

Specifically this PR adds:
* A UiKitView widget for embedding a UIView in the widget tree.
* A RenderUiKitView which is the render object for showing a
  UIView.
* A PlatformViewLayer which denotes the position of a UIView in the
  layer tree.
* The iOS platform_views system channel client code in services/platform_views.dart
* Splits the fake platform views controller to an Android and iOS
  controllers.

TBD in following PRs:
* Plumb the layout direction all the way to the platform view (currently
  there is still no engine support for it).
* Integrate with gesture arenas (engine support is still missing as
  well).
2018-10-31 06:01:28 -07:00
Stanislav Baranov
c7b10a2d80
Propagate pointer size from Android MotionEvent. (#23536) 2018-10-26 11:48:00 -07:00
Alexandre Ardhuin
0fb84e96c7
Prefer void to null (#22977)
* Future<void> main

* Future<void>.delayed

* prefer_void_to_Null

* address review comments
2018-10-16 22:03:06 +02:00
Amir Hardon
707eaf5edf
Make AndroidView take gesture recognizer factories. (#21657)
Before this PR AndroidView's gestureRecognizers field was a list of
gesture recognizers. This was problematic as when the widget was rebuilt
with the same gesture recognizer instances we would try to re-join the
recognizers to a gesture arena team and crash (as a OneSeqeunceGestureRecognizer
team can only be set once).

With this change, we instead take a set of factories.
This allows AndroidView to create the gesture recognizers just before
adding them to the team, and thus be sure that they are only added once to a
team.

The factories are identified by the type of the object they create, this
allows AndroidView to know when it is given an equivalent set of gesture
recognizer factories, and do nothing in that case.
2018-10-15 21:30:40 -07:00
Alexandre Ardhuin
f62afdcf57
add missing type parameter on methods (#22096) 2018-10-01 21:29:08 +02:00
Alexandre Ardhuin
a07d3719a1
enable lint prefer_generic_function_type_aliases (#21680) 2018-09-14 21:06:19 +02:00
Alexandre Ardhuin
d927c93310
Unnecessary new (#20138)
* enable lint unnecessary_new

* fix tests

* fix tests

* fix tests
2018-09-12 08:29:29 +02:00
Amir Hardon
bae44b29df
Add a note about the Android API level requirement for AndroidView. (#21386) 2018-09-05 11:33:19 -07:00
Amir Hardon
4aaa5dfe31
Don't reject the gesture after all pointers are up on AndroidView. (#21295)
This was a bug, when e.g a LongPressGestureRecognizer was in the gesture
arena, the android view gesture team may not yet win the arena when the
last pointer was up. This change allows AndroidView to win the gesture
even after all pointers are up.
2018-08-31 16:32:21 -07:00
Amir Hardon
c5b7766cbb
Re-land "Make AndroidView participate in gesture arenas." (#21097)
This re-lands commit c594696.

The original PR was breaking the integration test as while the
gesture was active the AndroidView's parent widget got rebuilt which
disposed the _AndroidViewGestureRecognizer and dropped pointer events
from that point on.

This change adds a unit test that reproduces the failure case, and
fixes it by not rebuilding the _AndroidViewGestureRecognizer if the
list of gesture recognizers did not change.
2018-08-28 08:52:46 -07:00
Michael Goderbauer
f88d2d9c12
Revert 20917 platform view arena (#21086)
This reverts commit c594696f0626e32dcd83d2a7d8c479460d475374.
2018-08-27 17:36:40 -07:00
amirh
c594696f06
Make AndroidView participate in gesture arenas. (#20917)
Pointer events are dispatched to the Android view only if it won
Flutter's gesture arena for the pointer.
Specific gestures that should be dispatched to the android view can be
specified with the gestureRecognizers parameter.
2018-08-27 15:07:19 -07:00
amirh
1ba16d55f3
Don't size Android views to (0,0) (#20956)
Virtual displays must have a non zero size. This was causing a crash:
https://github.com/flutter/flutter/issues/20456
2018-08-23 12:29:29 -07:00
amirh
b7a6c169c9
Improve AndroidView resize jank. (#20284)
Resizing an AndroidView happens asynchronously (as it requires thread
hopping from the ui thread to the platform thread).
While waiting for the resize to complete the framework does exactly when
the embedded view has been resized. This leads to pretty bad jank as the
framework might paint the embedded view with a wrong size.

We're working around this by freezing the texture frame while resizing
until we are sure that the next frame has the new size. This is how it
looks with the workaround:

This is how it looks before and after the workaround:

Before (janky) |  After (less janky)
:--------|---------:
![resize_before](https://user-images.githubusercontent.com/1024117/43669639-51bfd0ae-9739-11e8-8cbe-96e36f2460d2.gif) | ![resize_after](https://user-images.githubusercontent.com/1024117/43669647-62e885a6-9739-11e8-8aa4-beb74e979995.gif)

This depends on flutter/engine#5938. Additionaly right now the engine completes
the resize call immediately, a following PR will change it to complete
after a frame with the new size is ready.
2018-08-08 13:55:16 -07:00
Amir Hardon
ccaa06367b AndroidView touch support.
This PR adds 2 features to RenderAndroidView and AndroidView:

1. Hit testing behavior
Adds a `PlatformViewHitTestBehavior` which is similar to
`HitTestBehavior` without the `deferToChild` option (as platform views
don't have child render objects) and with a `transparent` option which
prevents it from forwarding any events to the Android view.

2. MotionEvent recomposing logic
FlutterView and the framework `converter.dart` are working together to
transform each Android MotionEvent object into one or more
`PointerEvent` objects.

This PR adds the reverse logic (in _MotionEventDispatcher which is used
by RenderAndroidView) which turns a stream of PointerEvent objects into
MotionEvent objects.

The correctness of the recomposing logic is tested in an integration
test which will land in a separate PR (the unit test PR is pretty big,
trying to keep as many bite-size PRs for reviewer's convenience)
2018-08-07 15:30:14 -07:00
amirh
debd50158e
Introduce an AndroidView widget and a RenderAndroidView render object. (#19565)
RenderAndroidView is responsible for sizing and displaying an embedded
Android view.
AndroidView is responsible for creating and disposing the Android view
and is using RenderAndroidView to display it.
2018-07-20 15:58:55 -07:00