From 795393d543554c4c38dd00389865107ae99ad303 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 10 May 2025 11:16:46 -0700 Subject: [PATCH] Add quick actions --- .../app/src/main/res/drawable/exclamation.xml | 10 ++++ android/app/src/main/res/drawable/play.xml | 10 ++++ android/app/src/main/res/drawable/stop.xml | 10 ++++ ios/Podfile.lock | 6 +++ lib/l10n/app_en.arb | 5 +- lib/main.dart | 8 +++- lib/quick_actions.dart | 48 +++++++++++++++++++ pubspec.lock | 32 +++++++++++++ pubspec.yaml | 1 + 9 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 android/app/src/main/res/drawable/exclamation.xml create mode 100644 android/app/src/main/res/drawable/play.xml create mode 100644 android/app/src/main/res/drawable/stop.xml create mode 100644 lib/quick_actions.dart diff --git a/android/app/src/main/res/drawable/exclamation.xml b/android/app/src/main/res/drawable/exclamation.xml new file mode 100644 index 0000000..98a9859 --- /dev/null +++ b/android/app/src/main/res/drawable/exclamation.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/app/src/main/res/drawable/play.xml b/android/app/src/main/res/drawable/play.xml new file mode 100644 index 0000000..d415ad1 --- /dev/null +++ b/android/app/src/main/res/drawable/play.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/app/src/main/res/drawable/stop.xml b/android/app/src/main/res/drawable/stop.xml new file mode 100644 index 0000000..408ee77 --- /dev/null +++ b/android/app/src/main/res/drawable/stop.xml @@ -0,0 +1,10 @@ + + + diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 414a742..cc62d21 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -153,6 +153,8 @@ PODS: - PromisesObjC (2.4.0) - PromisesSwift (2.4.0): - PromisesObjC (= 2.4.0) + - quick_actions_ios (0.0.1): + - Flutter - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS @@ -165,6 +167,7 @@ DEPENDENCIES: - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - Flutter (from `Flutter`) - flutter_background_geolocation (from `.symlinks/plugins/flutter_background_geolocation/ios`) + - quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) SPEC REPOS: @@ -202,6 +205,8 @@ EXTERNAL SOURCES: :path: Flutter flutter_background_geolocation: :path: ".symlinks/plugins/flutter_background_geolocation/ios" + quick_actions_ios: + :path: ".symlinks/plugins/quick_actions_ios/ios" shared_preferences_foundation: :path: ".symlinks/plugins/shared_preferences_foundation/darwin" @@ -230,6 +235,7 @@ SPEC CHECKSUMS: nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 + quick_actions_ios: 4b07fb49d8d8f3518d7565fbb7a91014067a7d82 shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 PODFILE CHECKSUM: f8c2dcdfb50bb67645580d28a6bf814fca30bdec diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 719cd42..2519c72 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -17,5 +17,8 @@ "intervalLabel": "Frequency", "distanceLabel": "Distance", "bufferLabel": "Offline buffering", - "trackingLabel": "Continuous tracking" + "trackingLabel": "Continuous tracking", + "startAction": "Start service", + "stopAction": "Stop service", + "sosAction": "Send SOS" } diff --git a/lib/main.dart b/lib/main.dart index 1e7f998..78c1d85 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg; +import 'package:traccar_client/quick_actions.dart'; import 'main_screen.dart'; import 'preferences.dart'; @@ -25,7 +26,12 @@ class MainApp extends StatelessWidget { seedColor: Colors.green, ), ), - home: MainScreen(), + home: Stack( + children: const [ + QuickActionsInitializer(), + MainScreen(), + ], + ), ); } } diff --git a/lib/quick_actions.dart b/lib/quick_actions.dart new file mode 100644 index 0000000..21938b9 --- /dev/null +++ b/lib/quick_actions.dart @@ -0,0 +1,48 @@ +import 'dart:developer' as developer; + +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:quick_actions/quick_actions.dart'; + +class QuickActionsInitializer extends StatefulWidget { + const QuickActionsInitializer({super.key}); + + @override + State createState() => _QuickActionsInitializerState(); +} + +class _QuickActionsInitializerState extends State { + final QuickActions quickActions = QuickActions(); + + @override + void initState() { + super.initState(); + quickActions.initialize((shortcutType) { + developer.log('action $shortcutType'); + switch (shortcutType) { + case 'start': + break; + case 'stop': + break; + case 'sos': + break; + } + }); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + final localizations = AppLocalizations.of(context)!; + quickActions.setShortcutItems([ + ShortcutItem(type: 'sos', localizedTitle: localizations.sosAction, icon: 'exclamation'), + ShortcutItem(type: 'stop', localizedTitle: localizations.stopAction, icon: 'stop'), + ShortcutItem(type: 'start', localizedTitle: localizations.startAction, icon: 'play'), + ]); + } + + @override + Widget build(BuildContext context) { + return const SizedBox.shrink(); + } +} diff --git a/pubspec.lock b/pubspec.lock index 179570a..7f8f4c2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -317,6 +317,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + quick_actions: + dependency: "direct main" + description: + name: quick_actions + sha256: "7e35dd6a21f5bbd21acf6899039eaf85001a5ac26d52cbd6a8a2814505b90798" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + quick_actions_android: + dependency: transitive + description: + name: quick_actions_android + sha256: "8d88e90a236ffe92f1026ecc3b85acfefedffccb0c1be1c94c1c0298e8483ad8" + url: "https://pub.dev" + source: hosted + version: "1.0.21" + quick_actions_ios: + dependency: transitive + description: + name: quick_actions_ios + sha256: "837b7e6b5973784d3da56b8c959b446b215914f20405d88cd7d22a2fb94e4e4c" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + quick_actions_platform_interface: + dependency: transitive + description: + name: quick_actions_platform_interface + sha256: "1fec7068db5122cd019e9340d3d7be5d36eab099695ef3402c7059ee058329a4" + url: "https://pub.dev" + source: hosted + version: "1.1.0" shared_preferences: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index e595e89..3626840 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: firebase_messaging: ^15.2.5 firebase_analytics: ^11.4.5 firebase_crashlytics: ^4.3.5 + quick_actions: ^1.1.0 dev_dependencies: flutter_test: