Skip to content

Commit

Permalink
Migrate iOS and Android to use pushRouteInformation (flutter#39372)
Browse files Browse the repository at this point in the history
* Migrate iOS and Android to use pushRouteInformation

* revert

* fix test
  • Loading branch information
chunhtai authored Feb 8, 2023
1 parent 0d56533 commit 89c8a13
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -829,11 +829,13 @@ void onRequestPermissionsResult(
void onNewIntent(@NonNull Intent intent) {
ensureAlive();
if (flutterEngine != null) {
Log.v(TAG, "Forwarding onNewIntent() to FlutterEngine and sending pushRoute message.");
Log.v(
TAG,
"Forwarding onNewIntent() to FlutterEngine and sending pushRouteInformation message.");
flutterEngine.getActivityControlSurface().onNewIntent(intent);
String initialRoute = maybeGetInitialRouteFromIntent(intent);
if (initialRoute != null && !initialRoute.isEmpty()) {
flutterEngine.getNavigationChannel().pushRoute(initialRoute);
flutterEngine.getNavigationChannel().pushRouteInformation(initialRoute);
}
} else {
Log.w(TAG, "onNewIntent() invoked before FlutterFragment was attached to an Activity.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import io.flutter.plugin.common.JSONMethodCodec;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import java.util.HashMap;
import java.util.Map;

/** TODO(mattcarroll): fill in javadoc for NavigationChannel. */
public class NavigationChannel {
Expand Down Expand Up @@ -43,6 +45,13 @@ public void pushRoute(@NonNull String route) {
channel.invokeMethod("pushRoute", route);
}

public void pushRouteInformation(@NonNull String route) {
Log.v(TAG, "Sending message to push route information '" + route + "'");
Map<String, String> message = new HashMap<>();
message.put("location", route);
channel.invokeMethod("pushRouteInformation", message);
}

public void popRoute() {
Log.v(TAG, "Sending message to pop route.");
channel.invokeMethod("popRoute", null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,7 @@ public void itSendsdefaultInitialRouteOnStartIfNotDeepLinkingFromIntent() {
}

@Test
public void itSendsPushRouteMessageWhenOnNewIntent() {
public void itSendsPushRouteInformationMessageWhenOnNewIntent() {
when(mockHost.shouldHandleDeeplinking()).thenReturn(true);
// Create the real object that we're testing.
FlutterActivityAndFragmentDelegate delegate = new FlutterActivityAndFragmentDelegate(mockHost);
Expand All @@ -742,11 +742,11 @@ public void itSendsPushRouteMessageWhenOnNewIntent() {

// Verify that the navigation channel was given the push route message.
verify(mockFlutterEngine.getNavigationChannel(), times(1))
.pushRoute("/custom/route?query=test");
.pushRouteInformation("/custom/route?query=test");
}

@Test
public void itDoesNotSendPushRouteMessageWhenOnNewIntentIsNonHierarchicalUri() {
public void itDoesNotSendPushRouteInformationMessageWhenOnNewIntentIsNonHierarchicalUri() {
when(mockHost.shouldHandleDeeplinking()).thenReturn(true);
// Create the real object that we're testing.
FlutterActivityAndFragmentDelegate delegate = new FlutterActivityAndFragmentDelegate(mockHost);
Expand All @@ -764,11 +764,12 @@ public void itDoesNotSendPushRouteMessageWhenOnNewIntentIsNonHierarchicalUri() {
delegate.onNewIntent(mockIntent);

// Verify that the navigation channel was not given a push route message.
verify(mockFlutterEngine.getNavigationChannel(), times(0)).pushRoute("mailto:[email protected]");
verify(mockFlutterEngine.getNavigationChannel(), times(0))
.pushRouteInformation("mailto:[email protected]");
}

@Test
public void itSendsPushRouteMessageWhenOnNewIntentWithQueryParameterAndFragment() {
public void itSendsPushRouteInformationMessageWhenOnNewIntentWithQueryParameterAndFragment() {
when(mockHost.shouldHandleDeeplinking()).thenReturn(true);
// Create the real object that we're testing.
FlutterActivityAndFragmentDelegate delegate = new FlutterActivityAndFragmentDelegate(mockHost);
Expand All @@ -785,11 +786,11 @@ public void itSendsPushRouteMessageWhenOnNewIntentWithQueryParameterAndFragment(

// Verify that the navigation channel was given the push route message.
verify(mockFlutterEngine.getNavigationChannel(), times(1))
.pushRoute("/custom/route?query=test#fragment");
.pushRouteInformation("/custom/route?query=test#fragment");
}

@Test
public void itSendsPushRouteMessageWhenOnNewIntentWithFragmentNoQueryParameter() {
public void itSendsPushRouteInformationMessageWhenOnNewIntentWithFragmentNoQueryParameter() {
when(mockHost.shouldHandleDeeplinking()).thenReturn(true);
// Create the real object that we're testing.
FlutterActivityAndFragmentDelegate delegate = new FlutterActivityAndFragmentDelegate(mockHost);
Expand All @@ -804,11 +805,12 @@ public void itSendsPushRouteMessageWhenOnNewIntentWithFragmentNoQueryParameter()
delegate.onNewIntent(mockIntent);

// Verify that the navigation channel was given the push route message.
verify(mockFlutterEngine.getNavigationChannel(), times(1)).pushRoute("/custom/route#fragment");
verify(mockFlutterEngine.getNavigationChannel(), times(1))
.pushRouteInformation("/custom/route#fragment");
}

@Test
public void itSendsPushRouteMessageWhenOnNewIntentNoQueryParameter() {
public void itSendsPushRouteInformationMessageWhenOnNewIntentNoQueryParameter() {
when(mockHost.shouldHandleDeeplinking()).thenReturn(true);
// Create the real object that we're testing.
FlutterActivityAndFragmentDelegate delegate = new FlutterActivityAndFragmentDelegate(mockHost);
Expand All @@ -823,7 +825,8 @@ public void itSendsPushRouteMessageWhenOnNewIntentNoQueryParameter() {
delegate.onNewIntent(mockIntent);

// Verify that the navigation channel was given the push route message.
verify(mockFlutterEngine.getNavigationChannel(), times(1)).pushRoute("/custom/route");
verify(mockFlutterEngine.getNavigationChannel(), times(1))
.pushRouteInformation("/custom/route");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,11 @@ - (BOOL)openURL:(NSURL*)url {
if ([url.fragment length] != 0) {
fullRoute = [NSString stringWithFormat:@"%@#%@", fullRoute, url.fragment];
}
[flutterViewController.engine.navigationChannel invokeMethod:@"pushRoute"
arguments:fullRoute];
[flutterViewController.engine.navigationChannel
invokeMethod:@"pushRouteInformation"
arguments:@{
@"location" : fullRoute,
}];
}
}];
return YES;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ - (void)testLaunchUrl {
openURL:[NSURL URLWithString:@"http://myApp/custom/route?query=test"]
options:@{}];
XCTAssertTrue(result);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRoute"
arguments:@"/custom/route?query=test"]);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRouteInformation"
arguments:@{@"location" : @"/custom/route?query=test"}]);
}

- (void)testLaunchUrlWithDeepLinkingNotSet {
Expand Down Expand Up @@ -104,8 +104,9 @@ - (void)testLaunchUrlWithQueryParameterAndFragment {
openURL:[NSURL URLWithString:@"http://myApp/custom/route?query=test#fragment"]
options:@{}];
XCTAssertTrue(result);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRoute"
arguments:@"/custom/route?query=test#fragment"]);
OCMVerify([self.mockNavigationChannel
invokeMethod:@"pushRouteInformation"
arguments:@{@"location" : @"/custom/route?query=test#fragment"}]);
}

- (void)testLaunchUrlWithFragmentNoQueryParameter {
Expand All @@ -117,8 +118,8 @@ - (void)testLaunchUrlWithFragmentNoQueryParameter {
openURL:[NSURL URLWithString:@"http://myApp/custom/route#fragment"]
options:@{}];
XCTAssertTrue(result);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRoute"
arguments:@"/custom/route#fragment"]);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRouteInformation"
arguments:@{@"location" : @"/custom/route#fragment"}]);
}

- (void)testReleasesWindowOnDealloc {
Expand All @@ -139,7 +140,7 @@ - (void)testReleasesWindowOnDealloc {

#pragma mark - Deep linking

- (void)testUniversalLinkPushRoute {
- (void)testUniversalLinkPushRouteInformation {
OCMStub([self.mockMainBundle objectForInfoDictionaryKey:@"FlutterDeepLinkingEnabled"])
.andReturn(@YES);

Expand All @@ -151,8 +152,8 @@ - (void)testUniversalLinkPushRoute {
restorationHandler:^(NSArray<id<UIUserActivityRestoring>>* __nullable restorableObjects){
}];
XCTAssertTrue(result);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRoute"
arguments:@"/custom/route?query=test"]);
OCMVerify([self.mockNavigationChannel invokeMethod:@"pushRouteInformation"
arguments:@{@"location" : @"/custom/route?query=test"}]);
}

@end

0 comments on commit 89c8a13

Please sign in to comment.