diff --git a/android/src/main/kotlin/rekab/app/background_locator/BackgroundLocatorPlugin.kt b/android/src/main/kotlin/rekab/app/background_locator/BackgroundLocatorPlugin.kt index 405b458b..56ea98f6 100644 --- a/android/src/main/kotlin/rekab/app/background_locator/BackgroundLocatorPlugin.kt +++ b/android/src/main/kotlin/rekab/app/background_locator/BackgroundLocatorPlugin.kt @@ -212,23 +212,25 @@ class BackgroundLocatorPlugin override fun onMethodCall(call: MethodCall, result: Result) { when (call.method) { Keys.METHOD_PLUGIN_INITIALIZE_SERVICE -> { - val args: Map = call.arguments() + val args: Map? = call.arguments() // save callback dispatcher to use it when device reboots - PreferencesManager.saveCallbackDispatcher(context!!, args) + args?.let { PreferencesManager.saveCallbackDispatcher(context!!, it) } - initializeService(context!!, args) + args?.let { initializeService(context!!, it) } result.success(true) } Keys.METHOD_PLUGIN_REGISTER_LOCATION_UPDATE -> { - val args: Map = call.arguments() + val args: Map? = call.arguments() // save setting to use it when device reboots - PreferencesManager.saveSettings(context!!, args) + args?.let { PreferencesManager.saveSettings(context!!, it) } - registerLocator(context!!, - args, + args?.let { + registerLocator(context!!, + it, result) + } } Keys.METHOD_PLUGIN_UN_REGISTER_LOCATION_UPDATE -> { unRegisterPlugin(context!!, result) @@ -240,8 +242,8 @@ class BackgroundLocatorPlugin return } - val args: Map = call.arguments() - updateNotificationText(context!!, args) + val args: Map? = call.arguments() + args?.let { updateNotificationText(context!!, it) } result.success(true) } else -> result.notImplemented() @@ -263,7 +265,7 @@ class BackgroundLocatorPlugin channel?.setMethodCallHandler(plugin) } - override fun onNewIntent(intent: Intent?): Boolean { + override fun onNewIntent(intent: Intent): Boolean { if (intent?.action != Keys.NOTIFICATION_ACTION) { // this is not our notification return false @@ -272,12 +274,15 @@ class BackgroundLocatorPlugin val notificationCallback = PreferencesManager.getCallbackHandle(activity!!, Keys.NOTIFICATION_CALLBACK_HANDLE_KEY) if (notificationCallback != null && IsolateHolderService.backgroundEngine != null) { val backgroundChannel = - MethodChannel(IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger, Keys.BACKGROUND_CHANNEL_ID) + IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger?.let { + MethodChannel( + it, Keys.BACKGROUND_CHANNEL_ID) + } activity?.mainLooper?.let { Handler(it) .post { - backgroundChannel.invokeMethod(Keys.BCM_NOTIFICATION_CLICK, - hashMapOf(Keys.ARG_NOTIFICATION_CALLBACK to notificationCallback)) + backgroundChannel?.invokeMethod(Keys.BCM_NOTIFICATION_CLICK, + hashMapOf(Keys.ARG_NOTIFICATION_CALLBACK to notificationCallback)) } } } @@ -300,4 +305,6 @@ class BackgroundLocatorPlugin } + + } diff --git a/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderExtension.kt b/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderExtension.kt index 9c0f65d0..c3ed6fe2 100644 --- a/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderExtension.kt +++ b/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderExtension.kt @@ -39,8 +39,11 @@ internal fun IsolateHolderService.startLocatorService(context: Context) { } backgroundChannel = - MethodChannel(IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger, - Keys.BACKGROUND_CHANNEL_ID) + IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger?.let { + MethodChannel( + it, + Keys.BACKGROUND_CHANNEL_ID) + }!! backgroundChannel.setMethodCallHandler(this) } diff --git a/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderService.kt b/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderService.kt index a5dc9e41..f94f5863 100644 --- a/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderService.kt +++ b/android/src/main/kotlin/rekab/app/background_locator/IsolateHolderService.kt @@ -266,11 +266,11 @@ class IsolateHolderService : MethodChannel.MethodCallHandler, LocationUpdateList if (backgroundEngine != null) { val backgroundChannel = - MethodChannel(backgroundEngine?.dartExecutor?.binaryMessenger, Keys.BACKGROUND_CHANNEL_ID) + backgroundEngine?.dartExecutor?.binaryMessenger?.let { MethodChannel(it, Keys.BACKGROUND_CHANNEL_ID) } Handler(context.mainLooper) .post { Log.d("plugin", "sendLocationEvent $result") - backgroundChannel.invokeMethod(Keys.BCM_SEND_LOCATION, result) + backgroundChannel?.invokeMethod(Keys.BCM_SEND_LOCATION, result) } } } diff --git a/android/src/main/kotlin/rekab/app/background_locator/pluggables/DisposePluggable.kt b/android/src/main/kotlin/rekab/app/background_locator/pluggables/DisposePluggable.kt index 69358109..34fb4209 100644 --- a/android/src/main/kotlin/rekab/app/background_locator/pluggables/DisposePluggable.kt +++ b/android/src/main/kotlin/rekab/app/background_locator/pluggables/DisposePluggable.kt @@ -14,12 +14,15 @@ class DisposePluggable : Pluggable { override fun onServiceDispose(context: Context) { (PreferencesManager.getCallbackHandle(context, Keys.DISPOSE_CALLBACK_HANDLE_KEY))?.let { disposeCallback -> - val backgroundChannel = MethodChannel(IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger, + val backgroundChannel = IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger?.let { + MethodChannel( + it, Keys.BACKGROUND_CHANNEL_ID) + } Handler(context.mainLooper) .post { - backgroundChannel.invokeMethod(Keys.BCM_DISPOSE, - hashMapOf(Keys.ARG_DISPOSE_CALLBACK to disposeCallback)) + backgroundChannel?.invokeMethod(Keys.BCM_DISPOSE, + hashMapOf(Keys.ARG_DISPOSE_CALLBACK to disposeCallback)) } } } diff --git a/android/src/main/kotlin/rekab/app/background_locator/pluggables/InitPluggable.kt b/android/src/main/kotlin/rekab/app/background_locator/pluggables/InitPluggable.kt index a33a7ecf..aaa1710f 100644 --- a/android/src/main/kotlin/rekab/app/background_locator/pluggables/InitPluggable.kt +++ b/android/src/main/kotlin/rekab/app/background_locator/pluggables/InitPluggable.kt @@ -19,12 +19,15 @@ class InitPluggable : Pluggable { if (!isInitCallbackCalled) { (PreferencesManager.getCallbackHandle(context, Keys.INIT_CALLBACK_HANDLE_KEY))?.let { initCallback -> val initialDataMap = PreferencesManager.getDataCallback(context, Keys.INIT_DATA_CALLBACK_KEY) - val backgroundChannel = MethodChannel(IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger, + val backgroundChannel = IsolateHolderService.backgroundEngine?.dartExecutor?.binaryMessenger?.let { + MethodChannel( + it, Keys.BACKGROUND_CHANNEL_ID) + } Handler(context.mainLooper) .post { - backgroundChannel.invokeMethod(Keys.BCM_INIT, - hashMapOf(Keys.ARG_INIT_CALLBACK to initCallback, Keys.ARG_INIT_DATA_CALLBACK to initialDataMap)) + backgroundChannel?.invokeMethod(Keys.BCM_INIT, + hashMapOf(Keys.ARG_INIT_CALLBACK to initCallback, Keys.ARG_INIT_DATA_CALLBACK to initialDataMap)) } } isInitCallbackCalled = true diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index d6cedd6f..b1484165 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -26,15 +26,12 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 30 + compileSdkVersion 32 sourceSets { main.java.srcDirs += 'src/main/kotlin' } - lintOptions { - disable 'InvalidPackage' - } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). @@ -53,6 +50,10 @@ android { signingConfig signingConfigs.debug } } + lint { + disable 'InvalidPackage' + } + namespace 'rekab.app.background_locator_example' } flutter { diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml index 73b24028..892d4b3c 100644 --- a/example/android/app/src/debug/AndroidManifest.xml +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,4 @@ - + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 6d0375fe..5ecaea43 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ +package="rekab.app.background_locator_example"> diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml index 73b24028..892d4b3c 100644 --- a/example/android/app/src/profile/AndroidManifest.xml +++ b/example/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,4 @@ - + diff --git a/example/android/build.gradle b/example/android/build.gradle index d07a36ef..a39e831a 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.3' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index e9a42cd4..dd491e93 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip diff --git a/example/lib/location_service_repository.dart b/example/lib/location_service_repository.dart index 14a0edb3..ba001e1b 100644 --- a/example/lib/location_service_repository.dart +++ b/example/lib/location_service_repository.dart @@ -21,7 +21,6 @@ class LocationServiceRepository { int _count = -1; Future init(Map params) async { - //TODO change logs print("***********Init callback handler"); if (params.containsKey('countInit')) { dynamic tmpCount = params['countInit']; diff --git a/example/lib/main.dart b/example/lib/main.dart index a13d16f6..5cd8458e 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:ffi'; import 'dart:isolate'; import 'dart:ui'; @@ -203,9 +202,10 @@ class _MyAppState extends State { } } - Future _startLocator() async{ + Future _startLocator() async { Map data = {'countInit': 1}; - return await BackgroundLocator.registerLocationUpdate(LocationCallbackHandler.callback, + return await BackgroundLocator.registerLocationUpdate( + LocationCallbackHandler.callback, initCallback: LocationCallbackHandler.initCallback, initDataCallback: data, disposeCallback: LocationCallbackHandler.disposeCallback, diff --git a/example/pubspec.yaml b/example/pubspec.yaml index ce0011f9..2a12027f 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -20,8 +20,8 @@ dev_dependencies: background_locator: path: ../ - path_provider: ^2.0.8 - location_permissions: ^3.0.0+1 + path_provider: ^2.0.10 + location_permissions: ^4.0.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/lib/background_locator.dart b/lib/background_locator.dart index d824172f..9ba6e263 100644 --- a/lib/background_locator.dart +++ b/lib/background_locator.dart @@ -31,7 +31,7 @@ class BackgroundLocator { AndroidSettings androidSettings = const AndroidSettings(), IOSSettings iosSettings = const IOSSettings()}) async { if (autoStop) { - WidgetsBinding.instance!.addObserver(AutoStopHandler()); + WidgetsBinding.instance.addObserver(AutoStopHandler()); } final args = SettingsUtil.getArgumentsMap( diff --git a/lib/location_dto.dart b/lib/location_dto.dart index c78022fe..38d0165c 100644 --- a/lib/location_dto.dart +++ b/lib/location_dto.dart @@ -40,7 +40,7 @@ class LocationDto { json[Keys.ARG_HEADING], json[Keys.ARG_TIME], isLocationMocked, - json[Keys.ARG_PROVIDER], + json.containsKey(Keys.ARG_PROVIDER) ? json[Keys.ARG_PROVIDER] : "", ); }