From 1cdde3b6ce98e057193422f5ffbb9f83ff19bd5f Mon Sep 17 00:00:00 2001 From: hihihaha Date: Sat, 10 Jun 2023 19:50:32 +0200 Subject: [PATCH] add notification --- .idea/naplo.iml | 60 ++++++++++++- .../src/main/res/drawable/ic_notification.png | Bin 0 -> 12868 bytes .../lib/helpers/notification_helper.dart | 59 +++++++++++++ .../lib/helpers/notification_helper.i18n.dart | 24 ++++++ filcnaplo/lib/main.dart | 79 ++++++++++++++++++ .../flutter/generated_plugin_registrant.cc | 4 - .../linux/flutter/generated_plugins.cmake | 1 - .../Flutter/GeneratedPluginRegistrant.swift | 2 - 8 files changed, 221 insertions(+), 8 deletions(-) create mode 100644 filcnaplo/android/app/src/main/res/drawable/ic_notification.png create mode 100644 filcnaplo/lib/helpers/notification_helper.dart create mode 100644 filcnaplo/lib/helpers/notification_helper.i18n.dart diff --git a/.idea/naplo.iml b/.idea/naplo.iml index d6ebd48..ab2f482 100644 --- a/.idea/naplo.iml +++ b/.idea/naplo.iml @@ -2,7 +2,65 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/filcnaplo/android/app/src/main/res/drawable/ic_notification.png b/filcnaplo/android/app/src/main/res/drawable/ic_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..67fd37099efd5865fb8e1d9efb98e553081bc02d GIT binary patch literal 12868 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 VYI+y=9}y4;rJ=9>_NwK*{{ grades = + await database.userQuery.getGrades(userId: userProvider.id ?? ""); + DateTime lastSeenGrade = + await database.userQuery.lastSeenGrade(userId: userProvider.id ?? ""); + for (Grade grade in grades) { + if (grade.seenDate.isAfter(lastSeenGrade)) { + const AndroidNotificationDetails androidNotificationDetails = + AndroidNotificationDetails('GRADES', 'Jegyek', + channelDescription: 'Értesítés jegyek beírásakor', + importance: Importance.max, + priority: Priority.max, + color: const Color(0xFF3D7BF4), + ticker: 'ticker'); + const NotificationDetails notificationDetails = + NotificationDetails(android: androidNotificationDetails); + await flutterLocalNotificationsPlugin.show( + Random().nextInt(432234*2), "title".i18n, "body".i18n.fill([grade.value.value.toString(), grade.subject.name.toString()]), notificationDetails); + + } + } + } +} diff --git a/filcnaplo/lib/helpers/notification_helper.i18n.dart b/filcnaplo/lib/helpers/notification_helper.i18n.dart new file mode 100644 index 0000000..5c96488 --- /dev/null +++ b/filcnaplo/lib/helpers/notification_helper.i18n.dart @@ -0,0 +1,24 @@ +import 'package:i18n_extension/i18n_extension.dart'; + +extension Localization on String { + static final _t = Translations.byLocale("hu_hu") + + { + "en_en": { + "title": "New grade", + "body": "You got a %s in %s" + }, + "hu_hu": { + "title": "Új jegy", + "body": "%s-st kaptál %s tantárgyból" + }, + "de_de": { + "title": "Neue Note", + "body": "Du hast eine %s in %s" + }, + }; + + String get i18n => localize(this, _t); + String fill(List params) => localizeFill(this, params); + String plural(int value) => localizePlural(value, this, _t); + String version(Object modifier) => localizeVersion(modifier, this, _t); +} diff --git a/filcnaplo/lib/main.dart b/filcnaplo/lib/main.dart index 7032313..bd87738 100644 --- a/filcnaplo/lib/main.dart +++ b/filcnaplo/lib/main.dart @@ -2,13 +2,16 @@ import 'package:background_fetch/background_fetch.dart'; import 'package:filcnaplo/api/providers/user_provider.dart'; import 'package:filcnaplo/api/providers/database_provider.dart'; import 'package:filcnaplo/database/init.dart'; +import 'package:filcnaplo/helpers/notification_helper.dart'; import 'package:filcnaplo/models/settings.dart'; +import 'package:filcnaplo_kreta_api/client/client.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:filcnaplo/app.dart'; import 'package:flutter/services.dart'; import 'package:filcnaplo_mobile_ui/screens/error_screen.dart'; import 'package:filcnaplo_mobile_ui/screens/error_report_screen.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; void main() async { // Initalize @@ -43,6 +46,53 @@ class Startup { await database.init(); settings = await database.query.getSettings(database); user = await database.query.getUsers(settings); + + // Notifications setup + initPlatformState(); + FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = + FlutterLocalNotificationsPlugin(); + + // Get permission to show notifications + flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + AndroidFlutterLocalNotificationsPlugin>()! + .requestPermission(); + await flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + IOSFlutterLocalNotificationsPlugin>() + ?.requestPermissions( + alert: false, + badge: true, + sound: true, + ); + await flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + MacOSFlutterLocalNotificationsPlugin>() + ?.requestPermissions( + alert: false, + badge: true, + sound: true, + ); + + // Platform specific settings + final DarwinInitializationSettings initializationSettingsDarwin = + DarwinInitializationSettings( + requestSoundPermission: true, + requestBadgePermission: true, + requestAlertPermission: false, + ); + const AndroidInitializationSettings initializationSettingsAndroid = + AndroidInitializationSettings('ic_notification'); + final InitializationSettings initializationSettings = InitializationSettings( + android: initializationSettingsAndroid, + iOS: initializationSettingsDarwin, + macOS: initializationSettingsDarwin + ); + + // Initialize notifications + await flutterLocalNotificationsPlugin.initialize( + initializationSettings, + ); } } @@ -71,9 +121,38 @@ Widget errorBuilder(FlutterErrorDetails details) { return Container(); }); } +// Platform messages are asynchronous, so we initialize in an async method. + Future initPlatformState() async { + // Configure BackgroundFetch. + int status = await BackgroundFetch.configure(BackgroundFetchConfig( + minimumFetchInterval: 15, + stopOnTerminate: false, + enableHeadless: true, + requiresBatteryNotLow: false, + requiresCharging: false, + requiresStorageNotLow: false, + requiresDeviceIdle: false, + requiredNetworkType: NetworkType.ANY + ), (String taskId) async { // <-- Event handler + // This is the fetch-event callback. + print("[BackgroundFetch] Event received $taskId"); + NotificationsHelper().backgroundJob(); + + // IMPORTANT: You must signal completion of your task or the OS can punish your app + // for taking too long in the background. + BackgroundFetch.finish(taskId); + }, (String taskId) async { // <-- Task timeout handler. + // This task has exceeded its allowed running-time. You must stop what you're doing and immediately .finish(taskId) + print("[BackgroundFetch] TASK TIMEOUT taskId: $taskId"); + BackgroundFetch.finish(taskId); + }); + print('[BackgroundFetch] configure success: $status'); + + } @pragma('vm:entry-point') void backgroundHeadlessTask(HeadlessTask task) { print('[BackgroundFetch] Headless event received.'); + NotificationsHelper().backgroundJob(); BackgroundFetch.finish(task.taskId); } diff --git a/filcnaplo/linux/flutter/generated_plugin_registrant.cc b/filcnaplo/linux/flutter/generated_plugin_registrant.cc index 0fcfb27..4894d34 100644 --- a/filcnaplo/linux/flutter/generated_plugin_registrant.cc +++ b/filcnaplo/linux/flutter/generated_plugin_registrant.cc @@ -7,7 +7,6 @@ #include "generated_plugin_registrant.h" #include -#include #include #include @@ -15,9 +14,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) dynamic_color_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin"); dynamic_color_plugin_register_with_registrar(dynamic_color_registrar); - g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); - file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) flutter_acrylic_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterAcrylicPlugin"); flutter_acrylic_plugin_register_with_registrar(flutter_acrylic_registrar); diff --git a/filcnaplo/linux/flutter/generated_plugins.cmake b/filcnaplo/linux/flutter/generated_plugins.cmake index c5541e6..c8808fe 100644 --- a/filcnaplo/linux/flutter/generated_plugins.cmake +++ b/filcnaplo/linux/flutter/generated_plugins.cmake @@ -4,7 +4,6 @@ list(APPEND FLUTTER_PLUGIN_LIST dynamic_color - file_selector_linux flutter_acrylic url_launcher_linux ) diff --git a/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift b/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift index 53df988..c6b190d 100644 --- a/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,7 +7,6 @@ import Foundation import connectivity_plus import dynamic_color -import file_selector_macos import flutter_local_notifications import macos_window_utils import package_info_plus @@ -19,7 +18,6 @@ import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) - FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) MacOSWindowUtilsPlugin.register(with: registry.registrar(forPlugin: "MacOSWindowUtilsPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))