From 2d4bbdbeb81a71d8df684bf78e48566feb5f80b4 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 14 Oct 2019 17:31:25 -0700 Subject: [PATCH 1/6] Update to support new embedder --- packages/e2e/CHANGELOG.md | 6 ++++ .../dev/flutter/plugins/e2e/E2EPlugin.java | 29 ++++++++++++++++--- packages/e2e/lib/e2e.dart | 4 +-- packages/e2e/pubspec.yaml | 2 +- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index ee813dc1c88f..eaad7b0720be 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.2.1 + +* Updated to support new embedder. +* Print a warning if the plugin is not registered. +* Updated method channel name. + ## 0.2.0+1 * Updated README. diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java index bbb8d8bb4479..181894bf4c70 100644 --- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java +++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java @@ -4,6 +4,9 @@ package dev.flutter.plugins.e2e; +import android.content.Context; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -13,16 +16,34 @@ import java.util.concurrent.CompletableFuture; /** E2EPlugin */ -public class E2EPlugin implements MethodCallHandler { +public class E2EPlugin implements MethodCallHandler, FlutterPlugin { + private MethodChannel methodChannel; public static CompletableFuture> testResults = new CompletableFuture<>(); - private static final String CHANNEL = "plugins.flutter.dev/e2e"; + private static final String CHANNEL = "plugins.flutter.io/e2e"; /** Plugin registration. */ public static void registerWith(Registrar registrar) { - final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL); - channel.setMethodCallHandler(new E2EPlugin()); + final E2EPlugin instance = new E2EPlugin(); + instance.onAttachedToEngine(registrar.context(), registrar.messenger()); + } + + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + onAttachedToEngine( + binding.getApplicationContext(), binding.getFlutterEngine().getDartExecutor()); + } + + private void onAttachedToEngine(Context applicationContext, BinaryMessenger messenger) { + methodChannel = new MethodChannel(messenger, "plugins.flutter.io/e2e"); + methodChannel.setMethodCallHandler(this); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + methodChannel.setMethodCallHandler(null); + methodChannel = null; } @Override diff --git a/packages/e2e/lib/e2e.dart b/packages/e2e/lib/e2e.dart index 00d29633d045..0768a547dbbd 100644 --- a/packages/e2e/lib/e2e.dart +++ b/packages/e2e/lib/e2e.dart @@ -18,7 +18,7 @@ class E2EWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding { await _channel.invokeMethod( 'allTestsFinished', {'results': _results}); } on MissingPluginException { - // Tests were run on the host rather than a device. + print('Warning: E2E test plugin was not detected.'); } if (!_allTestsPassed.isCompleted) _allTestsPassed.complete(true); }); @@ -35,7 +35,7 @@ class E2EWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding { } static const MethodChannel _channel = - MethodChannel('plugins.flutter.dev/e2e'); + MethodChannel('plugins.flutter.io/e2e'); static Map _results = {}; diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml index 2515a51f07fd..1510a0d6a1bd 100644 --- a/packages/e2e/pubspec.yaml +++ b/packages/e2e/pubspec.yaml @@ -1,6 +1,6 @@ name: e2e description: Runs tests that use the flutter_test API as integration tests. -version: 0.2.0+1 +version: 0.2.1 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/e2e From 8fe041444d0aa61b7c3626c88c709a7f27c5b921 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 14 Oct 2019 17:41:28 -0700 Subject: [PATCH 2/6] Migrate to the new embedder --- packages/e2e/android/build.gradle | 25 +++++++++++++++++++ .../e2e_example/EmbedderV1ActivityTest.java | 11 ++++++++ .../example/e2e_example/MainActivityTest.java | 2 +- .../android/app/src/main/AndroidManifest.xml | 14 +++++------ .../e2e_example/EmbedderV1Activity.java | 17 +++++++++++++ .../com/example/e2e_example/MainActivity.java | 15 ++++++----- .../e2e/example/android/gradle.properties | 1 - 7 files changed, 70 insertions(+), 15 deletions(-) create mode 100644 packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java create mode 100644 packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java diff --git a/packages/e2e/android/build.gradle b/packages/e2e/android/build.gradle index c91d4721d3ac..08486c8c800c 100644 --- a/packages/e2e/android/build.gradle +++ b/packages/e2e/android/build.gradle @@ -40,3 +40,28 @@ android { api 'androidx.test.espresso:espresso-core:3.2.0' } } + +// TODO(amirh): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348 +afterEvaluate { + def containsEmbeddingDependencies = false + for (def configuration : configurations.all) { + for (def dependency : configuration.dependencies) { + if (dependency.group == 'io.flutter' && + dependency.name.startsWith('flutter_embedding') && + dependency.isTransitive()) + { + containsEmbeddingDependencies = true + break + } + } + } + if (!containsEmbeddingDependencies) { + android { + dependencies { + def lifecycle_version = "2.1.0" + api "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" + api "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" + } + } + } +} \ No newline at end of file diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java new file mode 100644 index 000000000000..a4dc1cf8e46b --- /dev/null +++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java @@ -0,0 +1,11 @@ +package com.example.e2e_example; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class EmbedderV1ActivityTest { + @Rule public ActivityTestRule rule = new ActivityTestRule<>(EmbedderV1Activity.class); +} diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java index 11a6c6afb2fa..b61c056e176d 100644 --- a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java +++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java @@ -1,7 +1,7 @@ package com.example.e2e_example; import androidx.test.rule.ActivityTestRule; -import dev.flutter.plugins.instrumentationadapter.FlutterRunner; +import dev.flutter.plugins.e2e.FlutterRunner; import org.junit.Rule; import org.junit.runner.RunWith; diff --git a/packages/e2e/example/android/app/src/main/AndroidManifest.xml b/packages/e2e/example/android/app/src/main/AndroidManifest.xml index d2477d5977f5..4460053e96b1 100644 --- a/packages/e2e/example/android/app/src/main/AndroidManifest.xml +++ b/packages/e2e/example/android/app/src/main/AndroidManifest.xml @@ -10,6 +10,13 @@ android:name="io.flutter.app.FlutterApplication" android:label="e2e_example" android:icon="@mipmap/ic_launcher"> + + - - diff --git a/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java b/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java new file mode 100644 index 000000000000..fc5977b1a3ec --- /dev/null +++ b/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java @@ -0,0 +1,17 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package com.example.e2e_example; + +import android.os.Bundle; +import io.flutter.app.FlutterActivity; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class EmbedderV1Activity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } +} \ No newline at end of file diff --git a/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/MainActivity.java b/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/MainActivity.java index 3a58e4e64863..a868db8d9d1c 100644 --- a/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/MainActivity.java +++ b/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/MainActivity.java @@ -1,13 +1,16 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + package com.example.e2e_example; -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; +import dev.flutter.plugins.e2e.E2EPlugin; +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; public class MainActivity extends FlutterActivity { @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); + public void configureFlutterEngine(FlutterEngine flutterEngine) { + flutterEngine.getPlugins().add(new E2EPlugin()); } } diff --git a/packages/e2e/example/android/gradle.properties b/packages/e2e/example/android/gradle.properties index 1515360c4bce..755300e3a0b5 100644 --- a/packages/e2e/example/android/gradle.properties +++ b/packages/e2e/example/android/gradle.properties @@ -2,4 +2,3 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -android.enableR8=true From 40bfbddde8bdea0f46420eeeaa2ecf4eecec0f6b Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 14 Oct 2019 17:54:33 -0700 Subject: [PATCH 3/6] Reformat --- .../main/java/dev/flutter/plugins/e2e/E2EPlugin.java | 2 +- .../example/e2e_example/EmbedderV1ActivityTest.java | 4 +++- .../com/example/e2e_example/EmbedderV1Activity.java | 12 ++++++------ packages/e2e/lib/e2e.dart | 3 +-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java index 181894bf4c70..ec536408c3fa 100644 --- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java +++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/E2EPlugin.java @@ -32,7 +32,7 @@ public static void registerWith(Registrar registrar) { @Override public void onAttachedToEngine(FlutterPluginBinding binding) { onAttachedToEngine( - binding.getApplicationContext(), binding.getFlutterEngine().getDartExecutor()); + binding.getApplicationContext(), binding.getFlutterEngine().getDartExecutor()); } private void onAttachedToEngine(Context applicationContext, BinaryMessenger messenger) { diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java index a4dc1cf8e46b..a526c1c8422e 100644 --- a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java +++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java @@ -7,5 +7,7 @@ @RunWith(FlutterRunner.class) public class EmbedderV1ActivityTest { - @Rule public ActivityTestRule rule = new ActivityTestRule<>(EmbedderV1Activity.class); + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(EmbedderV1Activity.class); } diff --git a/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java b/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java index fc5977b1a3ec..4056569eed8c 100644 --- a/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java +++ b/packages/e2e/example/android/app/src/main/java/com/example/e2e_example/EmbedderV1Activity.java @@ -9,9 +9,9 @@ import io.flutter.plugins.GeneratedPluginRegistrant; public class EmbedderV1Activity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } -} \ No newline at end of file + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } +} diff --git a/packages/e2e/lib/e2e.dart b/packages/e2e/lib/e2e.dart index 0768a547dbbd..2f8dc0ebac90 100644 --- a/packages/e2e/lib/e2e.dart +++ b/packages/e2e/lib/e2e.dart @@ -34,8 +34,7 @@ class E2EWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding { return WidgetsBinding.instance; } - static const MethodChannel _channel = - MethodChannel('plugins.flutter.io/e2e'); + static const MethodChannel _channel = MethodChannel('plugins.flutter.io/e2e'); static Map _results = {}; From fc1f9d241c6e57d78a3b547d85a96a9c7f20dbfd Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 14 Oct 2019 18:10:07 -0700 Subject: [PATCH 4/6] Set min SDK version --- packages/e2e/CHANGELOG.md | 1 + packages/e2e/example/pubspec.yaml | 1 + packages/e2e/pubspec.yaml | 1 + 3 files changed, 3 insertions(+) diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index eaad7b0720be..c6881cd7ddae 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -3,6 +3,7 @@ * Updated to support new embedder. * Print a warning if the plugin is not registered. * Updated method channel name. +* Set a Flutter minimum SDK version. ## 0.2.0+1 diff --git a/packages/e2e/example/pubspec.yaml b/packages/e2e/example/pubspec.yaml index 3538bb65db0f..456a62f2b36a 100644 --- a/packages/e2e/example/pubspec.yaml +++ b/packages/e2e/example/pubspec.yaml @@ -4,6 +4,7 @@ publish_to: 'none' environment: sdk: ">=2.1.0 <3.0.0" + flutter: ">=1.6.7 <2.0.0" dependencies: flutter: diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml index 1510a0d6a1bd..bee996db5656 100644 --- a/packages/e2e/pubspec.yaml +++ b/packages/e2e/pubspec.yaml @@ -6,6 +6,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/e2e environment: sdk: ">=2.1.0 <3.0.0" + flutter: ">=1.6.7 <2.0.0" dependencies: flutter: From d51491fb3c75868f14a1ad4f77636611fcf9ffed Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 14 Oct 2019 18:10:59 -0700 Subject: [PATCH 5/6] Update CHANGELOG --- packages/e2e/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index c6881cd7ddae..4fcb28efcf75 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.2.1 -* Updated to support new embedder. +* Support the v2 Android embedder. * Print a warning if the plugin is not registered. * Updated method channel name. * Set a Flutter minimum SDK version. From d0df5e3e2f697474cb273393acd57441cfa63676 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 14 Oct 2019 18:16:28 -0700 Subject: [PATCH 6/6] remove singleTop --- packages/e2e/example/android/app/src/main/AndroidManifest.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/e2e/example/android/app/src/main/AndroidManifest.xml b/packages/e2e/example/android/app/src/main/AndroidManifest.xml index 4460053e96b1..ae1a11dbcb34 100644 --- a/packages/e2e/example/android/app/src/main/AndroidManifest.xml +++ b/packages/e2e/example/android/app/src/main/AndroidManifest.xml @@ -11,7 +11,6 @@ android:label="e2e_example" android:icon="@mipmap/ic_launcher">