From 0be4fe73978159273355cb32d58c20d239f25908 Mon Sep 17 00:00:00 2001 From: hangyujin <108393416+hangyujin@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:24:04 -0700 Subject: [PATCH 01/12] shouldHandleDeeplinking defaults to true --- .../android/io/flutter/embedding/android/FlutterActivity.java | 4 ++-- .../io/flutter/embedding/android/FlutterFragmentActivity.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java index d536fed70dd06..3fb2887e4a280 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java @@ -1405,10 +1405,10 @@ public boolean shouldHandleDeeplinking() { try { Bundle metaData = getMetaData(); boolean shouldHandleDeeplinking = - metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : false; + metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : true; return shouldHandleDeeplinking; } catch (PackageManager.NameNotFoundException e) { - return false; + return true; } } diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java index fda8a7c21da97..6d23d3da526ed 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java @@ -696,10 +696,10 @@ protected boolean shouldHandleDeeplinking() { try { Bundle metaData = getMetaData(); boolean shouldHandleDeeplinking = - metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : false; + metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : true; return shouldHandleDeeplinking; } catch (PackageManager.NameNotFoundException e) { - return false; + return true; } } From 4653527d2c9978611baf798ab75d72ef2f6d1f3c Mon Sep 17 00:00:00 2001 From: hangyujin <108393416+hangyujin@users.noreply.github.com> Date: Tue, 23 Apr 2024 18:19:33 -0700 Subject: [PATCH 02/12] update flag default value --- .../embedding/android/FlutterActivity.java | 17 +++++++++-------- .../android/FlutterFragmentActivity.java | 14 ++++++++------ .../ios/framework/Source/FlutterAppDelegate.mm | 4 ++-- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java index 3fb2887e4a280..a47e0e55e3f0d 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java @@ -1399,15 +1399,16 @@ public boolean shouldAttachEngineToActivity() { *
The default implementation looks {@code Defaults to {@code true}.
*/
- @Override
- public boolean shouldHandleDeeplinking() {
- try {
- Bundle metaData = getMetaData();
- boolean shouldHandleDeeplinking =
- metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : true;
- return shouldHandleDeeplinking;
- } catch (PackageManager.NameNotFoundException e) {
+ @VisibleForTesting
+ protected boolean shouldHandleDeeplinking() {
+ Bundle metaData = getMetaData();
+ // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
+ if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
+ return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
+ } else {
+ // Return true if the deep linking flag is not found in metadata.
return true;
}
}
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
index 6d23d3da526ed..c7c61a8952775 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
@@ -690,15 +690,17 @@ protected boolean shouldAttachEngineToActivity() {
* The default implementation looks {@code Defaults to {@code true}.
*/
@VisibleForTesting
protected boolean shouldHandleDeeplinking() {
- try {
- Bundle metaData = getMetaData();
- boolean shouldHandleDeeplinking =
- metaData != null ? metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY) : true;
- return shouldHandleDeeplinking;
- } catch (PackageManager.NameNotFoundException e) {
+ Bundle metaData = getMetaData();
+ // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
+ if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
+ return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
+ } else {
+ // Return true if the deep linking flag is not found in metadata.
return true;
}
}
diff --git a/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm b/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm
index 4c2d0cecc2554..6f784e7de374f 100644
--- a/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm
+++ b/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm
@@ -137,8 +137,8 @@ - (void)userNotificationCenter:(UNUserNotificationCenter*)center
- (BOOL)isFlutterDeepLinkingEnabled {
NSNumber* isDeepLinkingEnabled =
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"FlutterDeepLinkingEnabled"];
- // if not set, return NO
- return isDeepLinkingEnabled ? [isDeepLinkingEnabled boolValue] : NO;
+ // if not set, return YES
+ return isDeepLinkingEnabled ? [isDeepLinkingEnabled boolValue] : YES;
}
// This method is called when opening an URL with custom schemes.
From 4a05924851acfe2c827b6788c6ebd4014ba6fee0 Mon Sep 17 00:00:00 2001
From: hangyujin <108393416+hangyujin@users.noreply.github.com>
Date: Tue, 23 Apr 2024 18:20:52 -0700
Subject: [PATCH 03/12] lint
---
.../android/io/flutter/embedding/android/FlutterActivity.java | 1 +
.../io/flutter/embedding/android/FlutterFragmentActivity.java | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
index a47e0e55e3f0d..60ab1c8f45df5 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
@@ -1399,6 +1399,7 @@ public boolean shouldAttachEngineToActivity() {
* The default implementation looks {@code Defaults to {@code true}.
*/
@VisibleForTesting
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
index c7c61a8952775..5a272efa5eb62 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
@@ -690,7 +690,7 @@ protected boolean shouldAttachEngineToActivity() {
* The default implementation looks {@code Defaults to {@code true}.
*/
@VisibleForTesting
From 96e87e304ed53d2916e86072c352ec038b44467b Mon Sep 17 00:00:00 2001
From: hangyujin <108393416+hangyujin@users.noreply.github.com>
Date: Tue, 23 Apr 2024 18:25:09 -0700
Subject: [PATCH 04/12] update
---
.../embedding/android/FlutterActivity.java | 22 +++++++++++--------
.../android/FlutterFragmentActivity.java | 18 +++++++++------
2 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
index 60ab1c8f45df5..16a7537d35ca8 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
@@ -1402,15 +1402,19 @@ public boolean shouldAttachEngineToActivity() {
*
* Defaults to {@code true}.
*/
- @VisibleForTesting
- protected boolean shouldHandleDeeplinking() {
- Bundle metaData = getMetaData();
- // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
- if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
- return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
- } else {
- // Return true if the deep linking flag is not found in metadata.
- return true;
+ @Override
+ public boolean shouldHandleDeeplinking() {
+ try {
+ Bundle metaData = getMetaData();
+ // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
+ if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
+ return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
+ } else {
+ // Return true if the deep linking flag is not found in metadata.
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
}
}
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
index 5a272efa5eb62..1328da914daf0 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
@@ -695,13 +695,17 @@ protected boolean shouldAttachEngineToActivity() {
*/
@VisibleForTesting
protected boolean shouldHandleDeeplinking() {
- Bundle metaData = getMetaData();
- // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
- if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
- return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
- } else {
- // Return true if the deep linking flag is not found in metadata.
- return true;
+ try {
+ Bundle metaData = getMetaData();
+ // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
+ if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
+ return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
+ } else {
+ // Return true if the deep linking flag is not found in metadata.
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
}
}
From 8ea2d1ba91bfa5c36c5e25f78ce3b62780070973 Mon Sep 17 00:00:00 2001
From: hangyujin <108393416+hangyujin@users.noreply.github.com>
Date: Tue, 23 Apr 2024 18:36:39 -0700
Subject: [PATCH 05/12] add tests
---
.../io/flutter/embedding/android/FlutterActivityTest.java | 4 ++--
.../embedding/android/FlutterFragmentActivityTest.java | 6 ++++--
.../darwin/ios/framework/Source/FlutterAppDelegateTest.mm | 6 ++++--
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java
index f660e32ebabdf..8dfbd4a0ce40f 100644
--- a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java
+++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java
@@ -332,8 +332,8 @@ public void itReturnsValueFromMetaDataWhenCallsShouldHandleDeepLinkingCase3()
Bundle bundle = new Bundle();
FlutterActivity spyFlutterActivity = spy(flutterActivity);
when(spyFlutterActivity.getMetaData()).thenReturn(bundle);
- // Empty bundle should return false.
- assertFalse(spyFlutterActivity.shouldHandleDeeplinking());
+ // Empty bundle should return true.
+ assertTrue(spyFlutterActivity.shouldHandleDeeplinking());
}
@Test
diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java
index 17960263e996a..3dbf140d1f5a4 100644
--- a/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java
+++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java
@@ -23,6 +23,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import io.flutter.FlutterInjector;
import io.flutter.embedding.android.FlutterActivityLaunchConfigs.BackgroundMode;
+import io.flutter.embedding.android.FlutterFragmentActivityTest.FlutterFragmentActivityWithProvidedEngine;
+import io.flutter.embedding.android.FlutterFragmentActivityTest.FlutterFragmentActivityWithRootLayout.CustomLayout;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterJNI;
import io.flutter.embedding.engine.loader.FlutterLoader;
@@ -180,8 +182,8 @@ public void itReturnsValueFromMetaDataWhenCallsShouldHandleDeepLinkingCase3()
Bundle bundle = new Bundle();
FlutterFragmentActivity spyFlutterActivity = spy(activity);
when(spyFlutterActivity.getMetaData()).thenReturn(bundle);
- // Empty bundle should return false.
- assertFalse(spyFlutterActivity.shouldHandleDeeplinking());
+ // Empty bundle should return true.
+ assertTrue(spyFlutterActivity.shouldHandleDeeplinking());
}
@Test
diff --git a/shell/platform/darwin/ios/framework/Source/FlutterAppDelegateTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterAppDelegateTest.mm
index 3caddbc53254a..ba6aefe6826ac 100644
--- a/shell/platform/darwin/ios/framework/Source/FlutterAppDelegateTest.mm
+++ b/shell/platform/darwin/ios/framework/Source/FlutterAppDelegateTest.mm
@@ -84,8 +84,10 @@ - (void)testLaunchUrlWithDeepLinkingNotSet {
[self.appDelegate application:[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"http://myApp/custom/route?query=test"]
options:@{}];
- XCTAssertFalse(result);
- OCMReject([self.mockNavigationChannel invokeMethod:OCMOCK_ANY arguments:OCMOCK_ANY]);
+ XCTAssertTrue(result);
+ OCMVerify([self.mockNavigationChannel
+ invokeMethod:@"pushRouteInformation"
+ arguments:@{@"location" : @"http://myApp/custom/route?query=test"}]);
}
- (void)testLaunchUrlWithDeepLinkingDisabled {
From 8f1b9c5c6d6193158c5231c8587e6c44c489a128 Mon Sep 17 00:00:00 2001
From: hangyujin <108393416+hangyujin@users.noreply.github.com>
Date: Wed, 24 Apr 2024 13:28:51 -0700
Subject: [PATCH 06/12] Update FlutterFragmentActivityTest.java
---
.../flutter/embedding/android/FlutterFragmentActivityTest.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java
index 3dbf140d1f5a4..2ecb7aeea8f52 100644
--- a/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java
+++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java
@@ -23,8 +23,6 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import io.flutter.FlutterInjector;
import io.flutter.embedding.android.FlutterActivityLaunchConfigs.BackgroundMode;
-import io.flutter.embedding.android.FlutterFragmentActivityTest.FlutterFragmentActivityWithProvidedEngine;
-import io.flutter.embedding.android.FlutterFragmentActivityTest.FlutterFragmentActivityWithRootLayout.CustomLayout;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterJNI;
import io.flutter.embedding.engine.loader.FlutterLoader;
From eb0a4ef102c3d0a017cdecbc845cee9611d1c5f0 Mon Sep 17 00:00:00 2001
From: hangyu The default implementation looks {@code Defaults to {@code true}.
+ */
+ public static boolean deepLinkEnabled(Bundle metaData) {
+ // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
+ if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
+ return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
+ } else {
+ // Return true if the deep linking flag is not found in metadata.
+ return true;
+ }
+ }
+
private FlutterActivityLaunchConfigs() {}
}
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
index 1328da914daf0..8596135514e2b 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
@@ -19,6 +19,7 @@
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.HANDLE_DEEPLINKING_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.INITIAL_ROUTE_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.NORMAL_THEME_META_DATA_KEY;
+import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.deepLinkEnabled;
import android.content.Context;
import android.content.Intent;
@@ -697,13 +698,7 @@ protected boolean shouldAttachEngineToActivity() {
protected boolean shouldHandleDeeplinking() {
try {
Bundle metaData = getMetaData();
- // Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
- if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
- return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
- } else {
- // Return true if the deep linking flag is not found in metadata.
- return true;
- }
+ return deepLinkEnabled(metaData);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
From 318ab2545cea704df744f45d6ee7b43209a8b325 Mon Sep 17 00:00:00 2001
From: hangyu Defaults to {@code true}.
*/
- public static boolean deepLinkEnabled(Bundle metaData) {
+ public static boolean deepLinkEnabled(Bundle metaData) {
// Check if metadata is not null and contains the HANDLE_DEEPLINKING_META_DATA_KEY.
if (metaData != null && metaData.containsKey(HANDLE_DEEPLINKING_META_DATA_KEY)) {
return metaData.getBoolean(HANDLE_DEEPLINKING_META_DATA_KEY);
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
index 8596135514e2b..a6f4962c1b4aa 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
@@ -16,7 +16,6 @@
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.EXTRA_DART_ENTRYPOINT_ARGS;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.EXTRA_DESTROY_ENGINE_WITH_ACTIVITY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE;
-import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.HANDLE_DEEPLINKING_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.INITIAL_ROUTE_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.NORMAL_THEME_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.deepLinkEnabled;
From 740ffa986da95d66f8f9dd901f9c1df4e77684ec Mon Sep 17 00:00:00 2001
From: hangyu The default implementation looks {@code Defaults to {@code true}.
*/
@Override
public boolean shouldHandleDeeplinking() {
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
index a6f4962c1b4aa..d0562be102b99 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java
@@ -690,8 +690,6 @@ protected boolean shouldAttachEngineToActivity() {
* The default implementation looks {@code Defaults to {@code true}.
*/
@VisibleForTesting
protected boolean shouldHandleDeeplinking() {
From c22082d54eb72f98bdecc715af2302c510ed77e5 Mon Sep 17 00:00:00 2001
From: hangyu