From ec6f0880610c1ca3a0d574ad7f14e34a7b3b853c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz?= Date: Fri, 22 Oct 2021 10:34:24 +0200 Subject: [PATCH 1/2] Initialize user defaults with a custom domain --- .../service/BackgroundServiceManager.swift | 35 +++++++++---------- .../service/BackgroundServicePrefsKey.swift | 2 ++ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/ios/Classes/service/BackgroundServiceManager.swift b/ios/Classes/service/BackgroundServiceManager.swift index ac457326..b4f45bae 100644 --- a/ios/Classes/service/BackgroundServiceManager.swift +++ b/ios/Classes/service/BackgroundServiceManager.swift @@ -46,7 +46,7 @@ class BackgroundServiceManager: NSObject { private func saveOptions(call: FlutterMethodCall) { guard let argsDict = call.arguments as? Dictionary else { return } - let prefs = UserDefaults.standard + let prefs = UserDefaults(suiteName: USER_DEFAULTS_DOMAIN) let notificationContentTitle = argsDict[NOTIFICATION_CONTENT_TITLE] as? String ?? "" let notificationContentText = argsDict[NOTIFICATION_CONTENT_TEXT] as? String ?? "" @@ -55,41 +55,38 @@ class BackgroundServiceManager: NSObject { let taskInterval = argsDict[TASK_INTERVAL] as? Int ?? 5000 let callbackHandle = argsDict[CALLBACK_HANDLE] as? Int64 - prefs.set(notificationContentTitle, forKey: NOTIFICATION_CONTENT_TITLE) - prefs.set(notificationContentText, forKey: NOTIFICATION_CONTENT_TEXT) - prefs.set(showNotification, forKey: SHOW_NOTIFICATION) - prefs.set(playSound, forKey: PLAY_SOUND) - prefs.set(taskInterval, forKey: TASK_INTERVAL) - prefs.removeObject(forKey: CALLBACK_HANDLE) + prefs?.set(notificationContentTitle, forKey: NOTIFICATION_CONTENT_TITLE) + prefs?.set(notificationContentText, forKey: NOTIFICATION_CONTENT_TEXT) + prefs?.set(showNotification, forKey: SHOW_NOTIFICATION) + prefs?.set(playSound, forKey: PLAY_SOUND) + prefs?.set(taskInterval, forKey: TASK_INTERVAL) + prefs?.removeObject(forKey: CALLBACK_HANDLE) if callbackHandle != nil { - prefs.set(callbackHandle, forKey: CALLBACK_HANDLE) + prefs?.set(callbackHandle, forKey: CALLBACK_HANDLE) } } private func updateOptions(call: FlutterMethodCall) { guard let argsDict = call.arguments as? Dictionary else { return } - let prefs = UserDefaults.standard + let prefs = UserDefaults(suiteName: USER_DEFAULTS_DOMAIN) let notificationContentTitle = argsDict[NOTIFICATION_CONTENT_TITLE] as? String - ?? prefs.string(forKey: NOTIFICATION_CONTENT_TITLE) + ?? prefs?.string(forKey: NOTIFICATION_CONTENT_TITLE) ?? "" let notificationContentText = argsDict[NOTIFICATION_CONTENT_TEXT] as? String - ?? prefs.string(forKey: NOTIFICATION_CONTENT_TEXT) + ?? prefs?.string(forKey: NOTIFICATION_CONTENT_TEXT) ?? "" let callbackHandle = argsDict[CALLBACK_HANDLE] as? Int64 - prefs.set(notificationContentTitle, forKey: NOTIFICATION_CONTENT_TITLE) - prefs.set(notificationContentText, forKey: NOTIFICATION_CONTENT_TEXT) - prefs.removeObject(forKey: CALLBACK_HANDLE) + prefs?.set(notificationContentTitle, forKey: NOTIFICATION_CONTENT_TITLE) + prefs?.set(notificationContentText, forKey: NOTIFICATION_CONTENT_TEXT) + prefs?.removeObject(forKey: CALLBACK_HANDLE) if callbackHandle != nil { - prefs.set(callbackHandle, forKey: CALLBACK_HANDLE) + prefs?.set(callbackHandle, forKey: CALLBACK_HANDLE) } } private func clearOptions() { - let prefs = UserDefaults.standard - for key in prefs.dictionaryRepresentation().keys { - prefs.removeObject(forKey: key.description) - } + UserDefaults.standard.removeSuite(named: USER_DEFAULTS_DOMAIN) } } diff --git a/ios/Classes/service/BackgroundServicePrefsKey.swift b/ios/Classes/service/BackgroundServicePrefsKey.swift index 51045849..e3b102c8 100644 --- a/ios/Classes/service/BackgroundServicePrefsKey.swift +++ b/ios/Classes/service/BackgroundServicePrefsKey.swift @@ -5,6 +5,8 @@ // Created by WOO JIN HWANG on 2021/08/11. // +let USER_DEFAULTS_DOMAIN = "flutter_foreground_task" + let NOTIFICATION_CONTENT_TITLE = "notificationContentTitle" let NOTIFICATION_CONTENT_TEXT = "notificationContentText" let SHOW_NOTIFICATION = "showNotification" From c9d4a8becdb9d341dd5ffddaa08fd8ab65238f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz?= Date: Tue, 2 Nov 2021 16:19:35 +0100 Subject: [PATCH 2/2] Prevent NPE --- .../service/ForegroundService.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/android/src/main/kotlin/com/pravera/flutter_foreground_task/service/ForegroundService.kt b/android/src/main/kotlin/com/pravera/flutter_foreground_task/service/ForegroundService.kt index 61ca99bf..000e7217 100644 --- a/android/src/main/kotlin/com/pravera/flutter_foreground_task/service/ForegroundService.kt +++ b/android/src/main/kotlin/com/pravera/flutter_foreground_task/service/ForegroundService.kt @@ -128,7 +128,8 @@ class ForegroundService: Service(), MethodChannel.MethodCallHandler { override fun onDestroy() { super.onDestroy() destroyForegroundTask() - if (serviceAction != ForegroundServiceAction.STOP) { + + if (serviceAction != null && serviceAction != ForegroundServiceAction.STOP) { Log.d(TAG, "The foreground service was terminated due to an unexpected problem. Set a restart alarm.") setRestartAlarm() } @@ -200,17 +201,17 @@ class ForegroundService: Service(), MethodChannel.MethodCallHandler { currFlutterEngine = FlutterEngine(this) flutterLoader = FlutterInjector.instance().flutterLoader() - flutterLoader!!.startInitialization(this) - flutterLoader!!.ensureInitializationComplete(this, null) + flutterLoader?.startInitialization(this) + flutterLoader?.ensureInitializationComplete(this, null) - val messenger = currFlutterEngine!!.dartExecutor.binaryMessenger + val messenger = currFlutterEngine?.dartExecutor.binaryMessenger backgroundChannel = MethodChannel(messenger, "flutter_foreground_task/background") - backgroundChannel!!.setMethodCallHandler(this) + backgroundChannel?.setMethodCallHandler(this) val callbackInfo = FlutterCallbackInformation.lookupCallbackInformation(callbackHandle) - val appBundlePath = flutterLoader!!.findAppBundlePath() + val appBundlePath = flutterLoader?.findAppBundlePath() val dartCallback = DartExecutor.DartCallback(assets, appBundlePath, callbackInfo) - currFlutterEngine!!.dartExecutor.executeDartCallback(dartCallback) + currFlutterEngine?.dartExecutor.executeDartCallback(dartCallback) } private fun startForegroundTask() {