From 929fdeae51b3ef6085c4e5f7c2f89717bc491bf6 Mon Sep 17 00:00:00 2001 From: Giacomo Pignoni Date: Sun, 23 Jun 2024 13:11:59 +0200 Subject: [PATCH 01/20] [quick_actions] add localizedSubtitle for iOS --- .../quick_actions/quick_actions/README.md | 2 +- .../quick_actions/example/lib/main.dart | 10 ++-- .../QuickActionsPlugin.swift | 3 +- .../quick_actions_ios/messages.g.swift | 41 ++++++-------- .../quick_actions_ios/lib/messages.g.dart | 54 ++++++++----------- .../lib/quick_actions_ios.dart | 1 + .../quick_actions_ios/pigeons/messages.dart | 4 ++ .../method_channel_quick_actions.dart | 1 + .../lib/types/shortcut_item.dart | 6 +++ 9 files changed, 59 insertions(+), 63 deletions(-) diff --git a/packages/quick_actions/quick_actions/README.md b/packages/quick_actions/quick_actions/README.md index ad9b2a8c3b9..6175f1fd9e6 100644 --- a/packages/quick_actions/quick_actions/README.md +++ b/packages/quick_actions/quick_actions/README.md @@ -34,7 +34,7 @@ Finally, manage the app's quick actions, for instance: ```dart quickActions.setShortcutItems([ const ShortcutItem(type: 'action_main', localizedTitle: 'Main view', icon: 'icon_main'), - const ShortcutItem(type: 'action_help', localizedTitle: 'Help', icon: 'icon_help') + const ShortcutItem(type: 'action_help', localizedTitle: 'Help', localizedSubtitle: 'Tap to get help', icon: 'icon_help') ]); ``` diff --git a/packages/quick_actions/quick_actions/example/lib/main.dart b/packages/quick_actions/quick_actions/example/lib/main.dart index 14429284c62..31a3a4a94e2 100644 --- a/packages/quick_actions/quick_actions/example/lib/main.dart +++ b/packages/quick_actions/quick_actions/example/lib/main.dart @@ -53,14 +53,16 @@ class _MyHomePageState extends State { const ShortcutItem( type: 'action_one', localizedTitle: 'Action one', - icon: 'AppIcon', + localizedSubtitle: 'Action one subtitle', + icon: 'icon_help', ), // NOTE: This second action icon will only work on Android. // In a real world project keep the same file name for both platforms. const ShortcutItem( - type: 'action_two', - localizedTitle: 'Action two', - icon: 'ic_launcher'), + type: 'action_two', + localizedTitle: 'Action two', + icon: 'ic_launcher', + ), ]).then((void _) { setState(() { if (shortcut == 'no action set') { diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift index dc8ffb812f3..e75f8284b7e 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift @@ -92,6 +92,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsA let type = shortcut.type let localizedTitle = shortcut.localizedTitle + let localizedSubtitle = shortcut.localizedSubtitle let icon = (shortcut.icon).map { UIApplicationShortcutIcon(templateImageName: $0) @@ -101,7 +102,7 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsA return UIApplicationShortcutItem( type: type, localizedTitle: localizedTitle, - localizedSubtitle: nil, + localizedSubtitle: localizedSubtitle, icon: icon, userInfo: nil) } diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift index f4a4091c333..c406dadd2db 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift @@ -29,7 +29,7 @@ final class PigeonError: Error { var localizedDescription: String { return "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" - } + } } private func wrapResult(_ result: Any?) -> [Any?] { @@ -59,9 +59,7 @@ private func wrapError(_ error: Any) -> [Any?] { } private func createConnectionError(withChannelName channelName: String) -> PigeonError { - return PigeonError( - code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", - details: "") + return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") } private func isNullish(_ value: Any?) -> Bool { @@ -81,6 +79,8 @@ struct ShortcutItemMessage { var type: String /// Localized title of the item. var localizedTitle: String + /// Localized subtitle of the item. + var localizedSubtitle: String? = nil /// Name of native resource to be displayed as the icon for this item. var icon: String? = nil @@ -88,11 +88,13 @@ struct ShortcutItemMessage { static func fromList(_ __pigeon_list: [Any?]) -> ShortcutItemMessage? { let type = __pigeon_list[0] as! String let localizedTitle = __pigeon_list[1] as! String - let icon: String? = nilOrValue(__pigeon_list[2]) + let localizedSubtitle: String? = nilOrValue(__pigeon_list[2]) + let icon: String? = nilOrValue(__pigeon_list[3]) return ShortcutItemMessage( type: type, localizedTitle: localizedTitle, + localizedSubtitle: localizedSubtitle, icon: icon ) } @@ -100,6 +102,7 @@ struct ShortcutItemMessage { return [ type, localizedTitle, + localizedSubtitle, icon, ] } @@ -152,16 +155,10 @@ protocol IOSQuickActionsApi { class IOSQuickActionsApiSetup { static var codec: FlutterStandardMessageCodec { messagesPigeonCodec.shared } /// Sets up an instance of `IOSQuickActionsApi` to handle messages through the `binaryMessenger`. - static func setUp( - binaryMessenger: FlutterBinaryMessenger, api: IOSQuickActionsApi?, - messageChannelSuffix: String = "" - ) { + static func setUp(binaryMessenger: FlutterBinaryMessenger, api: IOSQuickActionsApi?, messageChannelSuffix: String = "") { let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" /// Sets the dynamic shortcuts for the app. - let setShortcutItemsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let setShortcutItemsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setShortcutItemsChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -177,10 +174,7 @@ class IOSQuickActionsApiSetup { setShortcutItemsChannel.setMessageHandler(nil) } /// Removes all dynamic shortcuts. - let clearShortcutItemsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems\(channelSuffix)", - binaryMessenger: binaryMessenger, codec: codec) + let clearShortcutItemsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { clearShortcutItemsChannel.setMessageHandler { _, reply in do { @@ -198,8 +192,7 @@ class IOSQuickActionsApiSetup { /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol IOSQuickActionsFlutterApiProtocol { /// Sends a string representing a shortcut from the native platform to the app. - func launchAction( - action actionArg: String, completion: @escaping (Result) -> Void) + func launchAction(action actionArg: String, completion: @escaping (Result) -> Void) } class IOSQuickActionsFlutterApi: IOSQuickActionsFlutterApiProtocol { private let binaryMessenger: FlutterBinaryMessenger @@ -212,13 +205,9 @@ class IOSQuickActionsFlutterApi: IOSQuickActionsFlutterApiProtocol { return messagesPigeonCodec.shared } /// Sends a string representing a shortcut from the native platform to the app. - func launchAction( - action actionArg: String, completion: @escaping (Result) -> Void - ) { - let channelName: String = - "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction\(messageChannelSuffix)" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + func launchAction(action actionArg: String, completion: @escaping (Result) -> Void) { + let channelName: String = "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction\(messageChannelSuffix)" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([actionArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) diff --git a/packages/quick_actions/quick_actions_ios/lib/messages.g.dart b/packages/quick_actions/quick_actions_ios/lib/messages.g.dart index 199871ff803..3fec7bbd2d0 100644 --- a/packages/quick_actions/quick_actions_ios/lib/messages.g.dart +++ b/packages/quick_actions/quick_actions_ios/lib/messages.g.dart @@ -18,8 +18,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -34,6 +33,7 @@ class ShortcutItemMessage { ShortcutItemMessage({ required this.type, required this.localizedTitle, + this.localizedSubtitle, this.icon, }); @@ -43,6 +43,9 @@ class ShortcutItemMessage { /// Localized title of the item. String localizedTitle; + /// Localized subtitle of the item. + String? localizedSubtitle; + /// Name of native resource to be displayed as the icon for this item. String? icon; @@ -50,6 +53,7 @@ class ShortcutItemMessage { return [ type, localizedTitle, + localizedSubtitle, icon, ]; } @@ -59,11 +63,13 @@ class ShortcutItemMessage { return ShortcutItemMessage( type: result[0]! as String, localizedTitle: result[1]! as String, - icon: result[2] as String?, + localizedSubtitle: result[2] as String?, + icon: result[3] as String?, ); } } + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -79,7 +85,7 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: return ShortcutItemMessage.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -91,11 +97,9 @@ class IOSQuickActionsApi { /// Constructor for [IOSQuickActionsApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - IOSQuickActionsApi( - {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + IOSQuickActionsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : __pigeon_binaryMessenger = binaryMessenger, - __pigeon_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + __pigeon_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? __pigeon_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -104,10 +108,8 @@ class IOSQuickActionsApi { /// Sets the dynamic shortcuts for the app. Future setShortcutItems(List itemsList) async { - final String __pigeon_channelName = - 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems$__pigeon_messageChannelSuffix'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( + final String __pigeon_channelName = 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, pigeonChannelCodec, binaryMessenger: __pigeon_binaryMessenger, @@ -129,10 +131,8 @@ class IOSQuickActionsApi { /// Removes all dynamic shortcuts. Future clearShortcutItems() async { - final String __pigeon_channelName = - 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems$__pigeon_messageChannelSuffix'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( + final String __pigeon_channelName = 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, pigeonChannelCodec, binaryMessenger: __pigeon_binaryMessenger, @@ -159,25 +159,18 @@ abstract class IOSQuickActionsFlutterApi { /// Sends a string representing a shortcut from the native platform to the app. void launchAction(String action); - static void setUp( - IOSQuickActionsFlutterApi? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + static void setUp(IOSQuickActionsFlutterApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { + messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction$messageChannelSuffix', - pigeonChannelCodec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel( + 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { __pigeon_channel.setMessageHandler(null); } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction was null.'); + 'Argument for dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction was null.'); final List args = (message as List?)!; final String? arg_action = (args[0] as String?); assert(arg_action != null, @@ -187,9 +180,8 @@ abstract class IOSQuickActionsFlutterApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); } }); } diff --git a/packages/quick_actions/quick_actions_ios/lib/quick_actions_ios.dart b/packages/quick_actions/quick_actions_ios/lib/quick_actions_ios.dart index b002e0ec136..e90b68333ed 100644 --- a/packages/quick_actions/quick_actions_ios/lib/quick_actions_ios.dart +++ b/packages/quick_actions/quick_actions_ios/lib/quick_actions_ios.dart @@ -47,6 +47,7 @@ class QuickActionsIos extends QuickActionsPlatform { return ShortcutItemMessage( type: item.type, localizedTitle: item.localizedTitle, + localizedSubtitle: item.localizedSubtitle, icon: item.icon, ); } diff --git a/packages/quick_actions/quick_actions_ios/pigeons/messages.dart b/packages/quick_actions/quick_actions_ios/pigeons/messages.dart index 7cf7d20d587..043d4ba7cc3 100644 --- a/packages/quick_actions/quick_actions_ios/pigeons/messages.dart +++ b/packages/quick_actions/quick_actions_ios/pigeons/messages.dart @@ -15,6 +15,7 @@ class ShortcutItemMessage { ShortcutItemMessage( this.type, this.localizedTitle, + this.localizedSubtitle, this.icon, ); @@ -24,6 +25,9 @@ class ShortcutItemMessage { /// Localized title of the item. String localizedTitle; + /// Localized subtitle of the item. + String? localizedSubtitle; + /// Name of native resource to be displayed as the icon for this item. String? icon; } diff --git a/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart b/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart index 0f936db870c..7e2e40c56ad 100644 --- a/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart +++ b/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart @@ -45,6 +45,7 @@ class MethodChannelQuickActions extends QuickActionsPlatform { return { 'type': item.type, 'localizedTitle': item.localizedTitle, + 'localizedSubtitle': item.localizedSubtitle, 'icon': item.icon, }; } diff --git a/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart b/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart index 1d84e16ac99..50753a58898 100644 --- a/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart +++ b/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart @@ -11,6 +11,7 @@ class ShortcutItem { const ShortcutItem({ required this.type, required this.localizedTitle, + this.localizedSubtitle, this.icon, }); @@ -20,6 +21,11 @@ class ShortcutItem { /// Localized title of the item. final String localizedTitle; + /// Localized subtitle of the item. + /// + /// This is ignored on Android, since it's not supported. + final String? localizedSubtitle; + /// Name of native resource (xcassets etc; NOT a Flutter asset) to be /// displayed as the icon for this item. final String? icon; From 4bea2bc257123a9d33804569d7f244a2ec3cabbe Mon Sep 17 00:00:00 2001 From: Giacomo Pignoni Date: Sun, 23 Jun 2024 14:07:54 +0200 Subject: [PATCH 02/20] test and changelog --- .../quick_actions/quick_actions/CHANGELOG.md | 1 + .../test/quick_actions_ios_test.dart | 28 +++++++--- .../method_channel_quick_actions.dart | 3 +- .../method_channel_quick_actions_test.dart | 51 +++++++++++++++++-- 4 files changed, 72 insertions(+), 11 deletions(-) diff --git a/packages/quick_actions/quick_actions/CHANGELOG.md b/packages/quick_actions/quick_actions/CHANGELOG.md index c9b4308251b..c0249a26b07 100644 --- a/packages/quick_actions/quick_actions/CHANGELOG.md +++ b/packages/quick_actions/quick_actions/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Add localizedSubtitle field for iOS * Updates minimum supported SDK version to Flutter 3.16/Dart 3.2. ## 1.0.7 diff --git a/packages/quick_actions/quick_actions_ios/test/quick_actions_ios_test.dart b/packages/quick_actions/quick_actions_ios/test/quick_actions_ios_test.dart index eff84081274..b53137dcc9d 100644 --- a/packages/quick_actions/quick_actions_ios/test/quick_actions_ios_test.dart +++ b/packages/quick_actions/quick_actions_ios/test/quick_actions_ios_test.dart @@ -26,19 +26,28 @@ void main() { test('setShortcutItems', () async { await quickActions.initialize((String type) {}); - const ShortcutItem item = - ShortcutItem(type: 'test', localizedTitle: 'title', icon: 'icon.svg'); + const ShortcutItem item = ShortcutItem( + type: 'test', + localizedTitle: 'title', + localizedSubtitle: 'subtitle', + icon: 'icon.svg', + ); await quickActions.setShortcutItems([item]); expect(api.items.first.type, item.type); expect(api.items.first.localizedTitle, item.localizedTitle); + expect(api.items.first.localizedSubtitle, item.localizedSubtitle); expect(api.items.first.icon, item.icon); }); test('clearShortCutItems', () { quickActions.initialize((String type) {}); - const ShortcutItem item = - ShortcutItem(type: 'test', localizedTitle: 'title', icon: 'icon.svg'); + const ShortcutItem item = ShortcutItem( + type: 'test', + localizedTitle: 'title', + localizedSubtitle: 'subtitle', + icon: 'icon.svg', + ); quickActions.setShortcutItems([item]); quickActions.clearShortcutItems(); @@ -48,13 +57,19 @@ void main() { test('Shortcut item can be constructed', () { const String type = 'type'; const String localizedTitle = 'title'; + const String localizedSubtitle = 'subtitle'; const String icon = 'foo'; - const ShortcutItem item = - ShortcutItem(type: type, localizedTitle: localizedTitle, icon: icon); + const ShortcutItem item = ShortcutItem( + type: type, + localizedTitle: localizedTitle, + localizedSubtitle: localizedSubtitle, + icon: icon, + ); expect(item.type, type); expect(item.localizedTitle, localizedTitle); + expect(item.localizedSubtitle, localizedSubtitle); expect(item.icon, icon); }); } @@ -83,6 +98,7 @@ ShortcutItem shortcutItemMessageToShortcutItem(ShortcutItemMessage item) { return ShortcutItem( type: item.type, localizedTitle: item.localizedTitle, + localizedSubtitle: item.localizedSubtitle, icon: item.icon, ); } diff --git a/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart b/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart index 7e2e40c56ad..2d5b6874344 100644 --- a/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart +++ b/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart @@ -45,7 +45,8 @@ class MethodChannelQuickActions extends QuickActionsPlatform { return { 'type': item.type, 'localizedTitle': item.localizedTitle, - 'localizedSubtitle': item.localizedSubtitle, + if (item.localizedSubtitle != null) + 'localizedSubtitle': item.localizedSubtitle, 'icon': item.icon, }; } diff --git a/packages/quick_actions/quick_actions_platform_interface/test/method_channel_quick_actions_test.dart b/packages/quick_actions/quick_actions_platform_interface/test/method_channel_quick_actions_test.dart index 41e2ed4e724..0005fda5228 100644 --- a/packages/quick_actions/quick_actions_platform_interface/test/method_channel_quick_actions_test.dart +++ b/packages/quick_actions/quick_actions_platform_interface/test/method_channel_quick_actions_test.dart @@ -61,7 +61,38 @@ void main() { quickActions.initialize((String type) {}); quickActions.setShortcutItems([ const ShortcutItem( - type: 'test', localizedTitle: 'title', icon: 'icon.svg') + type: 'test', + localizedTitle: 'title', + localizedSubtitle: 'subtitle', + icon: 'icon.svg', + ) + ]); + + expect( + log, + [ + isMethodCall('getLaunchAction', arguments: null), + isMethodCall('setShortcutItems', arguments: >[ + { + 'type': 'test', + 'localizedTitle': 'title', + 'localizedSubtitle': 'subtitle', + 'icon': 'icon.svg', + } + ]), + ], + ); + }); + + test('passes shortcutItem through channel with null localizedSubtitle', + () { + quickActions.initialize((String type) {}); + quickActions.setShortcutItems([ + const ShortcutItem( + type: 'test', + localizedTitle: 'title', + icon: 'icon.svg', + ) ]); expect( @@ -82,10 +113,15 @@ void main() { test('setShortcutItems with demo data', () async { const String type = 'type'; const String localizedTitle = 'localizedTitle'; + const String localizedSubtitle = 'localizedSubtitle'; const String icon = 'icon'; await quickActions.setShortcutItems( const [ - ShortcutItem(type: type, localizedTitle: localizedTitle, icon: icon) + ShortcutItem( + type: type, + localizedTitle: localizedTitle, + localizedSubtitle: localizedSubtitle, + icon: icon) ], ); expect( @@ -97,6 +133,7 @@ void main() { { 'type': type, 'localizedTitle': localizedTitle, + 'localizedSubtitle': localizedSubtitle, 'icon': icon, } ], @@ -138,13 +175,19 @@ void main() { test('Shortcut item can be constructed', () { const String type = 'type'; const String localizedTitle = 'title'; + const String localizedSubtitle = 'subtitle'; const String icon = 'foo'; - const ShortcutItem item = - ShortcutItem(type: type, localizedTitle: localizedTitle, icon: icon); + const ShortcutItem item = ShortcutItem( + type: type, + localizedTitle: localizedTitle, + localizedSubtitle: localizedSubtitle, + icon: icon, + ); expect(item.type, type); expect(item.localizedTitle, localizedTitle); + expect(item.localizedSubtitle, localizedSubtitle); expect(item.icon, icon); }); }); From fd8a73a7025d37eb65a03439e4c82c77bba6af1d Mon Sep 17 00:00:00 2001 From: Giacomo Pignoni Date: Wed, 26 Jun 2024 22:54:19 +0200 Subject: [PATCH 03/20] add deps override --- .../quick_actions/quick_actions/example/pubspec.yaml | 10 ++++++++++ packages/quick_actions/quick_actions/pubspec.yaml | 5 +++++ .../quick_actions_android/example/pubspec.yaml | 5 +++++ .../quick_actions/quick_actions_android/pubspec.yaml | 5 +++++ .../quick_actions_ios/example/pubspec.yaml | 5 +++++ packages/quick_actions/quick_actions_ios/pubspec.yaml | 8 ++++++++ 6 files changed, 38 insertions(+) diff --git a/packages/quick_actions/quick_actions/example/pubspec.yaml b/packages/quick_actions/quick_actions/example/pubspec.yaml index e6ade3d47da..1dc4fe2b14e 100644 --- a/packages/quick_actions/quick_actions/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions/example/pubspec.yaml @@ -16,6 +16,16 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + + quick_actions_platform_interface: + path: ../../../quick_actions/quick_actions_platform_interface + quick_actions_ios: + path: ../../../quick_actions/quick_actions_ios dev_dependencies: espresso: ^0.2.0 diff --git a/packages/quick_actions/quick_actions/pubspec.yaml b/packages/quick_actions/quick_actions/pubspec.yaml index cf76b5061c5..7ac65066d3a 100644 --- a/packages/quick_actions/quick_actions/pubspec.yaml +++ b/packages/quick_actions/quick_actions/pubspec.yaml @@ -35,3 +35,8 @@ dev_dependencies: topics: - quick-actions - os-integration + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {quick_actions_ios: {path: ../../quick_actions/quick_actions_ios}, quick_actions_platform_interface: {path: ../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index 632624f697f..d56cf47d3f4 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -26,3 +26,8 @@ dev_dependencies: flutter: uses-material-design: true + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {quick_actions_platform_interface: {path: ../../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index 9571e8bc3a8..71df57ff5c1 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -33,3 +33,8 @@ dev_dependencies: topics: - quick-actions - os-integration + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {quick_actions_platform_interface: {path: ../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml index b67fbd8dba5..1365fabd777 100644 --- a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml @@ -25,3 +25,8 @@ dev_dependencies: flutter: uses-material-design: true + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + {quick_actions_ios: {path: ../../../quick_actions/quick_actions_ios}, quick_actions_platform_interface: {path: ../../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 9f0abd93fe4..e7a82a9ef11 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -21,6 +21,14 @@ dependencies: sdk: flutter quick_actions_platform_interface: ^1.0.0 + +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + + quick_actions_platform_interface: + path: ../../quick_actions/quick_actions_platform_interface + dev_dependencies: flutter_test: sdk: flutter From 4cba4dacf2bb0a1a72b5ad5bf84feb133c9142a1 Mon Sep 17 00:00:00 2001 From: Giacomo Pignoni Date: Wed, 26 Jun 2024 23:02:05 +0200 Subject: [PATCH 04/20] update ios changelog --- packages/quick_actions/quick_actions_ios/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index a8af40f1901..d70aed3c26a 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Add localizedSubtitle field + ## 1.1.1 * Updates to a newer version of Pigeon. From 1886a75800ddb4c633c283101776a1aa5f764613 Mon Sep 17 00:00:00 2001 From: Giacomo Pignoni Date: Wed, 26 Jun 2024 23:08:07 +0200 Subject: [PATCH 05/20] update platform interface changelog --- .../quick_actions/quick_actions_platform_interface/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md b/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md index 67914343eb9..607ba275f8f 100644 --- a/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Add localizedSubtitle field for iOS * Updates minimum supported SDK version to Flutter 3.16/Dart 3.2. ## 1.0.6 From bf720484e158e5c383460c5182dc8a4ed5f8756f Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 8 Nov 2024 16:20:33 +0800 Subject: [PATCH 06/20] update changelog --- packages/quick_actions/quick_actions/CHANGELOG.md | 4 ++-- packages/quick_actions/quick_actions_ios/CHANGELOG.md | 4 ++-- .../quick_actions_platform_interface/CHANGELOG.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/quick_actions/quick_actions/CHANGELOG.md b/packages/quick_actions/quick_actions/CHANGELOG.md index fdd1b7dd739..6d8b07f1a1a 100644 --- a/packages/quick_actions/quick_actions/CHANGELOG.md +++ b/packages/quick_actions/quick_actions/CHANGELOG.md @@ -1,6 +1,6 @@ -## NEXT +## 1.0.9 -* Add localizedSubtitle field for iOS +* Adds localizedSubtitle field for iOS quick actions. ## 1.0.8 diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index f24f6475df7..437112a80dd 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,7 +1,7 @@ -## NEXT +## 1.1.2 +* Adds localizedSubtitle field for iOS quick actions. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. -* Add localizedSubtitle field ## 1.1.1 diff --git a/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md b/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md index 934386e6e6b..758ad92a5d7 100644 --- a/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md @@ -1,7 +1,7 @@ -## NEXT +## 1.0.7 +* Adds localizedSubtitle field for iOS quick actions. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. -* Add localizedSubtitle field for iOS ## 1.0.6 From a0ac67eeda2d8ed9b51aba0600dfcae546cfe038 Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 8 Nov 2024 16:25:39 +0800 Subject: [PATCH 07/20] revert quick_actions_android changes --- .../quick_actions/quick_actions_android/example/pubspec.yaml | 4 ---- packages/quick_actions/quick_actions_android/pubspec.yaml | 4 ---- 2 files changed, 8 deletions(-) diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index 0476f79e1e0..eaa6fed9f69 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -27,7 +27,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - {quick_actions_platform_interface: {path: ../../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index b07c4d7cdce..4bf7cf9e8f1 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -34,7 +34,3 @@ topics: - quick-actions - os-integration -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - {quick_actions_platform_interface: {path: ../../quick_actions/quick_actions_platform_interface}} From ce569d92465145b28d312e9e794185897f79f23f Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 8 Nov 2024 16:49:23 +0800 Subject: [PATCH 08/20] opt QuickActionsPlugin --- .../Sources/quick_actions_ios/QuickActionsPlugin.swift | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift index e75f8284b7e..fb7938f7b54 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift @@ -90,19 +90,15 @@ public final class QuickActionsPlugin: NSObject, FlutterPlugin, IOSQuickActionsA -> UIApplicationShortcutItem? { - let type = shortcut.type - let localizedTitle = shortcut.localizedTitle - let localizedSubtitle = shortcut.localizedSubtitle - let icon = (shortcut.icon).map { UIApplicationShortcutIcon(templateImageName: $0) } // type and localizedTitle are required. return UIApplicationShortcutItem( - type: type, - localizedTitle: localizedTitle, - localizedSubtitle: localizedSubtitle, + type: shortcut.type, + localizedTitle: shortcut.localizedTitle, + localizedSubtitle: shortcut.localizedSubtitle, icon: icon, userInfo: nil) } From 2bf82561afd83631e47bb95e49143a669cb1595c Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 8 Nov 2024 16:53:10 +0800 Subject: [PATCH 09/20] update notes --- .../lib/types/shortcut_item.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart b/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart index 50753a58898..81679ddb6c9 100644 --- a/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart +++ b/packages/quick_actions/quick_actions_platform_interface/lib/types/shortcut_item.dart @@ -23,7 +23,7 @@ class ShortcutItem { /// Localized subtitle of the item. /// - /// This is ignored on Android, since it's not supported. + /// May be ignored on platforms that don't support localized subtitles. final String? localizedSubtitle; /// Name of native resource (xcassets etc; NOT a Flutter asset) to be From f6441146ca871e643cdd3487bd424a4ee4cb4fa4 Mon Sep 17 00:00:00 2001 From: sinyu Date: Wed, 13 Nov 2024 14:37:35 +0800 Subject: [PATCH 10/20] update quick_actions_ios example & UITests --- .../example/ios/RunnerUITests/RunnerUITests.swift | 2 +- packages/quick_actions/quick_actions_ios/example/lib/main.dart | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift index ad4c03f008e..ceec0397998 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift @@ -75,7 +75,7 @@ class RunnerUITests: XCTestCase { } findAndTapQuickActionButton( - buttonName: "Action one", quickActionsAppIcon: quickActionsAppIcon, springboard: springboard) + buttonName: "Action one, Action one subtitle", quickActionsAppIcon: quickActionsAppIcon, springboard: springboard) let actionOneConfirmation = exampleApp.otherElements["action_one"] if !actionOneConfirmation.waitForExistence(timeout: elementWaitingTime) { diff --git a/packages/quick_actions/quick_actions_ios/example/lib/main.dart b/packages/quick_actions/quick_actions_ios/example/lib/main.dart index f3e9f92b2cb..a170376135d 100644 --- a/packages/quick_actions/quick_actions_ios/example/lib/main.dart +++ b/packages/quick_actions/quick_actions_ios/example/lib/main.dart @@ -51,6 +51,7 @@ class _MyHomePageState extends State { const ShortcutItem( type: 'action_one', localizedTitle: 'Action one', + localizedSubtitle: 'Action one subtitle', icon: 'AppIcon', ), const ShortcutItem( From 4b38b322a1e7617d0d628cad3bb2283c676eef04 Mon Sep 17 00:00:00 2001 From: sinyu Date: Wed, 13 Nov 2024 14:49:35 +0800 Subject: [PATCH 11/20] format quick_actions_ios/messages.g.swift --- .../quick_actions_ios/messages.g.swift | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift index c406dadd2db..49833e0ee81 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift @@ -29,7 +29,7 @@ final class PigeonError: Error { var localizedDescription: String { return "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" - } + } } private func wrapResult(_ result: Any?) -> [Any?] { @@ -59,7 +59,9 @@ private func wrapError(_ error: Any) -> [Any?] { } private func createConnectionError(withChannelName channelName: String) -> PigeonError { - return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") + return PigeonError( + code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", + details: "") } private func isNullish(_ value: Any?) -> Bool { @@ -107,6 +109,7 @@ struct ShortcutItemMessage { ] } } + private class messagesPigeonCodecReader: FlutterStandardReader { override func readValue(ofType type: UInt8) -> Any? { switch type { @@ -155,10 +158,16 @@ protocol IOSQuickActionsApi { class IOSQuickActionsApiSetup { static var codec: FlutterStandardMessageCodec { messagesPigeonCodec.shared } /// Sets up an instance of `IOSQuickActionsApi` to handle messages through the `binaryMessenger`. - static func setUp(binaryMessenger: FlutterBinaryMessenger, api: IOSQuickActionsApi?, messageChannelSuffix: String = "") { + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: IOSQuickActionsApi?, + messageChannelSuffix: String = "" + ) { let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" /// Sets the dynamic shortcuts for the app. - let setShortcutItemsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let setShortcutItemsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setShortcutItemsChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -174,7 +183,10 @@ class IOSQuickActionsApiSetup { setShortcutItemsChannel.setMessageHandler(nil) } /// Removes all dynamic shortcuts. - let clearShortcutItemsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + let clearShortcutItemsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { clearShortcutItemsChannel.setMessageHandler { _, reply in do { @@ -189,11 +201,14 @@ class IOSQuickActionsApiSetup { } } } + /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. protocol IOSQuickActionsFlutterApiProtocol { /// Sends a string representing a shortcut from the native platform to the app. - func launchAction(action actionArg: String, completion: @escaping (Result) -> Void) + func launchAction( + action actionArg: String, completion: @escaping (Result) -> Void) } + class IOSQuickActionsFlutterApi: IOSQuickActionsFlutterApiProtocol { private let binaryMessenger: FlutterBinaryMessenger private let messageChannelSuffix: String @@ -205,9 +220,13 @@ class IOSQuickActionsFlutterApi: IOSQuickActionsFlutterApiProtocol { return messagesPigeonCodec.shared } /// Sends a string representing a shortcut from the native platform to the app. - func launchAction(action actionArg: String, completion: @escaping (Result) -> Void) { - let channelName: String = "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction\(messageChannelSuffix)" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + func launchAction( + action actionArg: String, completion: @escaping (Result) -> Void + ) { + let channelName: String = + "dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction\(messageChannelSuffix)" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([actionArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -223,4 +242,4 @@ class IOSQuickActionsFlutterApi: IOSQuickActionsFlutterApiProtocol { } } } -} +} \ No newline at end of file From 54e0a39a3b796e4e6eb3431420a687079a11e81c Mon Sep 17 00:00:00 2001 From: sinyu Date: Wed, 13 Nov 2024 15:45:21 +0800 Subject: [PATCH 12/20] format swift --- .../example/ios/RunnerUITests/RunnerUITests.swift | 3 ++- .../Sources/quick_actions_ios/messages.g.swift | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift index ceec0397998..3bc0d2109be 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift @@ -75,7 +75,8 @@ class RunnerUITests: XCTestCase { } findAndTapQuickActionButton( - buttonName: "Action one, Action one subtitle", quickActionsAppIcon: quickActionsAppIcon, springboard: springboard) + buttonName: "Action one, Action one subtitle", quickActionsAppIcon: quickActionsAppIcon, + springboard: springboard) let actionOneConfirmation = exampleApp.otherElements["action_one"] if !actionOneConfirmation.waitForExistence(timeout: elementWaitingTime) { diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift index 49833e0ee81..dbfea4f1e02 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift @@ -242,4 +242,4 @@ class IOSQuickActionsFlutterApi: IOSQuickActionsFlutterApiProtocol { } } } -} \ No newline at end of file +} From 550dfe34954beab4fea9fabf465742c97d46949e Mon Sep 17 00:00:00 2001 From: Sinyu <1341156974@qq.com> Date: Fri, 15 Nov 2024 10:49:10 +0800 Subject: [PATCH 13/20] Update packages/quick_actions/quick_actions_android/example/pubspec.yaml Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> --- .../quick_actions/quick_actions_android/example/pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index eaa6fed9f69..eb2f86ab62c 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -26,4 +26,3 @@ dev_dependencies: flutter: uses-material-design: true - From 977992e0062392ad27e9b8f7f5d2d2307c775984 Mon Sep 17 00:00:00 2001 From: Sinyu <1341156974@qq.com> Date: Fri, 15 Nov 2024 10:49:17 +0800 Subject: [PATCH 14/20] Update packages/quick_actions/quick_actions_android/pubspec.yaml Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> --- packages/quick_actions/quick_actions_android/pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index 4bf7cf9e8f1..cf6cb0fbb5c 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -33,4 +33,3 @@ dev_dependencies: topics: - quick-actions - os-integration - From 35687503789f433ebe0e4aae111d7b0d448bb3cc Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 15 Nov 2024 10:51:39 +0800 Subject: [PATCH 15/20] update quick_actions example code --- packages/quick_actions/quick_actions/example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions/example/lib/main.dart b/packages/quick_actions/quick_actions/example/lib/main.dart index 31a3a4a94e2..d137710031a 100644 --- a/packages/quick_actions/quick_actions/example/lib/main.dart +++ b/packages/quick_actions/quick_actions/example/lib/main.dart @@ -54,7 +54,7 @@ class _MyHomePageState extends State { type: 'action_one', localizedTitle: 'Action one', localizedSubtitle: 'Action one subtitle', - icon: 'icon_help', + icon: 'AppIcon', ), // NOTE: This second action icon will only work on Android. // In a real world project keep the same file name for both platforms. From ee8dc3fb7834906bc824cc38d4add938d96525f7 Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 22 Nov 2024 11:50:02 +0800 Subject: [PATCH 16/20] update dependencies --- .../quick_actions/quick_actions/example/pubspec.yaml | 10 ---------- packages/quick_actions/quick_actions/pubspec.yaml | 9 ++------- .../quick_actions_ios/example/pubspec.yaml | 5 ----- .../quick_actions/quick_actions_ios/pubspec.yaml | 12 ++---------- 4 files changed, 4 insertions(+), 32 deletions(-) diff --git a/packages/quick_actions/quick_actions/example/pubspec.yaml b/packages/quick_actions/quick_actions/example/pubspec.yaml index 054234593e6..7573f5bbf81 100644 --- a/packages/quick_actions/quick_actions/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions/example/pubspec.yaml @@ -16,16 +16,6 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ - - -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - - quick_actions_platform_interface: - path: ../../../quick_actions/quick_actions_platform_interface - quick_actions_ios: - path: ../../../quick_actions/quick_actions_ios dev_dependencies: espresso: ^0.4.0 diff --git a/packages/quick_actions/quick_actions/pubspec.yaml b/packages/quick_actions/quick_actions/pubspec.yaml index 2d94a0cebc9..8d7334b4422 100644 --- a/packages/quick_actions/quick_actions/pubspec.yaml +++ b/packages/quick_actions/quick_actions/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for creating shortcuts on home screen, also known as Quick Actions on iOS and App Shortcuts on Android. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+quick_actions%22 -version: 1.0.8 +version: 1.0.9 environment: sdk: ^3.3.0 @@ -22,7 +22,7 @@ dependencies: sdk: flutter quick_actions_android: ^1.0.0 quick_actions_ios: ^1.0.0 - quick_actions_platform_interface: ^1.0.0 + quick_actions_platform_interface: ^1.1.0 dev_dependencies: flutter_test: @@ -35,8 +35,3 @@ dev_dependencies: topics: - quick-actions - os-integration - -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - {quick_actions_ios: {path: ../../quick_actions/quick_actions_ios}, quick_actions_platform_interface: {path: ../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml index 17bb780b8b9..d73d5160171 100644 --- a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml @@ -25,8 +25,3 @@ dev_dependencies: flutter: uses-material-design: true - -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - {quick_actions_ios: {path: ../../../quick_actions/quick_actions_ios}, quick_actions_platform_interface: {path: ../../../quick_actions/quick_actions_platform_interface}} diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index ac0c00e0dcd..8af5baa78f9 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_ios description: An implementation for the iOS platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.1.1 +version: 1.1.2 environment: sdk: ^3.3.0 @@ -19,15 +19,7 @@ flutter: dependencies: flutter: sdk: flutter - quick_actions_platform_interface: ^1.0.0 - - -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - - quick_actions_platform_interface: - path: ../../quick_actions/quick_actions_platform_interface + quick_actions_platform_interface: ^1.1.0 dev_dependencies: flutter_test: From efb99757019e49418acf1ba47dbaa8e6843332d3 Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 22 Nov 2024 12:22:16 +0800 Subject: [PATCH 17/20] format code --- .../quick_actions_ios/lib/messages.g.dart | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/packages/quick_actions/quick_actions_ios/lib/messages.g.dart b/packages/quick_actions/quick_actions_ios/lib/messages.g.dart index 3fec7bbd2d0..b909d6bc6c5 100644 --- a/packages/quick_actions/quick_actions_ios/lib/messages.g.dart +++ b/packages/quick_actions/quick_actions_ios/lib/messages.g.dart @@ -69,7 +69,6 @@ class ShortcutItemMessage { } } - class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -85,7 +84,7 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: return ShortcutItemMessage.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -97,9 +96,11 @@ class IOSQuickActionsApi { /// Constructor for [IOSQuickActionsApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - IOSQuickActionsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + IOSQuickActionsApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) : __pigeon_binaryMessenger = binaryMessenger, - __pigeon_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? __pigeon_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); @@ -108,8 +109,10 @@ class IOSQuickActionsApi { /// Sets the dynamic shortcuts for the app. Future setShortcutItems(List itemsList) async { - final String __pigeon_channelName = 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems$__pigeon_messageChannelSuffix'; - final BasicMessageChannel __pigeon_channel = BasicMessageChannel( + final String __pigeon_channelName = + 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.setShortcutItems$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( __pigeon_channelName, pigeonChannelCodec, binaryMessenger: __pigeon_binaryMessenger, @@ -131,8 +134,10 @@ class IOSQuickActionsApi { /// Removes all dynamic shortcuts. Future clearShortcutItems() async { - final String __pigeon_channelName = 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems$__pigeon_messageChannelSuffix'; - final BasicMessageChannel __pigeon_channel = BasicMessageChannel( + final String __pigeon_channelName = + 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsApi.clearShortcutItems$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( __pigeon_channelName, pigeonChannelCodec, binaryMessenger: __pigeon_binaryMessenger, @@ -159,18 +164,25 @@ abstract class IOSQuickActionsFlutterApi { /// Sends a string representing a shortcut from the native platform to the app. void launchAction(String action); - static void setUp(IOSQuickActionsFlutterApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + static void setUp( + IOSQuickActionsFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel( - 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction$messageChannelSuffix', pigeonChannelCodec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { __pigeon_channel.setMessageHandler(null); } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction was null.'); + 'Argument for dev.flutter.pigeon.quick_actions_ios.IOSQuickActionsFlutterApi.launchAction was null.'); final List args = (message as List?)!; final String? arg_action = (args[0] as String?); assert(arg_action != null, @@ -180,8 +192,9 @@ abstract class IOSQuickActionsFlutterApi { return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); - } catch (e) { - return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); } }); } From 8782df8330ffc532946208376cc5757c7b3814ff Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 22 Nov 2024 14:11:08 +0800 Subject: [PATCH 18/20] format code --- packages/quick_actions/quick_actions_ios/lib/messages.g.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions_ios/lib/messages.g.dart b/packages/quick_actions/quick_actions_ios/lib/messages.g.dart index b909d6bc6c5..6678bbc840b 100644 --- a/packages/quick_actions/quick_actions_ios/lib/messages.g.dart +++ b/packages/quick_actions/quick_actions_ios/lib/messages.g.dart @@ -18,7 +18,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } From 52eb23b7ca1f71601007482ca271fff902425b51 Mon Sep 17 00:00:00 2001 From: sinyu Date: Fri, 22 Nov 2024 20:19:11 +0800 Subject: [PATCH 19/20] update version --- packages/quick_actions/quick_actions/CHANGELOG.md | 2 +- packages/quick_actions/quick_actions/pubspec.yaml | 2 +- packages/quick_actions/quick_actions_ios/CHANGELOG.md | 2 +- packages/quick_actions/quick_actions_ios/pubspec.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/quick_actions/quick_actions/CHANGELOG.md b/packages/quick_actions/quick_actions/CHANGELOG.md index 6d8b07f1a1a..b66476c12e1 100644 --- a/packages/quick_actions/quick_actions/CHANGELOG.md +++ b/packages/quick_actions/quick_actions/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.0.9 +## 1.1.0 * Adds localizedSubtitle field for iOS quick actions. diff --git a/packages/quick_actions/quick_actions/pubspec.yaml b/packages/quick_actions/quick_actions/pubspec.yaml index 8d7334b4422..6f3ea02e3a2 100644 --- a/packages/quick_actions/quick_actions/pubspec.yaml +++ b/packages/quick_actions/quick_actions/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for creating shortcuts on home screen, also known as Quick Actions on iOS and App Shortcuts on Android. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+quick_actions%22 -version: 1.0.9 +version: 1.1.0 environment: sdk: ^3.3.0 diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 437112a80dd..b49fb360290 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.1.2 +## 1.2.0 * Adds localizedSubtitle field for iOS quick actions. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 8af5baa78f9..a3ba140e2e8 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_ios description: An implementation for the iOS platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.1.2 +version: 1.2.0 environment: sdk: ^3.3.0 From f42fb391fd66ce2833a013ed566166dca588ba34 Mon Sep 17 00:00:00 2001 From: sinyu Date: Wed, 11 Dec 2024 10:59:08 +0800 Subject: [PATCH 20/20] update dependencies --- packages/quick_actions/quick_actions/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quick_actions/quick_actions/pubspec.yaml b/packages/quick_actions/quick_actions/pubspec.yaml index 6f3ea02e3a2..98fc3a3bf9f 100644 --- a/packages/quick_actions/quick_actions/pubspec.yaml +++ b/packages/quick_actions/quick_actions/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: flutter: sdk: flutter quick_actions_android: ^1.0.0 - quick_actions_ios: ^1.0.0 + quick_actions_ios: ^1.2.0 quick_actions_platform_interface: ^1.1.0 dev_dependencies: