From 0fde0006e97092ce15d3689d634c439f4145f0da Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 23 Oct 2019 14:55:22 -0700 Subject: [PATCH 01/10] Implement FlutterPlugin and ActivityAware --- .../FirebaseDynamicLinksPlugin.java | 82 +++++++++++++++---- .../example/android/gradle.properties | 2 + 2 files changed, 67 insertions(+), 17 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index 9969fc31f2dd..c6a376dcf793 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -4,9 +4,9 @@ package io.flutter.plugins.firebasedynamiclinks; +import android.app.Activity; import android.content.Intent; import android.net.Uri; -import androidx.annotation.NonNull; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; @@ -15,6 +15,10 @@ import com.google.firebase.dynamiclinks.FirebaseDynamicLinks; import com.google.firebase.dynamiclinks.PendingDynamicLinkData; import com.google.firebase.dynamiclinks.ShortDynamicLink; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +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; @@ -27,15 +31,29 @@ import java.util.Map; /** FirebaseDynamicLinksPlugin */ -public class FirebaseDynamicLinksPlugin implements MethodCallHandler, NewIntentListener { - private final Registrar registrar; - private final MethodChannel channel; +public class FirebaseDynamicLinksPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler, NewIntentListener { + private Registrar registrar; + private MethodChannel channel; + private ActivityPluginBinding activityBinding; private FirebaseDynamicLinksPlugin(Registrar registrar, MethodChannel channel) { this.registrar = registrar; this.channel = channel; } + public FirebaseDynamicLinksPlugin() { } + + public static void registerWith(Registrar registrar) { + final MethodChannel channel = createChannel(registrar.messenger()); + final FirebaseDynamicLinksPlugin plugin = new FirebaseDynamicLinksPlugin(registrar, channel); + registrar.addNewIntentListener(plugin); + channel.setMethodCallHandler(plugin); + } + + private static MethodChannel createChannel(final BinaryMessenger messenger) { + return new MethodChannel(messenger, "plugins.flutter.io/firebase_dynamic_links"); + } + @Override public boolean onNewIntent(Intent intent) { FirebaseDynamicLinks.getInstance() @@ -54,7 +72,7 @@ public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { .addOnFailureListener( new OnFailureListener() { @Override - public void onFailure(@NonNull Exception e) { + public void onFailure(Exception e) { Map exception = new HashMap<>(); exception.put("code", e.getClass().getSimpleName()); exception.put("message", e.getMessage()); @@ -66,12 +84,39 @@ public void onFailure(@NonNull Exception e) { return false; } - public static void registerWith(Registrar registrar) { - final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_dynamic_links"); - final FirebaseDynamicLinksPlugin plugin = new FirebaseDynamicLinksPlugin(registrar, channel); - registrar.addNewIntentListener(plugin); - channel.setMethodCallHandler(plugin); + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + channel = createChannel(binding.getFlutterEngine().getDartExecutor()); + channel.setMethodCallHandler(this); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + } + + @Override + public void onAttachedToActivity(ActivityPluginBinding binding) { + activityBinding = binding; + activityBinding.addOnNewIntentListener(this); + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + activityBinding.removeOnNewIntentListener(this); + activityBinding = null; + } + + @Override + public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) { + activityBinding = binding; + activityBinding.addOnNewIntentListener(this); + } + + @Override + public void onDetachedFromActivity() { + activityBinding.removeOnNewIntentListener(this); + activityBinding = null; } @Override @@ -116,15 +161,14 @@ private Map getMapFromPendingDynamicLinkData( private void handleGetInitialDynamicLink(final Result result) { // If there's no activity, then there's no initial dynamic link. - if (registrar.activity() == null) { + if (registrar.activity() == null && activityBinding == null) { result.success(null); return; } FirebaseDynamicLinks.getInstance() - .getDynamicLink(registrar.activity().getIntent()) + .getDynamicLink(getActivity().getIntent()) .addOnSuccessListener( - registrar.activity(), new OnSuccessListener() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { @@ -138,19 +182,23 @@ public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { } }) .addOnFailureListener( - registrar.activity(), new OnFailureListener() { @Override - public void onFailure(@NonNull Exception e) { + public void onFailure(Exception e) { result.error(e.getClass().getSimpleName(), e.getMessage(), null); } }); } + private Activity getActivity() { + return registrar != null ? registrar.activity() : activityBinding.getActivity(); + } + + private OnCompleteListener createShortLinkListener(final Result result) { return new OnCompleteListener() { @Override - public void onComplete(@NonNull Task task) { + public void onComplete(Task task) { if (task.isSuccessful()) { Map url = new HashMap<>(); url.put("url", task.getResult().getShortLink().toString()); diff --git a/packages/firebase_dynamic_links/example/android/gradle.properties b/packages/firebase_dynamic_links/example/android/gradle.properties index 7be3d8b46841..38c8d4544ff1 100644 --- a/packages/firebase_dynamic_links/example/android/gradle.properties +++ b/packages/firebase_dynamic_links/example/android/gradle.properties @@ -1,2 +1,4 @@ org.gradle.jvmargs=-Xmx1536M android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true From 2407dc9e3b82456b5f89b0d24f99ecf11146691f Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 5 Nov 2019 11:47:27 -0800 Subject: [PATCH 02/10] Setup tests --- .../android/build.gradle | 27 ++++++++++++++++++- .../android/gradle.properties | 1 - .../example/android/app/build.gradle | 3 +++ .../EmbeddingV1ActivityTest.java | 14 ++++++++++ .../MainActivityTest.java | 12 +++++++++ .../android/app/src/main/AndroidManifest.xml | 7 +++++ .../EmbeddingV1Activity.java | 13 +++++++++ .../MainActivity.java | 12 ++++----- .../example/pubspec.yaml | 5 ++++ packages/firebase_dynamic_links/pubspec.yaml | 5 +++- .../test/firebase_dynamic_links_e2e.dart | 10 +++++++ 11 files changed, 100 insertions(+), 9 deletions(-) delete mode 100644 packages/firebase_dynamic_links/android/gradle.properties create mode 100644 packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java create mode 100644 packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java create mode 100644 packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/EmbeddingV1Activity.java create mode 100644 packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart diff --git a/packages/firebase_dynamic_links/android/build.gradle b/packages/firebase_dynamic_links/android/build.gradle index 01deb838f297..ca1cf4cf0f43 100644 --- a/packages/firebase_dynamic_links/android/build.gradle +++ b/packages/firebase_dynamic_links/android/build.gradle @@ -47,8 +47,33 @@ android { dependencies { api 'com.google.firebase:firebase-dynamic-links:16.1.8' implementation 'com.google.firebase:firebase-common:16.1.0' - implementation 'androidx.annotation:annotation:1.0.0' } } apply from: file("./user-agent.gradle") + +// TODO(bparrishMines): 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 = "1.1.1" + compileOnly "android.arch.lifecycle:runtime:$lifecycle_version" + compileOnly "android.arch.lifecycle:common:$lifecycle_version" + compileOnly "android.arch.lifecycle:common-java8:$lifecycle_version" + } + } + } +} diff --git a/packages/firebase_dynamic_links/android/gradle.properties b/packages/firebase_dynamic_links/android/gradle.properties deleted file mode 100644 index 8bd86f680510..000000000000 --- a/packages/firebase_dynamic_links/android/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M diff --git a/packages/firebase_dynamic_links/example/android/app/build.gradle b/packages/firebase_dynamic_links/example/android/app/build.gradle index 75ab78059c1c..f620169bc756 100644 --- a/packages/firebase_dynamic_links/example/android/app/build.gradle +++ b/packages/firebase_dynamic_links/example/android/app/build.gradle @@ -52,6 +52,9 @@ flutter { } dependencies { + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java new file mode 100644 index 000000000000..cc5fe571cb11 --- /dev/null +++ b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java @@ -0,0 +1,14 @@ +package io.flutter.plugins.firebasedynamiclinks; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import io.flutter.plugins.firebasedynamiclinksexample.EmbeddingV1Activity; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class EmbeddingV1ActivityTest { + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(EmbeddingV1Activity.class); +} \ No newline at end of file diff --git a/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java new file mode 100644 index 000000000000..72b3e1976cbf --- /dev/null +++ b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java @@ -0,0 +1,12 @@ +package io.flutter.plugins.firebasedynamiclinks; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import io.flutter.plugins.firebasedynamiclinksexample.MainActivity; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class MainActivityTest { + @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); +} \ No newline at end of file diff --git a/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml b/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml index ed3cca73d5d3..ff675f253409 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml +++ b/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml @@ -22,5 +22,12 @@ + + diff --git a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/EmbeddingV1Activity.java b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/EmbeddingV1Activity.java new file mode 100644 index 000000000000..1d8a55dae484 --- /dev/null +++ b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/EmbeddingV1Activity.java @@ -0,0 +1,13 @@ +package io.flutter.plugins.firebasedynamiclinksexample; + +import android.os.Bundle; +import io.flutter.app.FlutterActivity; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class EmbeddingV1Activity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } +} diff --git a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java index 885f28ec4efc..f012f15adc6e 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java +++ b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java @@ -1,13 +1,13 @@ package io.flutter.plugins.firebasedynamiclinksexample; -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin; public class MainActivity extends FlutterActivity { + // TODO(bparrishMines): Remove this once v2 of GeneratedPluginRegistrant rolls to stable. https://github.com/flutter/flutter/issues/42694 @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); + public void configureFlutterEngine(FlutterEngine flutterEngine) { + flutterEngine.getPlugins().add(new FirebaseDynamicLinksPlugin()); } } diff --git a/packages/firebase_dynamic_links/example/pubspec.yaml b/packages/firebase_dynamic_links/example/pubspec.yaml index a2b3297b1452..bb7c5ce9b2ea 100644 --- a/packages/firebase_dynamic_links/example/pubspec.yaml +++ b/packages/firebase_dynamic_links/example/pubspec.yaml @@ -11,5 +11,10 @@ dependencies: url_launcher: ^5.1.6 +dev_dependencies: + e2e: ^0.2.1 + flutter_driver: + sdk: flutter + flutter: uses-material-design: true diff --git a/packages/firebase_dynamic_links/pubspec.yaml b/packages/firebase_dynamic_links/pubspec.yaml index 25a83f7d125a..1ebaffaeb31b 100644 --- a/packages/firebase_dynamic_links/pubspec.yaml +++ b/packages/firebase_dynamic_links/pubspec.yaml @@ -11,6 +11,9 @@ dependencies: sdk: flutter dev_dependencies: + e2e: ^0.2.1 + flutter_driver: + sdk: flutter flutter_test: sdk: flutter url_launcher: ^4.2.0 @@ -24,4 +27,4 @@ flutter: environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" - flutter: ">=1.5.0 <2.0.0" + flutter: ">=1.9.1+hotfix.5 <2.0.0" diff --git a/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart b/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart new file mode 100644 index 000000000000..54ceb7c6f26a --- /dev/null +++ b/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart @@ -0,0 +1,10 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:e2e/e2e.dart'; + +void main() { + E2EWidgetsFlutterBinding.ensureInitialized(); + + testWidgets('Is true true?', (WidgetTester tester) async { + expect(true, isTrue); + }); +} From 8f46c64c017805d700f7379e67633cea30f6a2ee Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 5 Nov 2019 14:45:17 -0800 Subject: [PATCH 03/10] Add e2e tests to MainActivity --- .../plugins/firebasedynamiclinksexample/MainActivity.java | 2 ++ packages/firebase_dynamic_links/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java index f012f15adc6e..c534cfd88bb7 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java +++ b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java @@ -1,5 +1,6 @@ package io.flutter.plugins.firebasedynamiclinksexample; +import dev.flutter.plugins.e2e.E2EPlugin; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin; @@ -9,5 +10,6 @@ public class MainActivity extends FlutterActivity { @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { flutterEngine.getPlugins().add(new FirebaseDynamicLinksPlugin()); + flutterEngine.getPlugins().add(new E2EPlugin()); } } diff --git a/packages/firebase_dynamic_links/pubspec.yaml b/packages/firebase_dynamic_links/pubspec.yaml index 1ebaffaeb31b..125830c6402a 100644 --- a/packages/firebase_dynamic_links/pubspec.yaml +++ b/packages/firebase_dynamic_links/pubspec.yaml @@ -27,4 +27,4 @@ flutter: environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" - flutter: ">=1.9.1+hotfix.5 <2.0.0" + flutter: ">=1.9.1+hotfix.4 <2.0.0" From 2d28e848e25ec2aa3bf82de88c1829d912bd3011 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 5 Nov 2019 14:49:18 -0800 Subject: [PATCH 04/10] Formatting --- .../firebasedynamiclinks/FirebaseDynamicLinksPlugin.java | 6 +++--- .../firebasedynamiclinks/EmbeddingV1ActivityTest.java | 2 +- .../plugins/firebasedynamiclinks/MainActivityTest.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index c6a376dcf793..5398b06e2373 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -31,7 +31,8 @@ import java.util.Map; /** FirebaseDynamicLinksPlugin */ -public class FirebaseDynamicLinksPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler, NewIntentListener { +public class FirebaseDynamicLinksPlugin + implements FlutterPlugin, ActivityAware, MethodCallHandler, NewIntentListener { private Registrar registrar; private MethodChannel channel; private ActivityPluginBinding activityBinding; @@ -41,7 +42,7 @@ private FirebaseDynamicLinksPlugin(Registrar registrar, MethodChannel channel) { this.channel = channel; } - public FirebaseDynamicLinksPlugin() { } + public FirebaseDynamicLinksPlugin() {} public static void registerWith(Registrar registrar) { final MethodChannel channel = createChannel(registrar.messenger()); @@ -194,7 +195,6 @@ private Activity getActivity() { return registrar != null ? registrar.activity() : activityBinding.getActivity(); } - private OnCompleteListener createShortLinkListener(final Result result) { return new OnCompleteListener() { @Override diff --git a/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java index cc5fe571cb11..e46c9dea4e3c 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java +++ b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/EmbeddingV1ActivityTest.java @@ -11,4 +11,4 @@ public class EmbeddingV1ActivityTest { @Rule public ActivityTestRule rule = new ActivityTestRule<>(EmbeddingV1Activity.class); -} \ No newline at end of file +} diff --git a/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java index 72b3e1976cbf..da558649436f 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java +++ b/packages/firebase_dynamic_links/example/android/app/src/androidTest/java/io/flutter/plugins/firebasedynamiclinks/MainActivityTest.java @@ -9,4 +9,4 @@ @RunWith(FlutterRunner.class) public class MainActivityTest { @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); -} \ No newline at end of file +} From 21afcbee51a92a06c261984a37c4ff1d6d056992 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 5 Nov 2019 14:54:21 -0800 Subject: [PATCH 05/10] version bump --- packages/firebase_admob/CHANGELOG.md | 4 ++++ packages/firebase_admob/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/firebase_admob/CHANGELOG.md b/packages/firebase_admob/CHANGELOG.md index 9b16c5e7c762..a1788c22e8c2 100644 --- a/packages/firebase_admob/CHANGELOG.md +++ b/packages/firebase_admob/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.0+8 + +* + ## 0.9.0+7 * Update Android gradle plugin, gradle, and Admob versions. diff --git a/packages/firebase_admob/pubspec.yaml b/packages/firebase_admob/pubspec.yaml index d741765b358a..f719fe72d82c 100644 --- a/packages/firebase_admob/pubspec.yaml +++ b/packages/firebase_admob/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Firebase AdMob, supporting banner, interstitial (full-screen), and rewarded video ads author: Flutter Team homepage: https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_admob -version: 0.9.0+7 +version: 0.9.0+8 flutter: plugin: From 4cb1fa9d351d14714892e875968f40285bb180d1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 5 Nov 2019 15:03:54 -0800 Subject: [PATCH 06/10] Update dynamic links version --- packages/firebase_admob/CHANGELOG.md | 4 ---- packages/firebase_admob/pubspec.yaml | 2 +- packages/firebase_dynamic_links/CHANGELOG.md | 4 ++++ packages/firebase_dynamic_links/pubspec.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/firebase_admob/CHANGELOG.md b/packages/firebase_admob/CHANGELOG.md index a1788c22e8c2..9b16c5e7c762 100644 --- a/packages/firebase_admob/CHANGELOG.md +++ b/packages/firebase_admob/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.9.0+8 - -* - ## 0.9.0+7 * Update Android gradle plugin, gradle, and Admob versions. diff --git a/packages/firebase_admob/pubspec.yaml b/packages/firebase_admob/pubspec.yaml index f719fe72d82c..d741765b358a 100644 --- a/packages/firebase_admob/pubspec.yaml +++ b/packages/firebase_admob/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Firebase AdMob, supporting banner, interstitial (full-screen), and rewarded video ads author: Flutter Team homepage: https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_admob -version: 0.9.0+8 +version: 0.9.0+7 flutter: plugin: diff --git a/packages/firebase_dynamic_links/CHANGELOG.md b/packages/firebase_dynamic_links/CHANGELOG.md index 87d9215c5241..138170533c14 100644 --- a/packages/firebase_dynamic_links/CHANGELOG.md +++ b/packages/firebase_dynamic_links/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.0+5 + +* + ## 0.5.0+4 * Fix example app build by updating version of `url_launcher` that is compatible with androidx apps. diff --git a/packages/firebase_dynamic_links/pubspec.yaml b/packages/firebase_dynamic_links/pubspec.yaml index 125830c6402a..ff64ddaf9b7c 100644 --- a/packages/firebase_dynamic_links/pubspec.yaml +++ b/packages/firebase_dynamic_links/pubspec.yaml @@ -1,7 +1,7 @@ name: firebase_dynamic_links description: Flutter plugin for Google Dynamic Links for Firebase, an app solution for creating and handling links across multiple platforms. -version: 0.5.0+4 +version: 0.5.0+5 author: Flutter Team homepage: https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_dynamic_links From 692502195fe243981e5b2380423ace8b4849a033 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 11 Nov 2019 15:43:14 -0800 Subject: [PATCH 07/10] Remove splashscreen from MainActivity --- .../firebasedynamiclinks/FirebaseDynamicLinksPlugin.java | 2 +- .../example/android/app/src/main/AndroidManifest.xml | 3 --- .../test/firebase_dynamic_links_e2e.dart | 2 ++ 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index 5398b06e2373..49da35003214 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -162,7 +162,7 @@ private Map getMapFromPendingDynamicLinkData( private void handleGetInitialDynamicLink(final Result result) { // If there's no activity, then there's no initial dynamic link. - if (registrar.activity() == null && activityBinding == null) { + if ((registrar != null && registrar.activity() == null) && activityBinding == null) { result.success(null); return; } diff --git a/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml b/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml index ff675f253409..9f2179a23235 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml +++ b/packages/firebase_dynamic_links/example/android/app/src/main/AndroidManifest.xml @@ -14,9 +14,6 @@ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> - diff --git a/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart b/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart index 54ceb7c6f26a..c9165b039ee5 100644 --- a/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart +++ b/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart @@ -1,6 +1,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:e2e/e2e.dart'; +import '../lib/firebase_dynamic_links.dart'; + void main() { E2EWidgetsFlutterBinding.ensureInitialized(); From 48452fe1b3963163f3937f9b592057789259643e Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 12 Nov 2019 11:39:30 -0800 Subject: [PATCH 08/10] Add an actual test --- .../test/firebase_dynamic_links_e2e.dart | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart b/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart index c9165b039ee5..e2927d8e500c 100644 --- a/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart +++ b/packages/firebase_dynamic_links/test/firebase_dynamic_links_e2e.dart @@ -6,7 +6,27 @@ import '../lib/firebase_dynamic_links.dart'; void main() { E2EWidgetsFlutterBinding.ensureInitialized(); - testWidgets('Is true true?', (WidgetTester tester) async { - expect(true, isTrue); + testWidgets('buildUrl', (WidgetTester tester) async { + final DynamicLinkParameters parameters = DynamicLinkParameters( + uriPrefix: 'https://cx4k7.app.goo.gl', + link: Uri.parse('https://dynamic.link.example/helloworld'), + androidParameters: AndroidParameters( + packageName: 'io.flutter.plugins.firebasedynamiclinksexample', + minimumVersion: 0, + ), + dynamicLinkParametersOptions: DynamicLinkParametersOptions( + shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short, + ), + iosParameters: IosParameters( + bundleId: 'com.google.FirebaseCppDynamicLinksTestApp.dev', + minimumVersion: '0', + ), + ); + + final Uri uri = await parameters.buildUrl(); + expect( + uri.toString(), + 'https://cx4k7.app.goo.gl?amv=0&apn=io.flutter.plugins.firebasedynamiclinksexample&ibi=com.google.FirebaseCppDynamicLinksTestApp.dev&imv=0&link=https%3A%2F%2Fdynamic.link.example%2Fhelloworld', + ); }); } From 526b88bccd1c5a777083aaff8c244115c5c0e982 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 13 Nov 2019 11:40:14 -0800 Subject: [PATCH 09/10] Documentation --- .../FirebaseDynamicLinksPlugin.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index 49da35003214..ecab99bbfb9b 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -30,7 +30,11 @@ import java.util.List; import java.util.Map; -/** FirebaseDynamicLinksPlugin */ +/** + * Flutter plugin accessing for Firebase Dynamic Links API. + * + *

Instantiate this in an add to app scenario to gracefully handle activity and context changes. + */ public class FirebaseDynamicLinksPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler, NewIntentListener { private Registrar registrar; @@ -42,8 +46,23 @@ private FirebaseDynamicLinksPlugin(Registrar registrar, MethodChannel channel) { this.channel = channel; } + /** + * Default Constructor. + * + *

Use this when adding the plugin to your FlutterEngine

+ */ public FirebaseDynamicLinksPlugin() {} + /** + * Registers a plugin with the v1 embedding api {@code io.flutter.plugin.common}. + * + *

Calling this will register the plugin with the passed registrar. However, plugins + * initialized this way won't react to changes in activity or context. + * + * @param registrar attaches this plugin's {@link + * io.flutter.plugin.common.MethodChannel.MethodCallHandler} to the registrar's {@link + * io.flutter.plugin.common.BinaryMessenger}. + */ public static void registerWith(Registrar registrar) { final MethodChannel channel = createChannel(registrar.messenger()); final FirebaseDynamicLinksPlugin plugin = new FirebaseDynamicLinksPlugin(registrar, channel); From 5e6e755272a729a1c55384eea46202d71021d161 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 20 Nov 2019 12:39:45 -0800 Subject: [PATCH 10/10] Use activity paramter --- .../FirebaseDynamicLinksPlugin.java | 35 ++++++++----------- .../MainActivity.java | 2 ++ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index 3dbeb60e7dfb..31e2567349fe 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -37,19 +37,18 @@ */ public class FirebaseDynamicLinksPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler, NewIntentListener { - private Registrar registrar; + private Activity activity; private MethodChannel channel; - private ActivityPluginBinding activityBinding; - private FirebaseDynamicLinksPlugin(Registrar registrar, MethodChannel channel) { - this.registrar = registrar; + private FirebaseDynamicLinksPlugin(Activity activity, MethodChannel channel) { + this.activity = activity; this.channel = channel; } /** * Default Constructor. * - *

Use this when adding the plugin to your FlutterEngine

+ *

Use this when adding the plugin to your FlutterEngine */ public FirebaseDynamicLinksPlugin() {} @@ -65,7 +64,8 @@ public FirebaseDynamicLinksPlugin() {} */ public static void registerWith(Registrar registrar) { final MethodChannel channel = createChannel(registrar.messenger()); - final FirebaseDynamicLinksPlugin plugin = new FirebaseDynamicLinksPlugin(registrar, channel); + final FirebaseDynamicLinksPlugin plugin = + new FirebaseDynamicLinksPlugin(registrar.activity(), channel); registrar.addNewIntentListener(plugin); channel.setMethodCallHandler(plugin); } @@ -117,26 +117,24 @@ public void onDetachedFromEngine(FlutterPluginBinding binding) { @Override public void onAttachedToActivity(ActivityPluginBinding binding) { - activityBinding = binding; - activityBinding.addOnNewIntentListener(this); + activity = binding.getActivity(); + binding.addOnNewIntentListener(this); } @Override public void onDetachedFromActivityForConfigChanges() { - activityBinding.removeOnNewIntentListener(this); - activityBinding = null; + activity = null; } @Override public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) { - activityBinding = binding; - activityBinding.addOnNewIntentListener(this); + activity = binding.getActivity(); + binding.addOnNewIntentListener(this); } @Override public void onDetachedFromActivity() { - activityBinding.removeOnNewIntentListener(this); - activityBinding = null; + activity = null; } @Override @@ -205,24 +203,19 @@ public void onFailure(Exception e) { }); } - private Activity getActivity() { - return registrar != null ? registrar.activity() : activityBinding.getActivity(); - } - private void handleGetDynamicLink(final Result result, Uri uri) { addDynamicLinkListener(FirebaseDynamicLinks.getInstance().getDynamicLink(uri), result); } private void handleGetInitialDynamicLink(final Result result) { // If there's no activity, then there's no initial dynamic link. - if (registrar.activity() == null) { + if (activity == null) { result.success(null); return; } addDynamicLinkListener( - FirebaseDynamicLinks.getInstance().getDynamicLink(registrar.activity().getIntent()), - result); + FirebaseDynamicLinks.getInstance().getDynamicLink(activity.getIntent()), result); } private OnCompleteListener createShortLinkListener(final Result result) { diff --git a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java index c534cfd88bb7..4b1e59618568 100644 --- a/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java +++ b/packages/firebase_dynamic_links/example/android/app/src/main/java/io/flutter/plugins/firebasedynamiclinksexample/MainActivity.java @@ -4,6 +4,7 @@ import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin; +import io.flutter.plugins.urllauncher.UrlLauncherPlugin; public class MainActivity extends FlutterActivity { // TODO(bparrishMines): Remove this once v2 of GeneratedPluginRegistrant rolls to stable. https://github.com/flutter/flutter/issues/42694 @@ -11,5 +12,6 @@ public class MainActivity extends FlutterActivity { public void configureFlutterEngine(FlutterEngine flutterEngine) { flutterEngine.getPlugins().add(new FirebaseDynamicLinksPlugin()); flutterEngine.getPlugins().add(new E2EPlugin()); + flutterEngine.getPlugins().add(new UrlLauncherPlugin()); } }