diff --git a/CHANGELOG.md b/CHANGELOG.md index 92b831c..fe3e723 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +# 1.4.3 +- Android: přidat permanentní oznámení # 1.4.2 - aktualizace knihovny flutter_local_notifications - lepší podpora pro Android 13 diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ae6036b..5373cee 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ + + + "Ohodnotit aplikaci"; + + @override + String get wakeLock => + "Toto oznámení slouží k tomu, aby nebyl proces spontánně ukončen."; } diff --git a/lib/lang/lang_en.dart b/lib/lang/lang_en.dart index bd26eec..880609e 100644 --- a/lib/lang/lang_en.dart +++ b/lib/lang/lang_en.dart @@ -235,4 +235,8 @@ class LanguageEn extends Languages { @override String get review => "Review the app"; + + @override + String get wakeLock => + "This notification is used to hopefully block unexpected process kill."; } diff --git a/lib/main.dart b/lib/main.dart index 7b3eee1..e6d496c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -47,12 +47,14 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { String title; String locale = Intl.getCurrentLocale(); + debugPrint(locale); switch (locale) { case "cs_CZ": title = LanguageCz().lunchNotif; break; default: title = LanguageEn().lunchNotif; + break; } /*if (prefs.getBool("offline") ?? false) { @@ -73,6 +75,7 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { TimeOfDay(hour: kdy.hour, minute: kdy.minute), ); if (cas.isBefore(DateTime.now())) return; + // data o oznámení const AndroidNotificationDetails androidSpec = AndroidNotificationDetails('predobedem', 'Oznámení před obědem', @@ -94,6 +97,7 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { UILocalNotificationDateInterpretation.absoluteTime); } on StateError catch (_) { // nenalezeno + debugPrint("Nenalezeno"); } } // } diff --git a/lib/okna/jidelnicek.dart b/lib/okna/jidelnicek.dart index deb8e32..556510d 100644 --- a/lib/okna/jidelnicek.dart +++ b/lib/okna/jidelnicek.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:canteenlib/canteenlib.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_background/flutter_background.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:opencanteen/okna/nastaveni.dart'; @@ -378,6 +379,22 @@ class _JidelnicekPageState extends State { void nactiNastaveni() async { var prefs = await SharedPreferences.getInstance(); _skipWeekend = prefs.getBool("skip") ?? false; + if (prefs.getBool("oznamit") ?? false) { + if (!mounted) return; + if (Platform.isAndroid) { + // ! TODO: OTESTOVAT, JESTLI FUNGUJE IMPORT NA IOSu + var androidConfig = FlutterBackgroundAndroidConfig( + notificationTitle: "OpenCanteen", + notificationText: Languages.of(context)!.wakeLock, + notificationImportance: AndroidNotificationImportance.Default, + notificationIcon: + const AndroidResource(name: 'notif_icon', defType: 'drawable'), + enableWifiLock: true); + bool success = + await FlutterBackground.initialize(androidConfig: androidConfig); + if (success) await FlutterBackground.enableBackgroundExecution(); + } + } if (!mounted) return; kontrolaTyden(context); } diff --git a/lib/okna/nastaveni.dart b/lib/okna/nastaveni.dart index 9bc6cbf..3ddfa0d 100644 --- a/lib/okna/nastaveni.dart +++ b/lib/okna/nastaveni.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:canteenlib/canteenlib.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_background/flutter_background.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_native_timezone/flutter_native_timezone.dart'; import 'package:path_provider/path_provider.dart'; @@ -235,9 +236,23 @@ class _NastaveniState extends State { var l = tz.getLocation(await FlutterNativeTimezone.getLocalTimezone()); if (!mounted) return; + if (Platform.isAndroid) { + // ! TODO: OTESTOVAT, JESTLI FUNGUJE IMPORT NA IOSu + var androidConfig = FlutterBackgroundAndroidConfig( + notificationTitle: "OpenCanteen", + notificationText: Languages.of(context)!.wakeLock, + notificationImportance: AndroidNotificationImportance.Default, + notificationIcon: const AndroidResource( + name: 'notif_icon', defType: 'drawable'), + enableWifiLock: true); + bool success = await FlutterBackground.initialize( + androidConfig: androidConfig); + if (success) await FlutterBackground.enableBackgroundExecution(); + } await widget.n.zonedSchedule( // Vytvoří nové oznámení pro daný čas a datum 0, + // ignore: use_build_context_synchronously Languages.of(context)!.lunchNotif, "${jidlo.varianta} - ${jidlo.nazev}", tz.TZDateTime.from(den, l), diff --git a/pubspec.lock b/pubspec.lock index 48f9862..b2c12d3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -111,6 +111,13 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_background: + dependency: "direct main" + description: + name: flutter_background + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" flutter_launcher_icons: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index ba796e1..8ebd3c0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. -version: 1.4.2+22 +version: 1.4.3+23 environment: sdk: ">=2.16.1 <3.0.0" @@ -27,6 +27,7 @@ dependencies: flutter_native_timezone: ^2.0.0 intl: ^0.17.0 package_info_plus: ^1.4.3+1 + flutter_background: ^1.1.0 dev_dependencies: flutter_lints: ^2.0.1