1075 Commits

Author SHA1 Message Date
LongCatIsLooong
fbfb27f515 Revert "[Android Text Input] Make the editing state listenable and allow batch edits (#21534)" (flutter/engine#22434) 2020-11-11 18:24:02 -08:00
chunhtai
65456583c8 reland support uri launch in android (flutter/engine#22363)
* Revert "Revert "support uri intent launcher in android (#21275)" (#22298)"

This reverts commit 9a5b6b4e910bcfac97a330a4aa2cbe2f14b57522.

* reland support uri launch for android

* refactor

* update

* fix test

* addressing comments

* addressing comments

* revert throw error
2020-11-11 14:51:04 -08:00
Kaushik Iska
9dffddd08d Remove GetExternalViewEmbedder from surface (flutter/engine#22272)
This decouples surfaces from view embedders.
2020-11-11 13:45:24 -08:00
LongCatIsLooong
7d20e41baf [Android Text Input] Make the editing state listenable and allow batch edits (flutter/engine#21534) 2020-11-10 19:19:03 -08:00
Kaushik Iska
8b9acb11b8 Move common graphics utils to //flutter/common/graphics (flutter/engine#22320) 2020-11-10 12:34:02 -08:00
xster
8d9b9217d7 move deprecation from the PluginRegistry outer interface to inner, v1-specific fields (flutter/engine#22345) 2020-11-09 13:57:06 -08:00
Greg Spencer
b25769b79b Use dispatchKeyEvent, and handle keys sent to InputConnection.sendKeyEvent on Android (flutter/engine#22340)
This (mostly) re-lands #21163, which was reverted in #22321

This switches from using onKeyDown to using dispatchKeyEvent on Android so that keys can be intercepted handled by the framework and not continue to be dispatched to other controls.

It also now intercepts key events sent to InputConnection.sendKeyEvent, as some IMEs do (e.g. the Hacker's Keyboard), and sends them to Flutter.

This fixes the problem where (for example) pressing TAB on a hardware keyboard sends the tab to both the text field and to the focus traversal system.

Note that we still can't intercept all keystrokes given to a soft keyboard, only those which the soft keyboard decides to send to InputConnection.sendKeyEvent, and system keys (like the back button) are only received if the IME doesn't eat them.
2020-11-06 12:45:47 -08:00
Kaushik Iska
ea42f7eaa0 Platform views have CreateExternalViewEmbedder (flutter/engine#22214) 2020-11-06 05:30:48 -08:00
Greg Spencer
440ff6e3f4 Revert "Reland: Use dispatchKeyEventPreIme, and handle keys sent to InputConnection.sendKeyEvent on Android (#22304)" (flutter/engine#22321)
This reverts commit b289c1711fd8357fe5a6c8aa66683d0d2ca55e48 because it breaks back button functionality.
2020-11-05 09:02:25 -08:00
Greg Spencer
b289c1711f Reland: Use dispatchKeyEventPreIme, and handle keys sent to InputConnection.sendKeyEvent on Android (flutter/engine#22304)
This re-lands #21163, which was reverted in #22004

Now that flutter/flutter#67359 has landed, this change will no longer cause spaces (and other shortcuts) to be ignored in text fields if there is no action associated with the intent, even if there is a shortcut key mapping to an intent.

It also no longer causes web test failures (as far as I can tell without submitting it: the same tests don't fail locally).

Here's the original PR description:

This switches from using dispatchKeyEvent to using dispatchKeyEventPreIme so that keys can be intercepted before they reach the IME and be handled by the framework.

It also now intercepts key events sent to InputConnection.sendKeyEvent, as some IMEs do (e.g. the Hacker's Keyboard), and sends the to Flutter before sending them to the IME (which it now only does if they are not handled by the framework).

This fixes the problem where pressing TAB on a hardware keyboard sends the tab to both the text field and to the focus traversal system.

Note that we still can't intercept all keystrokes given to a soft keyboard, only those which the soft keyboard decides to send to InputConnection.sendKeyEvent.
2020-11-04 15:54:21 -08:00
chunhtai
9a5b6b4e91 Revert "support uri intent launcher in android (#21275)" (flutter/engine#22298) 2020-11-04 15:04:02 -08:00
chunhtai
272e2b2bac makes android semanticsnode to ignore hittest if it is not focusable (flutter/engine#22205) 2020-11-02 09:53:01 -08:00
Lazy Llama
176d1345a4 Fix viewInset.bottom and viewPadding.bottom… (flutter/engine#21730) 2020-10-29 17:28:01 -07:00
Jason Simmons
b76d246acb Reformat some files that were not auto-formatted (flutter/engine#21940) 2020-10-23 18:57:03 -07:00
chunhtai
f826d9992e support uri intent launcher in android (flutter/engine#21275)
* support uri intent launcher in android

* fix comment
2020-10-22 15:54:30 -07:00
Lau Ching Jun
743edee507 Support loading assets from Android dynamic feature modules (flutter/engine#21504)
Initialize the AssetManager from the application context so that assets from dynamic feature modules can be loaded.
2020-10-22 15:53:11 -07:00
Greg Spencer
06b6f8af89 Reland: Migration to PlatformDispatcher and multi-window (flutter/engine#21932)
This re-lands #20496 and #21780 after fixing the semantics-enabling code that was causing the post-submit web_smoke_test to fail.

Below is the description from the original PR:

This is a PR for converting the dart:ui code in the engine to use a multi-window API. The goal here is to convert from the window singleton to an API that has the concept of multiple windows. Also, I'm matching up the new PlatformDispatcher class to talk directly to the PlatformConfiguration class in the engine. I'm not attempting to actually enable creating multiple windows here, just migrate to an API that has a concept of multiple windows. The multi-window API in this PR currently only ever creates one window.

The design doc for this change is here.

The major changes in this PR:

Move the platfom-specific attributes out of Window, and into the new PlatformDispatcher class that holds all of the platform state, so that the platform code need only update the configuration on this class.
Create FlutterView, FlutterWindow, and SingletonFlutterWindow classes to separate out the concepts of a view (of which there may be multiple in a window), a window (of which there may be multiple on a screen, and they host views), and a window where there is only ever expected to be one (this hosts the entire API of the former Window class, and will eventually be the type of the window singleton).
Next step after this PR lands:

Remove the Window class entirely (it is replaced by SingletonFlutterWindow). Some minor changes in the Framework are needed to switch to using SingletonFlutterWindow directly first.

The Window class still exists in this PR, but will be removed as soon as the framework is converted to point to the SingletonFlutterWindow class instead. They share the same API, just have different names (Window is currently a subclass of SingletonFlutterWindow). The intention is that the Window name will be freed up to use as a widget class name in the framework for managing windows. The singleton called window will remain, and keep the same API it has now.
2020-10-22 14:54:25 -07:00
chunhtai
0f2c3c9bf4 Fixes Edge trigger route change announcement (flutter/engine#21975) 2020-10-22 14:22:03 -07:00
Greg Spencer
22f99901e4 Revert "Reland: Use dispatchKeyEventPreIme, and handle keys sent to InputConnection.sendKeyEvent on Android (#21979)" (flutter/engine#22004)
This reverts commit 410db6115268fe6d7561adf68d0fb04adf314c43 because it causes some failures in web tests.
2020-10-20 11:42:01 -07:00
Greg Spencer
410db61152 Reland: Use dispatchKeyEventPreIme, and handle keys sent to InputConnection.sendKeyEvent on Android (flutter/engine#21979)
This re-lands #21163, which was reverted in #21513

Now that flutter/flutter#67359 has landed, this change will no longer cause spaces (and other shortcuts) to be ignored in text fields if there is no action associated with the intent, even if there is a shortcut key mapping to an intent.

Here's the original PR description:

This switches from using dispatchKeyEvent to using dispatchKeyEventPreIme so that keys can be intercepted before they reach the IME and be handled by the framework.

It also now intercepts key events sent to InputConnection.sendKeyEvent, as some IMEs do (e.g. the Hacker's Keyboard), and sends the to Flutter before sending them to the IME (which it now only does if they are not handled by the framework).

This fixes the problem where pressing TAB on a hardware keyboard sends the tab to both the text field and to the focus traversal system.

Note that we still can't intercept all keystrokes given to a soft keyboard, only those which the soft keyboard decides to send to InputConnection.sendKeyEvent.
2020-10-20 10:14:31 -07:00
Jason Simmons
9af9295516 Fix the initialization of AndroidSurfaceFactoryImpl (flutter/engine#21977)
Fixes https://github.com/flutter/flutter/issues/68446
2020-10-19 16:22:36 -07:00
Jason Simmons
7f47aac6f2 Break the reference cycle between the surface factory and the external view embedder (flutter/engine#21918)
See https://github.com/flutter/flutter/issues/68315
2020-10-16 15:03:26 -07:00
Chris Bracken
ef868edd36 Eliminate FLUTTER_NOLINT where possible (flutter/engine#21904)
This removes most of the remaining FLUTTER_NOLINT comments and opts
these files back into linter enforcement.

I've filed https://github.com/flutter/flutter/issues/68273 to require
that all FLUTTER_NOLINT comments be followed by a GitHub issue URL
describing the problem to be fixed.
2020-10-16 12:44:49 -07:00
Mehmet Fidanboylu
681ffacfe6 Forward Error objects to uncaught exception handler if there is one. (flutter/engine#21806) 2020-10-16 08:21:04 -07:00
Kaushik Iska
fea7e59a66 Fix incldues to be flutter/shell rather than shell/ (flutter/engine#21889) 2020-10-15 16:51:17 -07:00
Jason Simmons
d6720f7085 Prevent a race between SurfaceTexture.release and updateTexImage (flutter/engine#21777) 2020-10-14 15:02:02 -07:00
Kaushik Iska
fba087b5e3 [android] Refactor surface factory and wire in external view embedder (flutter/engine#21839) 2020-10-14 14:27:02 -07:00
Jason Simmons
190b35170f Call PlatformView.dispose when removing hybrid composition platform views (flutter/engine#21790)
Also force disposal of all hybrid platform views when shutting down the
engine.

Fixes https://github.com/flutter/flutter/issues/66764
2020-10-13 18:40:55 -07:00
Emmanuel Garcia
a36600d4b0 Allow TalkBack navigation while a platform view is rendered (flutter/engine#21719) 2020-10-13 17:52:02 -07:00
Yuqian Li
0c645869e3 Revert "Migration to PlatformDispatcher and multi-window #20496" (flutter/engine#21792)
* Revert "Fix documentation build for window changes. (#21780)"

This reverts commit a539d91840d2fbbb4aa07eeed6a92d654db167ab.

* Revert "Migration to PlatformDispatcher and multi-window (#20496)"

This reverts commit a58fec63f196175eedfc5fbaedce9336dab5c508.
2020-10-12 19:26:41 -07:00
Greg Spencer
a58fec63f1 Migration to PlatformDispatcher and multi-window (flutter/engine#20496)
This is a PR for converting the dart:ui code in the engine to use a multi-window API. The goal here is to convert from the window singleton to an API that has the concept of multiple windows. Also, I'm matching up the new PlatformDispatcher class to talk directly to the PlatformConfiguration class in the engine. I'm not attempting to actually enable creating multiple windows here, just migrate to an API that has a concept of multiple windows. The multi-window API in this PR currently only ever creates one window.

The design doc for this change is here.

The major changes in this PR:

Move the platfom-specific attributes out of Window, and into the new PlatformDispatcher class that holds all of the platform state, so that the platform code need only update the configuration on this class.
Create FlutterView, FlutterWindow, and SingletonFlutterWindow classes to separate out the concepts of a view (of which there may be multiple in a window), a window (of which there may be multiple on a screen, and they host views), and a window where there is only ever expected to be one (this hosts the entire API of the former Window class, and will eventually be the type of the window singleton).
Next step after this PR lands:

Remove the Window class entirely (it is replaced by SingletonFlutterWindow). Some minor changes in the Framework are needed to switch to using SingletonFlutterWindow directly first.

The Window class still exists in this PR, but will be removed as soon as the framework is converted to point to the SingletonFlutterWindow class instead. They share the same API, just have different names (Window is currently a subclass of SingletonFlutterWindow). The intention is that the Window name will be freed up to use as a widget class name in the framework for managing windows. The singleton called window will remain, and keep the same API it has now.
2020-10-09 16:29:16 -07:00
Dan Field
73b959d7cb Forbid android.util.Log (flutter/engine#21696) 2020-10-08 14:52:05 -07:00
Hamdi Kahloun
5ee8b7c5ef SecurityException: Permission Denial (flutter/engine#21290)
Fix `java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider`

Fixes flutter/flutter#66108

Co-authored-by: Dan Field <dfield@gmail.com>
2020-10-08 14:36:51 -07:00
Jonah Williams
127f3af9e0 Preserve specified AssetResolvers when performing a hot restart or updating the asset directory (flutter/engine#21611)
Follow up from #21436 . That PR works for all embeddings except for Android, which creates a special JNI AssetResolver. Since the shell cannot recreate this resolver, update the logic to preserve existing resolvers instead.
2020-10-08 09:22:01 -07:00
Emmanuel Garcia
2bd0e126a5 Ensure JNI is not called from raster thread (flutter/engine#21665) 2020-10-07 16:37:02 -07:00
Jason Simmons
7987032038 Workaround for an Android emulator EGL bug that can cause inaccurate GL version strings (flutter/engine#21258) 2020-10-02 12:17:02 -07:00
Jason Simmons
b1839003b3 Extract the WindowInsetsAnimation.Callback subclass into a separate class that will be lazily loaded (flutter/engine#21548)
WindowInsetsAnimation.Callback was introduced in API level 30.  This
PR moves the text input plugin's WindowInsetsAnimation.Callback subclass
into a class that will only be loaded if the embedding has checked for a
sufficient API level.

See https://github.com/flutter/flutter/issues/66908
2020-10-02 11:23:42 -07:00
Ren You
f2669455f3 Revert "Use dispatchKeyEventPreIme, and handle keys sent to InputConnection.sendKeyEvent on Android (#21163)" (flutter/engine#21513)
This reverts commit afeb9b27f0191997cc45682ab756c0be4d3e155c.
2020-09-30 09:34:05 -07:00
Greg Spencer
afeb9b27f0 Use dispatchKeyEventPreIme, and handle keys sent to InputConnection.sendKeyEvent on Android (flutter/engine#21163)
This switches from using dispatchKeyEvent to using dispatchKeyEventPreIme so that keys can be intercepted before they reach the IME and be handled by the framework.

It also now intercepts key events sent to InputConnection.sendKeyEvent, as some IMEs do (e.g. the Hacker's Keyboard), and sends the to Flutter before sending them to the IME (which it now only does if they are not handled by the framework).

This fixes the problem where pressing TAB on a hardware keyboard sends the tab to both the text field and to the focus traversal system.

Note that we still can't intercept all keystrokes given to a soft keyboard, only those which the soft keyboard decides to send to InputConnection.sendKeyEvent.
2020-09-29 12:46:29 -07:00
Kaushik Iska
a5f4486147 Reland multiple display support for embedder API (flutter/engine#21464) 2020-09-28 12:35:34 -07:00
Kaushik Iska
bd90847bad Revert multiple display support for embedder API (flutter/engine#21456)
This reverts commits
- 5f34b8442366463b5ad53e3e87e7920a006392eb.
- fc8b468d84f1fef5bf5183dd0b36d9411d454ea7.

See: https://github.com/flutter/flutter/issues/66829
2020-09-28 09:46:46 -07:00
Emmanuel Garcia
dbca16555e Support dragging native platform views (flutter/engine#21396) 2020-09-25 17:46:34 -07:00
Kaushik Iska
5f34b84423 Embedder API Support for display settings (flutter/engine#21355)
Embedders can now notify shell during startup about the various displays and their corresponding settings.
Adds a notion of Display update type which can later include chages to displays during runtime such as addition / removal / reconfiguration of displays.

We also remove the responsibility of providing the refresh rate from `vsync_waiter` to `DisplayManager`.
Rewires existing platform implementations of the said API to use `Shell::OnDisplayUpdate` to notify the display manager of the startup configuration.

DisplayManager is also thread-safe to account for rasterizer and UI thread accesses.
2020-09-25 11:04:10 -07:00
Gary Qian
e714ae10db Locale -> LanguageRange conversion to be more general in Android platformResolvedLocale (flutter/engine#21350) 2020-09-23 21:52:02 -07:00
Jason Simmons
32fbdb6755 Fix boolean value checks in StandardMessageCodec (flutter/engine#21270)
Fixes https://github.com/flutter/flutter/issues/65619
2020-09-23 16:31:07 -07:00
xster
1644e2fbcf Re-land deprecate Android v1 embedding classes (flutter/engine#21347) 2020-09-23 11:25:20 -07:00
Jason Simmons
1158faf54c Retain the WindowInsetsAnimation callback if code shrinking is enabled (flutter/engine#21330) 2020-09-23 09:17:02 -07:00
Zachary Anderson
01982beebc Revert "Deprecate Android v1 embedding classes (#20868)" (flutter/engine#21338)
This reverts commit 7b1562112962b1b22926938fad6438279ed6467c.
2020-09-22 14:38:18 -07:00
xster
aa3ac9e9aa Enforce exclusivity for activity and fragments attached to the FlutterEngine (flutter/engine#21272) 2020-09-22 10:34:52 -07:00
Jason Simmons
bc82ee9267 Disconnect the view's AndroidKeyProcessor when detaching from the engine (flutter/engine#21307) 2020-09-21 17:42:02 -07:00