* The embedder depends on dynamic:embedder
* The dylib depends on dynamic:dylib
* The embedder calls OnLoad and OnUnload callbacks that setup and teardown the dylib environment
* The dylib contains a thin library that services OnLoad, OnUnload and OnInvoke so that vendors dont have to do it themselves (and potentially mess it up)
* The vendor only has to implement the `FlutterServicePerform` method that takes a fully scoped handle
* This patch is a WIP till we get a stable Flutter ABI. The stuff in mojo/public is *NOT* stable
Currently, during application startup we:
* copy the FLX file to a Mojo pipe
* write the Mojo pipe contents back to a temporary file on disk
* unzip the FLX contents into cache storage
This contributes to startup latency and requires that we later clean up the
cache.
With this change, the assets will be extracted from the FLX archive
on demand with no writes to storage. Runtime cost should be minimal
given that most assets (except for the snapshot) are not compressed
in the archive.
This lets you focus and unfocus a node.
Still doesn't seem to be enough to actually have the node exposed in
TalkBack. We probably need hover for that (that's next).
(Also fixes a leak for when a subtree has been disconnected; previously
we were only forgetting the top node of the subtree, not the
descendants. Thanks @krisgiesing for catching that.)
This is another step towards enabling accessibility for Flutter on
Android. It exposes the semantics tree to Android's accessibility API
when accessibility is enabled.
It does not yet:
- allow one to actually interact with the application via the
accessibility API
- expose the accessibility tree to touch exploration
- implement the accessibility focus API
However, you can see the tree if you run uiautomatorviewer. It is there,
and it matches the UI. At least in Stocks. I didn't test anything else.
Previously we just dropped child scenes on the floor. Now we upload them
to Mozart. However, we just draw them on top of all the other content
and don't apply any clips or blends.
If the Sky shell process does not have an orderly shutdown, then temporary
files created by services may never be cleaned up.
The ResourceCleaner task will run at the next startup and clean up any files
that match the prefix used by Chromium's temporary file API. Services will
now use the same prefix for their files.
Instead of providing a stream of mutations, we now provide a the client with
the complete state of the editing control to prevent the two from getting out
of sync.
As a side-effect, we can now move the cursor around when editing a text field.
After an application is suspended and the GrContext associated with the
Flutter view is destroyed, the raster cache still contains images tied
to the defunct context. The SkyShell process will crash if these images
are used after the application resumes.
When the engine starts a new version of the Dart application, the animator may
have pending callbacks and other state related to the previous run of the app.
This state must be cleared before the new vsync provider is assigned.
In the future, we'll probably want to plumb through the keyboard animation
parameters, but for now we match the behavior on Android where we move the
widgets out of the way of the keyboard without animation.
Previously PlatformViewAndroid would create a pipe and hand it off to the
SkyEngine, which would give it to the isolate's DartState. If a second
isolate is created, the SkyEngine would no longer hold a valid proxy to a
ServicesProvider, and the new isolate's Dart code can not obtain the
servicesProvidedByEmbedder.