From cb3f116dc15016d48f0e11a96ff320d6ab752032 Mon Sep 17 00:00:00 2001 From: Louis-Philippe Date: Mon, 8 Jul 2024 23:45:25 -0400 Subject: [PATCH 1/7] fix --- .../schedule/widgets/calendar_selector.dart | 23 ++++++++++++++++++- lib/utils/calendar_utils.dart | 8 +++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/features/schedule/widgets/calendar_selector.dart b/lib/features/schedule/widgets/calendar_selector.dart index 6a4e28d1e..c844111bb 100644 --- a/lib/features/schedule/widgets/calendar_selector.dart +++ b/lib/features/schedule/widgets/calendar_selector.dart @@ -21,10 +21,31 @@ class CalendarSelectionWidget extends StatelessWidget { @override Widget build(BuildContext context) { + bool error = false; + + const snackBar = SnackBar( + content: Text("Pour cette fonctionnalité, tu dois autoriser l'acces complet au calendrier"), + ); + return FutureBuilder( - future: CalendarUtils.nativeCalendars, + future: CalendarUtils.nativeCalendars.catchError((e) {error = true;}), builder: (context, AsyncSnapshot> calendars) { + if (error == true) { + return AlertDialog( + title: const Text('Permission Refusée'), + content: const Text("Vous n'avez pas accordé la permission d'accéder à votre calendrier. Veuillez l'activer dans les paramètres système de l'application."), + actions: [ + TextButton( + child: const Text('Annuler'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + } + if (!calendars.hasData) { return const Center( child: CircularProgressIndicator(), diff --git a/lib/utils/calendar_utils.dart b/lib/utils/calendar_utils.dart index d4d395bc1..67fcc53be 100644 --- a/lib/utils/calendar_utils.dart +++ b/lib/utils/calendar_utils.dart @@ -41,9 +41,13 @@ mixin CalendarUtils { DeviceCalendarPlugin(); static Future> get nativeCalendars async { - final Result> calendarFetchResult = + if (await checkPermissions()) { + final Result> calendarFetchResult = await DeviceCalendarPlugin().retrieveCalendars(); - return calendarFetchResult.data!; + return calendarFetchResult.data!; + } + // User denied calendar access + throw Error(); } /// Fetches a calendar by name from the native calendar app From 0a89a994169be3471b22b7feb8260c9155643d6c Mon Sep 17 00:00:00 2001 From: Louis-Philippe Date: Mon, 8 Jul 2024 23:53:39 -0400 Subject: [PATCH 2/7] Cleanup --- .../schedule/widgets/calendar_selector.dart | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/lib/features/schedule/widgets/calendar_selector.dart b/lib/features/schedule/widgets/calendar_selector.dart index c844111bb..e6e778e52 100644 --- a/lib/features/schedule/widgets/calendar_selector.dart +++ b/lib/features/schedule/widgets/calendar_selector.dart @@ -23,27 +23,15 @@ class CalendarSelectionWidget extends StatelessWidget { Widget build(BuildContext context) { bool error = false; - const snackBar = SnackBar( - content: Text("Pour cette fonctionnalité, tu dois autoriser l'acces complet au calendrier"), - ); - return FutureBuilder( - future: CalendarUtils.nativeCalendars.catchError((e) {error = true;}), + future: CalendarUtils.nativeCalendars.catchError((e) { + error = true; + return UnmodifiableListView([]); + }), builder: (context, AsyncSnapshot> calendars) { if (error == true) { - return AlertDialog( - title: const Text('Permission Refusée'), - content: const Text("Vous n'avez pas accordé la permission d'accéder à votre calendrier. Veuillez l'activer dans les paramètres système de l'application."), - actions: [ - TextButton( - child: const Text('Annuler'), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - ], - ); + return lackingPermissionsDialog(context); } if (!calendars.hasData) { @@ -149,4 +137,19 @@ class CalendarSelectionWidget extends StatelessWidget { }, ); } + + AlertDialog lackingPermissionsDialog(BuildContext context) { + return AlertDialog( + title: const Text('Permission Refusée'), + content: const Text("Vous n'avez pas accordé la permission d'accéder à votre calendrier. Veuillez l'activer dans les paramètres système de l'application."), + actions: [ + TextButton( + child: const Text('Annuler'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + } } From 90ab446bfa7ee9b3113ac96bb797a001c9a7d511 Mon Sep 17 00:00:00 2001 From: Louis-Philippe Date: Tue, 9 Jul 2024 09:09:39 -0400 Subject: [PATCH 3/7] i18n --- l10n/intl_en.arb | 6 ++++-- l10n/intl_fr.arb | 6 ++++-- lib/features/schedule/widgets/calendar_selector.dart | 10 +++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/l10n/intl_en.arb b/l10n/intl_en.arb index 756eee974..538834452 100644 --- a/l10n/intl_en.arb +++ b/l10n/intl_en.arb @@ -87,8 +87,10 @@ "calendar_export_question": "Which calendar do you want to export to?", "calendar_name": "Calendar name", "calendar_select": "Please select a calendar", - "calendar_cancel": "Cancel", - "calendar_export": "Export", + "calendar_cancel_button": "Cancel", + "calendar_export_button": "Export", + "calendar_permission_denied_modal_title": "Permission denied", + "calendar_permission_denied": "You denied the app the permission to edit your calendar. Change this preference in system settings to use this feature.", "grades_title": "Grades", "grades_msg_no_grades": "No grade available\nPull to refresh", diff --git a/l10n/intl_fr.arb b/l10n/intl_fr.arb index 2ad726e09..ac0052ca8 100644 --- a/l10n/intl_fr.arb +++ b/l10n/intl_fr.arb @@ -87,8 +87,10 @@ "calendar_export_question": "Vers quel calendrier voulez-vous exporter cet événement?", "calendar_name": "Nom du calendrier", "calendar_select": "Veuillez sélectionner un calendrier", - "calendar_cancel": "Annuler", - "calendar_export": "Exporter", + "calendar_cancel_button": "Annuler", + "calendar_export_button": "Exporter", + "calendar_permission_denied_modal_title": "Permission Refusée", + "calendar_permission_denied": "Vous n'avez pas accordé la permission d'accéder à votre calendrier. Veuillez l'activer dans les paramètres système de l'application.", "grades_title": "Notes", "grades_msg_no_grades": "Aucune note disponible.\nTirez pour rafraichir", diff --git a/lib/features/schedule/widgets/calendar_selector.dart b/lib/features/schedule/widgets/calendar_selector.dart index e6e778e52..cab3a1aec 100644 --- a/lib/features/schedule/widgets/calendar_selector.dart +++ b/lib/features/schedule/widgets/calendar_selector.dart @@ -90,7 +90,7 @@ class CalendarSelectionWidget extends StatelessWidget { actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), - child: const Text('Cancel'), + child: Text(translations.calendar_cancel_button), ), TextButton( onPressed: () { @@ -128,7 +128,7 @@ class CalendarSelectionWidget extends StatelessWidget { } }); }, - child: const Text('Export'), + child: Text(translations.calendar_export_button), ), ], ); @@ -140,11 +140,11 @@ class CalendarSelectionWidget extends StatelessWidget { AlertDialog lackingPermissionsDialog(BuildContext context) { return AlertDialog( - title: const Text('Permission Refusée'), - content: const Text("Vous n'avez pas accordé la permission d'accéder à votre calendrier. Veuillez l'activer dans les paramètres système de l'application."), + title: Text(translations.calendar_permission_denied_modal_title), + content: Text(translations.calendar_permission_denied), actions: [ TextButton( - child: const Text('Annuler'), + child: Text(translations.calendar_cancel_button), onPressed: () { Navigator.of(context).pop(); }, From 99f1c4497a2ee314a588267731bcd0e1dd253e19 Mon Sep 17 00:00:00 2001 From: LouisPhilippeHeon Date: Tue, 9 Jul 2024 13:19:53 +0000 Subject: [PATCH 4/7] [BOT] Applying format. --- lib/utils/calendar_utils.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/calendar_utils.dart b/lib/utils/calendar_utils.dart index 67fcc53be..2789f8534 100644 --- a/lib/utils/calendar_utils.dart +++ b/lib/utils/calendar_utils.dart @@ -43,7 +43,7 @@ mixin CalendarUtils { static Future> get nativeCalendars async { if (await checkPermissions()) { final Result> calendarFetchResult = - await DeviceCalendarPlugin().retrieveCalendars(); + await DeviceCalendarPlugin().retrieveCalendars(); return calendarFetchResult.data!; } // User denied calendar access From 7b6976c4e39a7210785d86f337b146dc1b6bce2f Mon Sep 17 00:00:00 2001 From: LouisPhilippeHeon Date: Tue, 9 Jul 2024 13:21:57 +0000 Subject: [PATCH 5/7] [BOT] Applying version. --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 3139a79b6..47c5309b0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: The 4th generation of ÉTSMobile, the main gateway between the Éco # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 4.45.0+1 +version: 4.46.0+1 environment: sdk: '>=3.3.0 <4.0.0' From 1ec1f685023a1ad64114d26e352b3158101946cc Mon Sep 17 00:00:00 2001 From: Louis-Philippe Date: Tue, 9 Jul 2024 12:38:19 -0400 Subject: [PATCH 6/7] Cleanup --- lib/features/schedule/widgets/calendar_selector.dart | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/features/schedule/widgets/calendar_selector.dart b/lib/features/schedule/widgets/calendar_selector.dart index cab3a1aec..ff178eeff 100644 --- a/lib/features/schedule/widgets/calendar_selector.dart +++ b/lib/features/schedule/widgets/calendar_selector.dart @@ -21,19 +21,14 @@ class CalendarSelectionWidget extends StatelessWidget { @override Widget build(BuildContext context) { - bool error = false; return FutureBuilder( - future: CalendarUtils.nativeCalendars.catchError((e) { - error = true; - return UnmodifiableListView([]); - }), + future: CalendarUtils.nativeCalendars, builder: (context, AsyncSnapshot> calendars) { - if (error == true) { + if (calendars.error != null) { return lackingPermissionsDialog(context); } - if (!calendars.hasData) { return const Center( child: CircularProgressIndicator(), From fbd9808c08383c94213417e665d26600932808af Mon Sep 17 00:00:00 2001 From: LouisPhilippeHeon Date: Tue, 9 Jul 2024 16:39:52 +0000 Subject: [PATCH 7/7] [BOT] Applying format. --- lib/features/schedule/widgets/calendar_selector.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/features/schedule/widgets/calendar_selector.dart b/lib/features/schedule/widgets/calendar_selector.dart index ff178eeff..953d1df34 100644 --- a/lib/features/schedule/widgets/calendar_selector.dart +++ b/lib/features/schedule/widgets/calendar_selector.dart @@ -21,7 +21,6 @@ class CalendarSelectionWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return FutureBuilder( future: CalendarUtils.nativeCalendars, builder: