Skip to content

Commit 419170a

Browse files
authored
Merge pull request #1 from em-yhoshino/feature/close-for-develop
Add closeAllIfPossible()
2 parents eff797d + 02294d9 commit 419170a

File tree

10 files changed

+88
-4
lines changed

10 files changed

+88
-4
lines changed

Diff for: flutter_custom_tabs/android/src/main/java/com/github/droibit/flutter/plugins/customtabs/CustomTabsPlugin.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ public void onDetachedFromActivity() {
7373
public void onMethodCall(@NonNull MethodCall call, @NonNull final MethodChannel.Result result) {
7474
if ("launch".equals(call.method)) {
7575
launch(((Map<String, Object>) call.arguments), result);
76-
} else {
76+
} if ("closeAllIfPossible".equals(call.method)) {
77+
closeAllIfPossible(result);
78+
}else {
7779
result.notImplemented();
7880
}
7981
}
@@ -98,4 +100,9 @@ private void launch(@NonNull Map<String, Object> args, @NonNull MethodChannel.Re
98100
result.error(CODE_LAUNCH_ERROR, e.getMessage(), null);
99101
}
100102
}
103+
104+
@SuppressWarnings({"unchecked", "ConstantConditions"})
105+
private void closeAllIfPossible(@NonNull MethodChannel.Result result) {
106+
result.success(null);
107+
}
101108
}

Diff for: flutter_custom_tabs/ios/Classes/CustomTabsPlugin.swift

+18
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ private let keyURL = "url"
66
private let keyOption = "safariVCOption"
77

88
public class CustomTabsPlugin: NSObject, FlutterPlugin {
9+
private var dismissStack = [() -> Void]()
10+
911
public static func register(with registrar: FlutterPluginRegistrar) {
1012
let channel = FlutterMethodChannel(
1113
name: "plugins.flutter.droibit.github.io/custom_tabs",
@@ -22,6 +24,8 @@ public class CustomTabsPlugin: NSObject, FlutterPlugin {
2224
let url = arguments[keyURL] as! String
2325
let option = arguments[keyOption] as! [String: Any]
2426
present(withURL: url, option: option, result: result)
27+
case "closeAllIfPossible":
28+
dismissAllIfPossible(result: result)
2529
default:
2630
result(FlutterMethodNotImplemented)
2731
}
@@ -31,6 +35,9 @@ public class CustomTabsPlugin: NSObject, FlutterPlugin {
3135
if #available(iOS 9.0, *) {
3236
if let topViewController = UIWindow.keyWindow?.topViewController() {
3337
let safariViewController = SFSafariViewController.make(url: URL(string: url)!, option: option)
38+
dismissStack.append({ [weak safariViewController] in
39+
safariViewController?.dismiss(animated: true)
40+
})
3441
topViewController.present(safariViewController, animated: true) {
3542
result(nil)
3643
}
@@ -39,6 +46,17 @@ public class CustomTabsPlugin: NSObject, FlutterPlugin {
3946
result(FlutterMethodNotImplemented)
4047
}
4148
}
49+
50+
private func dismissAllIfPossible(result: @escaping FlutterResult) {
51+
if #available(iOS 9.0, *) {
52+
while let task = dismissStack.popLast() {
53+
task()
54+
}
55+
result(nil)
56+
} else {
57+
result(FlutterMethodNotImplemented)
58+
}
59+
}
4260
}
4361

4462
private extension UIWindow {

Diff for: flutter_custom_tabs/lib/src/launcher.dart

+4
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,7 @@ void _applyStatusBarBrightnessTemporally(
9191
previousAutomaticSystemUiAdjustment;
9292
}
9393
}
94+
95+
Future<void> closeAllIfPossible() async {
96+
await CustomTabsPlatform.instance.closeAllIfPossible();
97+
}

Diff for: flutter_custom_tabs/pubspec.yaml

+11-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,17 @@ environment:
1010
dependencies:
1111
flutter:
1212
sdk: flutter
13-
flutter_custom_tabs_platform_interface: ^1.0.1
14-
flutter_custom_tabs_web: ^1.0.0
13+
flutter_custom_tabs_platform_interface:
14+
git:
15+
url: https://github.com/snkrdunk/flutter_custom_tabs.git
16+
ref: develop
17+
path: flutter_custom_tabs_platform_interface
18+
flutter_custom_tabs_web:
19+
git:
20+
url: https://github.com/snkrdunk/flutter_custom_tabs.git
21+
ref: develop
22+
path: flutter_custom_tabs_web
23+
1524
meta: ^1.3.0
1625

1726
dev_dependencies:

Diff for: flutter_custom_tabs/test/launcher_test.dart

+19
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@ void main() {
159159
await launchResult;
160160
expect(binding.renderView.automaticSystemUiAdjustment, isTrue);
161161
});
162+
163+
test('closeAllIfPossible', () async {
164+
when(mock.closeAllIfPossible()).thenAnswer((_) async => null);
165+
166+
await closeAllIfPossible();
167+
168+
verify(mock.closeAllIfPossible());
169+
});
162170
}
163171

164172
class _MockCustomTabsPlatform extends Mock
@@ -182,4 +190,15 @@ class _MockCustomTabsPlatform extends Mock
182190
returnValue: Future.value(null),
183191
);
184192
}
193+
194+
@override
195+
Future<void> closeAllIfPossible() async {
196+
return super.noSuchMethod(
197+
Invocation.method(
198+
#closeAllIfPossible,
199+
{},
200+
),
201+
returnValue: Future.value(null),
202+
);
203+
}
185204
}

Diff for: flutter_custom_tabs_platform_interface/lib/src/custom_tabs_platform.dart

+5
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,9 @@ abstract class CustomTabsPlatform extends PlatformInterface {
3737
}) {
3838
throw UnimplementedError('launch() has not been implemented.');
3939
}
40+
41+
/// Close all the launched implementation by platform if possible.
42+
Future<void> closeAllIfPossible() {
43+
throw UnimplementedError('closeAllIfPossible() has not been implemented.');
44+
}
4045
}

Diff for: flutter_custom_tabs_platform_interface/lib/src/method_channel_custom_tabs.dart

+5
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@ class MethodChannelCustomTabs extends CustomTabsPlatform {
2222
};
2323
return _channel.invokeMethod('launch', args);
2424
}
25+
26+
@override
27+
Future<void> closeAllIfPossible() {
28+
return _channel.invokeMethod('closeAllIfPossible');
29+
}
2530
}

Diff for: flutter_custom_tabs_platform_interface/test/src/method_channel_custom_tabs_test.dart

+10
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,14 @@ void main() {
5757
],
5858
);
5959
});
60+
61+
test('closeAllIfPossible invoke method "closeAllIfPossible"', () async {
62+
await customTabs.closeAllIfPossible();
63+
expect(
64+
log,
65+
<Matcher>[
66+
isMethodCall('closeAllIfPossible', arguments: null),
67+
],
68+
);
69+
});
6070
}

Diff for: flutter_custom_tabs_web/lib/flutter_custom_tabs_web.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,7 @@ class CustomTabsPlugin extends CustomTabsPlatform {
2323
final plugin = UrlLauncherPlatform.instance as UrlLauncherPlugin;
2424
return plugin.launch(urlString).then((_) => null);
2525
}
26+
27+
@override
28+
Future<void> closeAllIfPossible() {}
2629
}

Diff for: flutter_custom_tabs_web/pubspec.yaml

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ dependencies:
1212
sdk: flutter
1313
flutter_web_plugins:
1414
sdk: flutter
15-
flutter_custom_tabs_platform_interface: ^1.0.0
15+
flutter_custom_tabs_platform_interface:
16+
git:
17+
url: https://github.com/snkrdunk/flutter_custom_tabs.git
18+
ref: develop
19+
path: flutter_custom_tabs_platform_interface
1620
meta: ^1.3.0
1721
url_launcher_web: ^2.0.1
1822
url_launcher_platform_interface: ^2.0.3

0 commit comments

Comments
 (0)