752 Commits

Author SHA1 Message Date
Amir Hardon
d6e19afcb5 Add an internal_nodes_canvas to PaintContext. (flutter/engine#6728)
When we visit a PlatformViewLayer during the paint traversal it replaces
the PaintContext's canvas with a new one that is painted ontop of the
embedded view.
We need to make sure that operations applied by parent layers are also
applied to the new canvas.

To achieve this we collect all the canvases in a SkNWayCanvas and use
this canvas by non leaf nodes. Leaf nodes still paint only to the "current"
canvas.

This PR moves the overlay canvas creation from the paint phase to the
preroll phase, collects them into a SkNWayCanvas and set it in
PaintContext.

To keep this PR focused, I only used the internal_nodes_canvas in the
tranform_layer.
Will followup with a PR that changes all internal layers to use the
internal_nodes_canvas.
2018-11-08 09:31:40 -08:00
Dan Field
22f67d6ba3 avoid overreleasing FlutterView (flutter/engine#6791) 2018-11-07 21:19:14 -08:00
Mehmet Fidanboylu
e8d852bac0 Skia Cleanup (flutter/engine#6786) 2018-11-07 15:29:52 -08:00
Michael Goderbauer
0def82ddb0 Unify copyright lines (flutter/engine#6757) 2018-11-07 12:24:35 -08:00
Todd Volkert
18134d0114 Fix String comparison as if Java were Dart. (flutter/engine#6781)
This also removes unused imports and sorts imports correctly
2018-11-07 09:59:51 -08:00
Dan Field
1a01274d0b fix setInitialRoute (flutter/engine#6774)
* fix setInitialRoute
2018-11-06 17:15:11 -08:00
Amir Hardon
98601958d9 fix type in embedded views preview flag name (flutter/engine#6767) 2018-11-06 10:35:01 -08:00
Amir Hardon
9ff80d12a2 Add an Info.plist flag to enable the embedded iOS views preview. (flutter/engine#6756)
When the flag is true, we currently use a single thread configuration,
and disabled the raster cache for opacity layers.

The flag's name is 'io.flutter_embedded_views_preview'.
2018-11-05 20:08:25 -08:00
Stanislav Baranov
dfbd99b3d9 Propagate positions of secondary pointers in UP events on Android (flutter/engine#6716) 2018-11-02 10:51:35 -07:00
Amir Hardon
bebedc379d Add an overlay surface on top of embedded UIViews. (flutter/engine#6726)
The overlay surfaces are going to be the same IOSSurface implementation
with the platform views controller set to null (so these are surfaces
that don't support embedding platform views to them).

  * Adds a FlutterOverlayView which is a UIView that's showing an
    overlay surface.
  * Creates an overlay surface for each embedded UIView (done in
    FlutterPlatformViewsController).
  * Changes CompositeEmbeddedView to return a new canvas.
  * Makes the PlatformViewLayer replace the PaintContext's canvas with
    the canvas for the overlay view.
  * Changed canvas in PaintContext to be a pointer so it can be changed.

TBD in following PRs:
  * Copy the current canvas state when replacing a canvas in PaintContext.
  * Make FlutterOverlayView work with a GL backend (currently it only
    works with software rendering)
2018-11-01 17:45:16 -07:00
Amir Hardon
3539cd3b1a Decode UIView's creation parameters and pass them to the view factory. (flutter/engine#6715) 2018-10-31 16:15:42 -07:00
Amir Hardon
25a211dfc6 Apply changes to the embedded UIView tree when presenting a frame (flutter/engine#6712)
Also tracks the order of embedded views from frame to frame, and only
removes and reattaches subviews if there is a structural change to the
UIView hierarchy.
2018-10-31 14:56:59 -07:00
Amir Hardon
ee912666e0 Move FlutterPlatformViewsController into FlutterEngine. (flutter/engine#6709)
This PR breaks PlatformViewsController's construction dependency on FlutterView,
which allows making FlutterEngine its owner instead of
FlutterViewController.

Also renamed the FlutterScreenshotDelegate to FlutterViewEngineDelegate
which is FlutterView's delegate to the engine, and expanded it to
provide a view embedder.
2018-10-31 13:02:44 -07:00
Amir Hardon
6a1ac0b6f5 Delay embedded UIViews touch events until the framework says so. (flutter/engine#6665)
This allows the framework to decide whether and when a touch event
sequence arrives to the embedded view. Which gives the framework the
ability to manage hit testing and gesture disambiguation for embedded
UIViews.

We achieve this by wrapping each embedded UIView with another UIView that has
a custom UIGestureRecognizer that delays touch events from being
delivered, and another UIGestureRecognizer that makes sure to let
Flutter know of events that are hit tested to the embedded view.
2018-10-30 20:16:56 -07:00
Dan Field
93d56cb341 Ensure Simulator publishes mDNS records (flutter/engine#6696)
* Ensure Simulator publishes mDNS records on loopback interface.
2018-10-30 18:04:18 -07:00
Dan Field
30caf79c4e Fix popSystemNavigator (flutter/engine#6691) 2018-10-29 16:36:28 -07:00
Mehmet Fidanboylu
ecd09173be Fix inconsistent include syntax (flutter/engine#6680) 2018-10-28 11:40:26 -07:00
Chinmay Garde
ddd0b8887a Handle Windows headers defining ERROR to 0 in log levels. (flutter/engine#6677) 2018-10-26 16:47:14 -07:00
Dan Field
285dab47c3 Update FlutterPlugin.h docs, suppress warning for older API (flutter/engine#6672)
* Update FlutterPlugin.h docs, suppress warning for older API
2018-10-26 14:54:33 -07:00
Amir Hardon
3c150f1c20 Attach and position embedded UIVIews (flutter/engine#6614) 2018-10-26 14:45:17 -07:00
Amir Hardon
3e93cdffaa Plumb the iOS PlatformViewsController into flow. (flutter/engine#6603)
For flow to manipulate the embedded UIViews during the paint traversal
it needs some hook in PaintContext.
This PR introduces a ViewEmbeder interface that is implemented by the
iOS PlatformViewsController and plumbs it into PaintContext.

The ViewEmbedder interface is mainly a place holder at this point, as
this PR is focused on just the plumbing.
2018-10-26 14:26:59 -07:00
Dan Field
849687c1f0 iOS Embedding Refactor (flutter/engine#6447)
* Create FlutterEngine to manage a Shell to support maintaining execution state across instances of FlutterViewControllers
* Refactor PlatformViewIOS to support adding or removing a FlutterViewController dynamically
* Refactor FlutterDartHeadlessCodeRunner to implement FlutterEngine
* Refactor FlutterViewController to accept a FlutterEngine at initialization or to create one for backwards compatibility; any Shell related responsibilities are now passed through to the Engine instance
* Remove FlutterNavigationController (unused)
* Update all public Objective C doc comments to be consistent and formatable
* Add public documentation to all public headers
2018-10-26 13:00:12 -07:00
Stanislav Baranov
098f31c86f Propagate pointer size from Android MotionEvent (flutter/engine#6662) 2018-10-26 09:39:10 -07:00
Jonah Williams
d1479e8892 TextField is only a live region when it has input focus (flutter/engine#6649) 2018-10-25 08:37:49 -07:00
Amir Hardon
0373b5e512 Add an iOS PlatformViewsController for creating/disposing UIViews. (flutter/engine#6569)
Adds a FlutterPlatformViewFactory protocol - a simple factory protocol to be implemented by plugins
  that exposes a UIView for embedding in Flutter apps.
* Adds a FlutterPlatformView protocol, which is used to associate a
  dispose callback with a `UIView` created by a FlutterPlatformViewFactory.
* Exposes a registerViewFactory method in FlutterPluginRegistrar.
* Implements the `flutter/platform_views` system channel on iOS, allowing
  Dart code to ask for creation/destruction of UIViews.
2018-10-24 15:07:05 -07:00
Dan Field
c29c7af19a fix setter for viewOpaque (flutter/engine#6653) 2018-10-24 12:31:44 -07:00
Chinmay Garde
68887916e2 Realize kernel asset mappings on a worker thread if one is available. (flutter/engine#6648) 2018-10-24 11:33:46 -07:00
Chinmay Garde
967db4ff80 Fix mac builds. Only Linux and Windows require default GL proc resolvers. (flutter/engine#6641) 2018-10-23 10:46:14 -07:00
James Clarke
a378ba2223 Fix Windows embedding. Appears that #6523 or #6525 introduced a bug for embedder scenarios causing the window native library to be incorrectly initialized and thus incapable of correctly resolving GL functions. This change fixes that. (flutter/engine#6624) 2018-10-23 09:47:53 -07:00
Dan Field
bf8709d7dc Allow FlutterViewController to specify whether its FlutterView is opaque (flutter/engine#6570)
* Allow FlutterViewController to specify whether its FlutterView is opaque
2018-10-22 19:53:04 -07:00
Matthew Smith
437e15e3f5 13771 - iOS dictation bug (flutter/engine#6607)
According to the iOS docs, implementing
`- (id)insertDictationResultPlaceholder`

```Implementation of this method is optional but can be done when you want to provide a specific rectangle for the placeholder animation while the dictation results are being processed. ```

If you do not implement this method, UIKit will insert a default placeholder of 10 whitespace characters. By overriding this, no placeholder text will be inserted. If you implement the `insertDictationResultPlaceholder`, you must implement
`- (void)removeDictationResultPlaceholder:(id)placeholder willInsertResult:(BOOL)willInsertResult`
2018-10-22 10:28:39 -07:00
Gary Qian
863ab7c18b Properly gate android API < 21 and remove extraneous data array. (flutter/engine#6619) 2018-10-19 15:01:43 -07:00
Chinmay Garde
1ce76760ae Don't attempt to build any platform target on Fuchsia. (flutter/engine#6617) 2018-10-19 14:20:31 -07:00
Gary Qian
36cc794c94 Gate locale.getScript() behind version check for android API < 21 (flutter/engine#6592) 2018-10-18 14:03:48 -07:00
Gary Qian
b4a3ad2e28 Pass full locale list with script and variant codes to framework (flutter/engine#6557)
* Locale Passing

* Pass full locale list and script and variant codes to framework

* Working Android locale list passing and fallback
2018-10-17 10:53:01 -07:00
Dan Field
b4b702053b Advertise iOS Observatory port over mDNS/Bonjour (flutter/engine#6533)
* Publish port of observatory over mDNS
2018-10-15 17:21:01 -07:00
Shaoxing Wang
cfd00c3d88 Fix crash when removeViewImmediate invoked from platform view (flutter/engine#6266)
* Fix crash when removeViewImmediate invoked from platform view

* Clear animation before remove view from mFakeWindowRootView
2018-10-15 16:09:10 -07:00
Chinmay Garde
568c930594 Allow specifying custom toolchains and sysroots for host builds. (flutter/engine#6548)
Updates buildroot to https://github.com/flutter/buildroot/pull/180.
2018-10-15 14:18:02 -07:00
Jason Simmons
52acaa8b5e Fix the Mac embedder build (flutter/engine#6525) 2018-10-12 16:24:54 -07:00
Jonah Williams
b4a9605fce Add version check for dismissable (flutter/engine#6522) 2018-10-12 15:47:11 -07:00
Jason Simmons
0a6f678613 Provide a default GL function resolver in the embedder (flutter/engine#6523)
Also check whether the implementation behind the resolver is OpenGL or
OpenGL ES
2018-10-12 15:07:46 -07:00
谢然
3f6afa9c58 fix ResourceExtractor npe. (flutter/engine#6461) 2018-10-12 09:56:00 -07:00
James D. Lin
aaf6f652b4 Add a callback for iOS when the first Flutter frame is rendered (flutter/engine#6135)
Add a `-[FlutterViewController setFlutterViewDidRenderCallback:]`
method on iOS so client applications can be notified when the Flutter
view has rendered.  This can be used for add2app cases to determine
when to take an initial screenshot for comparisons in automated
tests.

The callback is expected to be an Objective-C block (or Swift
closure).  I chose to support only a single callback because it's
much simpler (especially since it does not require a separate method
to unregister the callback), and it's not clear that there are use
cases that would justify additional complexity.  Clients have the
flexibility to make their callback invoke other callbacks anyway.

I alternatively considered adding a `-[FlutterViewController
viewDidRenderFirstFlutterFrame]` method that clients could override
in a subclass, but using an Objective-C block seems more flexible and
less of a burden.

Fixes https://github.com/flutter/flutter/issues/20665
2018-10-11 20:21:13 -07:00
Gary Qian
45577f1f07 Pass scriptcode and variantcode to dart:ui Window. (flutter/engine#6493) 2018-10-10 17:22:59 -07:00
Jason Simmons
065769e2e5 Use an older version of SurfaceTexture.setOnFrameAvailableListener when running on pre-Lollipop devices (flutter/engine#6489)
Fixes https://github.com/flutter/flutter/issues/21730
2018-10-10 15:01:48 -07:00
Jidong Chen
92ae80259c Missing dealloc method in FlutterEventChannel (flutter/engine#6464)
* Missing dealloc method in FlutterEventChannel
2018-10-09 11:50:00 -07:00
Jonah Williams
c0edacaa1b Correct issues in visible children determination (flutter/engine#6455)
* fix off by one

* add documentation on counting for setToIndex
2018-10-08 11:05:09 -07:00
liyuqian
1d2c3ec0a4 Remove unused imports and variables (flutter/engine#6437)
This is discovered in the new Google3 checks. It should not block our
roll but it's nice to fix them.
2018-10-04 16:01:49 -07:00
Chinmay Garde
97c1c2c302 Remove touch mapper and respect the UITouch phase when calculating the pointer data change type. (flutter/engine#6430)
The touch mapper was a relic of a time when the pointer IDs had to be less
than 16. Not respecting the touch phase is getting in the way of clients that
fake their own touches. Turns out the AppDelegate also like to fake touches to
simulate status bar events. Now, except in cases where there is a specific
override in place, the UI touch phase is respected.
2018-10-04 14:33:58 -07:00
Jonah Williams
ad889d5cec Ensure setViewIdResourceName has the correct version guard (flutter/engine#6404) 2018-10-03 17:44:32 -07:00