Should introduce no behavior changes. Refactors the android platform
view code so that
1. The delegator is ready to delegate between PlatformViewsController
(PVC) 1 and 2, and implements a
`PlatformViewsChannel.PlatformViewsHandler`.
2. The `PlatformViewCreationRequest` and `PlatformViewTouch` are fully
shared between the two platform view modes
3. Introduces new factory constructors for the different types of
`PlatformViewCreationRequest`s, corresponding to the modes.
Making the flag work on existing widgets will be done in a follow up PR
here
67262d9240/engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformViewsChannel.java (L95).
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-new channel
on [Discord].
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
---------
Co-authored-by: Gray Mackall <mackall@google.com>
Co-authored-by: Reid Baker <1063596+reidbaker@users.noreply.github.com>
Unit testing Java code
All Java code in the engine should now be able to be tested with Robolectric 4.12.1 and JUnit 4. The test suite has been added after the bulk of the Java code was first written, so most of these classes do not have existing tests. Ideally code after this point should be tested, either with unit tests here or with integration tests in other repos.
Adding a new test
- Create a file under
test/matching the path and name of the class under test. For example,shell/platform/android/io/flutter/util/Preconditions.java->shell/platform/android/**test**/io/flutter/util/Preconditions**Test**.java. - Add your file to the
sourcesof therobolectric_testsbuild target in/shell/platform/android/BUILD.gn. This compiles the test class into the test jar. - Import your test class and add it to the
@SuiteClassesannotation inFlutterTestSuite.java. This makes sure the test is actually executed at run time. - Write your test.
- Build and run with
testing/run_tests.py [--type=java] [--java-filter=<test_class_name>].
Example: from engine/src/flutter on a Mac
et build -c android_debug_unopt_arm64
testing/run_tests.py --android-variant=android_debug_unopt_arm64 --type=java --java-filter=io.flutter.embedding.android.FlutterViewTest
Note that testing/run_tests.py does not build the engine binaries; instead they
should be built prior to running this command and also when the source files
change. See Compiling the engine
for details on how to do so.
Q&A
My new test won't run. There's a "ClassNotFoundException".
See Updating Embedding Dependencies.
My new test won't compile. It can't find one of my imports.
See Updating Embedding Dependencies.
My test does not show log output in the console
Import org.robolectric.shadows.ShadowLog; then
Use ShadowLog.stream = System.out; in your test or setup method.