From c95518c55759517891e46c05a81e3cf86c846fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Wed, 15 Jun 2022 20:04:30 +0200 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20p=C5=99idat=20info=20o=20baterii=20a?= =?UTF-8?q?=20odstranit=20zbytecny=20if?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/lang/lang.dart | 2 ++ lib/lang/lang_cz.dart | 4 +++ lib/lang/lang_en.dart | 4 +++ lib/main.dart | 70 ++++++++++++++++++++--------------------- lib/okna/nastaveni.dart | 17 ++++++++++ pubspec.yaml | 2 +- 6 files changed, 63 insertions(+), 36 deletions(-) diff --git a/lib/lang/lang.dart b/lib/lang/lang.dart index 6c2a9d1..1c1f34a 100644 --- a/lib/lang/lang.dart +++ b/lib/lang/lang.dart @@ -149,6 +149,8 @@ abstract class Languages { String get notifyAt; + String get notifyWarning; + // Offline String get offline; diff --git a/lib/lang/lang_cz.dart b/lib/lang/lang_cz.dart index 749d04f..445d1ae 100644 --- a/lib/lang/lang_cz.dart +++ b/lib/lang/lang_cz.dart @@ -224,4 +224,8 @@ class LanguageCz extends Languages { @override String get needRemember => "Musíte své přihlašovací údaje uložit na přihlašovací obrazovce"; + + @override + String get notifyWarning => + "Vaše zařízení může mít povolenou optimalizaci baterie, což může způsobovat neodesílání oznámení. Zkontrolujte nastavení ve vašem zařízení."; } diff --git a/lib/lang/lang_en.dart b/lib/lang/lang_en.dart index 2e653dc..f0dbd9d 100644 --- a/lib/lang/lang_en.dart +++ b/lib/lang/lang_en.dart @@ -222,4 +222,8 @@ class LanguageEn extends Languages { @override String get needRemember => "You need to save your login details on the login screen first"; + + @override + String get notifyWarning => + "Your device may have battery optimization enabled. This may cause notifications to not be sent. Check the application info in your device's settings."; } diff --git a/lib/main.dart b/lib/main.dart index eb561fb..1c7a8c6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -55,44 +55,44 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { title = LanguageEn().lunchNotif; } - if (prefs.getBool("offline") ?? false) { + /*if (prefs.getBool("offline") ?? false) { // TODO možnost brát z offline dat - } else { - // bere online - var d = await LoginManager.getDetails(); // získat údaje - if (d != null) { - var c = Canteen(d["url"]!); - if (await c.login(d["user"]!, d["pass"]!)) { - var jidla = await c.jidelnicekDen(); - try { - var jidlo = jidla.jidla.singleWhere((element) => element.objednano); - var kdy = DateTime.parse(prefs.getString("oznameni_cas")!); - const AndroidNotificationDetails androidSpec = - AndroidNotificationDetails('opencanteen', 'predobjedem', - channelDescription: 'Oznámení o dnešním jídle', - importance: Importance.max, - priority: Priority.high, - ticker: 'today meal'); - const IOSNotificationDetails iOSpec = - IOSNotificationDetails(presentAlert: true, presentBadge: true); - await flutterLocalNotificationsPlugin.zonedSchedule( - 0, - title, - "${jidlo.nazev} - ${jidlo.varianta}", - tz.TZDateTime.from( - casNaDate( - TimeOfDay(hour: kdy.hour, minute: kdy.minute), - ), - l), - const NotificationDetails(android: androidSpec, iOS: iOSpec), - androidAllowWhileIdle: true, - uiLocalNotificationDateInterpretation: - UILocalNotificationDateInterpretation.absoluteTime); - } on StateError catch (_) { - // nenalezeno - } + } else {*/ + // bere online + var d = await LoginManager.getDetails(); // získat údaje + if (d != null) { + var c = Canteen(d["url"]!); + if (await c.login(d["user"]!, d["pass"]!)) { + var jidla = await c.jidelnicekDen(); + try { + var jidlo = jidla.jidla.singleWhere((element) => element.objednano); + var kdy = DateTime.parse(prefs.getString("oznameni_cas")!); + const AndroidNotificationDetails androidSpec = + AndroidNotificationDetails('opencanteen', 'predobjedem', + channelDescription: 'Oznámení o dnešním jídle', + importance: Importance.max, + priority: Priority.high, + ticker: 'today meal'); + const IOSNotificationDetails iOSpec = + IOSNotificationDetails(presentAlert: true, presentBadge: true); + await flutterLocalNotificationsPlugin.zonedSchedule( + 0, + title, + "${jidlo.nazev} - ${jidlo.varianta}", + tz.TZDateTime.from( + casNaDate( + TimeOfDay(hour: kdy.hour, minute: kdy.minute), + ), + l), + const NotificationDetails(android: androidSpec, iOS: iOSpec), + androidAllowWhileIdle: true, + uiLocalNotificationDateInterpretation: + UILocalNotificationDateInterpretation.absoluteTime); + } on StateError catch (_) { + // nenalezeno } } + // } } } diff --git a/lib/okna/nastaveni.dart b/lib/okna/nastaveni.dart index 05baa81..6713e61 100644 --- a/lib/okna/nastaveni.dart +++ b/lib/okna/nastaveni.dart @@ -143,6 +143,23 @@ class _NastaveniState extends State { setState(() { _oznameniObed = value; if (_oznameniObed) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: + Text(Languages.of(context)!.warning), + content: Text( + Languages.of(context)!.notifyWarning), + actions: [ + TextButton( + child: + Text(Languages.of(context)!.ok), + onPressed: () { + Navigator.of(context).pop(); + }, + ) + ], + )); vytvoritOznameni(casNaDate(_oznameniCas)); } zmenitNastaveni("oznamit", value); diff --git a/pubspec.yaml b/pubspec.yaml index 9c73992..4856caa 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.3.0+15 +version: 1.3.1+16 environment: sdk: ">=2.16.1 <3.0.0" From d57b30b0bfe260f02cb8efb3aa16bdbe11bcccff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Wed, 15 Jun 2022 20:12:33 +0200 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20zm=C4=9Bnit=20ID=20kan=C3=A1lu=20pro?= =?UTF-8?q?=20android?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ lib/main.dart | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 326172f..761162d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.3.1 +- Odstranit zbytečné podmínky +- Přidat oznámení o optimalizaci baterie +- Změnit ID kanálu pro android oznámení # 1.3.0 - Odstranit connectivity_plus - Přidat možnost oznámení s info o obědu v daný čas diff --git a/lib/main.dart b/lib/main.dart index 1c7a8c6..87ed1fc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -68,7 +68,7 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { var jidlo = jidla.jidla.singleWhere((element) => element.objednano); var kdy = DateTime.parse(prefs.getString("oznameni_cas")!); const AndroidNotificationDetails androidSpec = - AndroidNotificationDetails('opencanteen', 'predobjedem', + AndroidNotificationDetails('predobedem', 'Oznámení před obědem', channelDescription: 'Oznámení o dnešním jídle', importance: Importance.max, priority: Priority.high, From 38f5e0b33134fab1cc075c05d4dc73c31e7ce3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Fri, 2 Sep 2022 19:30:55 +0200 Subject: [PATCH 3/5] =?UTF-8?q?docs:=20p=C5=99idat=20koment=C3=A1=C5=99e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 87ed1fc..374dd0d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -65,8 +65,12 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { if (await c.login(d["user"]!, d["pass"]!)) { var jidla = await c.jidelnicekDen(); try { - var jidlo = jidla.jidla.singleWhere((element) => element.objednano); - var kdy = DateTime.parse(prefs.getString("oznameni_cas")!); + var jidlo = jidla.jidla.singleWhere( + (element) => element.objednano); // získá objednané jídlo + var kdy = DateTime.parse(prefs.getString( + "oznameni_cas")!); // uložíme čas, kdy se má odeslat oznámení + + // data o oznámení const AndroidNotificationDetails androidSpec = AndroidNotificationDetails('predobedem', 'Oznámení před obědem', channelDescription: 'Oznámení o dnešním jídle', @@ -75,6 +79,8 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { ticker: 'today meal'); const IOSNotificationDetails iOSpec = IOSNotificationDetails(presentAlert: true, presentBadge: true); + + // naplánovat await flutterLocalNotificationsPlugin.zonedSchedule( 0, title, @@ -107,6 +113,7 @@ void main() async { oznamitPredem(prefs, l); } + // nastavit oznámení const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('notif_icon'); @@ -130,6 +137,8 @@ void main() async { debugPrint('notification payload: $payload'); } }); + + // spustit aplikaci runApp(const MyApp()); } @@ -400,6 +409,7 @@ class _LoginPageState extends State { )); } + /// Získá offline soubor a zobrazí údaje void goOffline() async { Directory appDocDir = await getApplicationDocumentsDirectory(); var den = DateTime.now(); From ae7c585ba98640700199bedc9682d9791f5f03a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Fri, 2 Sep 2022 19:51:39 +0200 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20zm=C4=9Bnit=20ikonu=20a=20varov?= =?UTF-8?q?=C3=A1n=C3=AD=20odhl=C3=A1=C5=A1en=C3=AD=20(#18)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 4 ++-- lib/lang/lang.dart | 2 ++ lib/lang/lang_cz.dart | 3 +++ lib/lang/lang_en.dart | 3 +++ lib/okna/jidelnicek.dart | 30 +++++++++++++++++++++++------- pubspec.yaml | 2 +- 7 files changed, 36 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 761162d..093b3ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ - Odstranit zbytečné podmínky - Přidat oznámení o optimalizaci baterie - Změnit ID kanálu pro android oznámení +- Změnit ikonu pro přesunutí na aktuální den +- Přidat varování před odhlášením # 1.3.0 - Odstranit connectivity_plus - Přidat možnost oznámení s info o obědu v daný čas diff --git a/README.md b/README.md index dc135fc..99a62d9 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # OpenCanteen -Open-Source **neoficiální** iCanteen klient +Open-Source **neoficiální** aplikace pro přístup do iCanteen [![wakatime](https://wakatime.com/badge/user/17178fab-a33c-430f-a764-7b3f26c7b966/project/e3ff9994-0026-4041-a529-1cb2041bdf4b.svg)](https://wakatime.com/badge/user/17178fab-a33c-430f-a764-7b3f26c7b966/project/e3ff9994-0026-4041-a529-1cb2041bdf4b) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fhernikplays%2Fopencanteen.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fhernikplays%2Fopencanteen?ref=badge_shield) [![Codemagic build status](https://api.codemagic.io/apps/62863e4c96304ce0518a1694/62863e4c96304ce0518a1693/status_badge.svg)](https://codemagic.io/apps/62863e4c96304ce0518a1694/62863e4c96304ce0518a1693/latest_build) [![Commit Style: Conventional Commits](https://img.shields.io/badge/commit%20style-conventional%20commits-pink)](https://www.conventionalcommits.org/en/v1.0.0/) ## Co umí -Aplikace vás přihlásí do instance iCanteen ***pokud ji podporuje [canteenlib](https://github.com/hernikplays/canteenlib/blob/main/COMPATIBILITY.md), jinak experimentálně***, a umožní vám zobrazit, objednávat obědy, objednávat nebo přidávat jídlo na burzubeta. +Aplikace vás přihlásí do vaší iCanteen ***pokud ji podporuje [canteenlib](https://github.com/hernikplays/canteenlib/blob/main/COMPATIBILITY.md), jinak experimentálně***, a umožní vám zobrazit, objednávat obědy, objednávat nebo přidávat jídlo na burzubeta. ## Co se plánuje - Offline ukládání jídelníčku a zakoupených jídel diff --git a/lib/lang/lang.dart b/lib/lang/lang.dart index 1c1f34a..129b784 100644 --- a/lib/lang/lang.dart +++ b/lib/lang/lang.dart @@ -89,6 +89,8 @@ abstract class Languages { String get noOrder; + String get signOutWarn; + // Uvítací obrazovka String get welcome; diff --git a/lib/lang/lang_cz.dart b/lib/lang/lang_cz.dart index 445d1ae..a2f3329 100644 --- a/lib/lang/lang_cz.dart +++ b/lib/lang/lang_cz.dart @@ -228,4 +228,7 @@ class LanguageCz extends Languages { @override String get notifyWarning => "Vaše zařízení může mít povolenou optimalizaci baterie, což může způsobovat neodesílání oznámení. Zkontrolujte nastavení ve vašem zařízení."; + + @override + String get signOutWarn => "Opravdu se chcete odhlásit?"; } diff --git a/lib/lang/lang_en.dart b/lib/lang/lang_en.dart index f0dbd9d..2563053 100644 --- a/lib/lang/lang_en.dart +++ b/lib/lang/lang_en.dart @@ -226,4 +226,7 @@ class LanguageEn extends Languages { @override String get notifyWarning => "Your device may have battery optimization enabled. This may cause notifications to not be sent. Check the application info in your device's settings."; + + @override + String get signOutWarn => "Do you really want to sign out?"; } diff --git a/lib/okna/jidelnicek.dart b/lib/okna/jidelnicek.dart index cd1f588..e6834c6 100644 --- a/lib/okna/jidelnicek.dart +++ b/lib/okna/jidelnicek.dart @@ -304,13 +304,29 @@ class _JidelnicekPageState extends State { }); } - void kliknuti( - String value, BuildContext context, FlutterLocalNotificationsPlugin n) { + Future kliknuti(String value, BuildContext context, + FlutterLocalNotificationsPlugin n) async { if (value == Languages.of(context)!.signOut) { - const storage = FlutterSecureStorage(); - storage.deleteAll(); - Navigator.pushReplacement( - context, MaterialPageRoute(builder: (c) => const LoginPage())); + await showDialog( + context: context, + builder: (c) => AlertDialog( + title: Text(Languages.of(context)!.warning), + content: Text(Languages.of(context)!.signOutWarn), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text(Languages.of(context)!.yes)), + TextButton( + onPressed: () { + const storage = FlutterSecureStorage(); + storage.deleteAll(); + Navigator.pushReplacement(context, + MaterialPageRoute(builder: (c) => const LoginPage())); + }, + child: Text(Languages.of(context)!.no)) + ], + ), + ); } else if (value == Languages.of(context)!.reportBugs) { launch("https://github.com/hernikplays/opencanteen/issues/new/choose"); } else if (value == Languages.of(context)!.about) { @@ -444,7 +460,7 @@ class _JidelnicekPageState extends State { den = DateTime.now(); nactiJidlo(); }), - icon: const Icon(Icons.calendar_today)) + icon: const Icon(Icons.today)) ]), SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), diff --git a/pubspec.yaml b/pubspec.yaml index 4856caa..4cd6527 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.3.1+16 +version: 1.3.1+17 environment: sdk: ">=2.16.1 <3.0.0" From 0ea06fa73aa14391ffcc42f8111a98a6109f1675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Fri, 2 Sep 2022 20:19:17 +0200 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20nastavit=20=C4=8Das=20dop=C5=99edu?= =?UTF-8?q?=20a=20zobrazovat=201.=20variantu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ lib/main.dart | 2 +- lib/okna/nastaveni.dart | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 093b3ef..f3d1b7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - Změnit ID kanálu pro android oznámení - Změnit ikonu pro přesunutí na aktuální den - Přidat varování před odhlášením +- Při prvním zapnutí nastavovat výchozí čas pro oznámení o hodinu dopředu +- V oznámení zobrazit nejdřív variantu a pak název jídla # 1.3.0 - Odstranit connectivity_plus - Přidat možnost oznámení s info o obědu v daný čas diff --git a/lib/main.dart b/lib/main.dart index 374dd0d..fc42683 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -84,7 +84,7 @@ void oznamitPredem(SharedPreferences prefs, tz.Location l) async { await flutterLocalNotificationsPlugin.zonedSchedule( 0, title, - "${jidlo.nazev} - ${jidlo.varianta}", + "${jidlo.varianta} - ${jidlo.nazev}", tz.TZDateTime.from( casNaDate( TimeOfDay(hour: kdy.hour, minute: kdy.minute), diff --git a/lib/okna/nastaveni.dart b/lib/okna/nastaveni.dart index 6713e61..f2d2fe3 100644 --- a/lib/okna/nastaveni.dart +++ b/lib/okna/nastaveni.dart @@ -40,7 +40,8 @@ class _NastaveniState extends State { var _casStr = preferences.getString("oznameni_cas"); if (_casStr == null) { var now = DateTime.now(); - _oznameniCas = TimeOfDay.fromDateTime(DateTime.now()); + _oznameniCas = TimeOfDay.fromDateTime( + DateTime.now().add(const Duration(hours: 1))); preferences.setString("oznameni_cas", now.toString()); } else { _oznameniCas = TimeOfDay.fromDateTime(DateTime.parse(_casStr)); @@ -239,7 +240,7 @@ class _NastaveniState extends State { // Vytvoří nové oznámení pro daný čas a datum 0, Languages.of(context)!.lunchNotif, - "${jidlo.nazev} - ${jidlo.varianta}", + "${jidlo.varianta} - ${jidlo.nazev}", tz.TZDateTime.from(den, l), const NotificationDetails(android: androidSpec, iOS: iOSpec), androidAllowWhileIdle: true,