react-native-move-sdk 2.13.0 → 2.14.0-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/android/build.gradle.kts +42 -0
  2. package/android/gradle.properties +16 -6
  3. package/android/settings.gradle.kts +35 -0
  4. package/android/src/{main/java/in/dolph/move/sdk → legacy}/MoveSdkModule.kt +30 -195
  5. package/android/src/main/AndroidManifest.xml +1 -11
  6. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/DeviceScanner.kt +19 -21
  7. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/Mapper.kt +3 -2
  8. package/android/src/main/java/com/movesdk/MoveExtensions.kt +188 -0
  9. package/android/src/main/java/{in/dolph/move/sdk/MoveSdkRepository.kt → com/movesdk/MoveSdkConfigRepository.kt} +3 -1
  10. package/android/src/main/java/com/movesdk/MoveSdkPackage.kt +32 -0
  11. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/NativeMoveSdkWrapper.kt +201 -61
  12. package/android/src/main/java/com/movesdk/extentions/ConnectionExt.kt +52 -0
  13. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/extentions/PermissionUtils.kt +1 -1
  14. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/extentions/SharedPreferencesExt.kt +1 -1
  15. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/metadata/MetadataStorage.kt +1 -1
  16. package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/metadata/MetadataStorageImpl.kt +2 -2
  17. package/android/src/main/java/com/movesdk/shared/Constants.kt +39 -0
  18. package/android/src/turbo/MoveSdkModule.kt +422 -0
  19. package/ios/MoveSdk.h +13 -0
  20. package/ios/MoveSdk.mm +717 -0
  21. package/ios/MoveSdk.swift +1022 -0
  22. package/ios/{NativeModule/MoveSdkDeviceScanner.swift → MoveSdkDeviceScanner.swift} +1 -1
  23. package/lib/commonjs/NativeMoveSdk.js +21 -0
  24. package/lib/commonjs/NativeMoveSdk.js.map +1 -0
  25. package/lib/commonjs/components/LazyMoveSdk.js +22 -41
  26. package/lib/commonjs/components/LazyMoveSdk.js.map +1 -1
  27. package/lib/commonjs/index.js +331 -25
  28. package/lib/commonjs/index.js.map +1 -1
  29. package/lib/commonjs/package.json +1 -0
  30. package/lib/module/NativeMoveSdk.js +17 -0
  31. package/lib/module/NativeMoveSdk.js.map +1 -0
  32. package/lib/module/components/LazyMoveSdk.js +15 -20
  33. package/lib/module/components/LazyMoveSdk.js.map +1 -1
  34. package/lib/module/index.js +337 -3
  35. package/lib/module/index.js.map +1 -1
  36. package/lib/module/package.json +1 -0
  37. package/lib/typescript/commonjs/example/src/App.d.ts +2 -0
  38. package/lib/typescript/commonjs/example/src/App.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/package.json +1 -0
  40. package/lib/typescript/commonjs/src/NativeMoveSdk.d.ts +133 -0
  41. package/lib/typescript/commonjs/src/NativeMoveSdk.d.ts.map +1 -0
  42. package/lib/typescript/{components → commonjs/src/components}/LazyMoveSdk.d.ts +2 -1
  43. package/lib/typescript/commonjs/src/components/LazyMoveSdk.d.ts.map +1 -0
  44. package/lib/typescript/commonjs/src/index.d.ts +84 -0
  45. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  46. package/lib/typescript/module/example/src/App.d.ts +2 -0
  47. package/lib/typescript/module/example/src/App.d.ts.map +1 -0
  48. package/lib/typescript/module/package.json +1 -0
  49. package/lib/typescript/module/src/NativeMoveSdk.d.ts +133 -0
  50. package/lib/typescript/module/src/NativeMoveSdk.d.ts.map +1 -0
  51. package/lib/typescript/module/src/components/LazyMoveSdk.d.ts +8 -0
  52. package/lib/typescript/module/src/components/LazyMoveSdk.d.ts.map +1 -0
  53. package/lib/typescript/module/src/index.d.ts +84 -0
  54. package/lib/typescript/module/src/index.d.ts.map +1 -0
  55. package/package.json +197 -138
  56. package/react-native-move-sdk.podspec +30 -9
  57. package/src/NativeMoveSdk.ts +227 -0
  58. package/src/components/LazyMoveSdk.tsx +2 -2
  59. package/src/{MoveSdk.ts → index.tsx} +131 -199
  60. package/android/.project +0 -17
  61. package/android/build.gradle +0 -153
  62. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  63. package/android/gradle/wrapper/gradle-wrapper.properties +0 -8
  64. package/android/gradlew +0 -183
  65. package/android/gradlew.bat +0 -100
  66. package/android/src/main/java/in/dolph/move/sdk/MoveExtensions.kt +0 -72
  67. package/android/src/main/java/in/dolph/move/sdk/MoveSdkPackage.kt +0 -19
  68. package/android/src/main/java/in/dolph/move/sdk/WrapperBtConnectionsReceiver.kt +0 -99
  69. package/android/src/main/res/drawable-anydpi-v24/ic_notification.xml +0 -13
  70. package/android/src/main/res/drawable-hdpi/ic_notification.png +0 -0
  71. package/android/src/main/res/drawable-mdpi/ic_notification.png +0 -0
  72. package/android/src/main/res/drawable-xhdpi/ic_notification.png +0 -0
  73. package/android/src/main/res/drawable-xxhdpi/ic_notification.png +0 -0
  74. package/android/src/main/res/values/strings.xml +0 -9
  75. package/android/src/main/strings.xml +0 -0
  76. package/android/src/test/java/io/dolphin/move/MoveWrapperTest.kt +0 -190
  77. package/ios/MoveSdk-Bridging-Header.h +0 -3
  78. package/ios/MoveSdk.xcodeproj/project.pbxproj +0 -287
  79. package/ios/MoveSdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -4
  80. package/ios/MoveSdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  81. package/ios/NativeModule/MoveSdk.h +0 -144
  82. package/ios/NativeModule/MoveSdk.swift +0 -1359
  83. package/lib/commonjs/MoveSdk.js +0 -443
  84. package/lib/commonjs/MoveSdk.js.map +0 -1
  85. package/lib/module/MoveSdk.js +0 -432
  86. package/lib/module/MoveSdk.js.map +0 -1
  87. package/lib/typescript/MoveSdk.d.ts +0 -158
  88. package/lib/typescript/index.d.ts +0 -3
  89. package/src/index.ts +0 -3
@@ -0,0 +1,52 @@
1
+ package com.movesdk.extentions
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.bluetooth.BluetoothDevice
5
+ import android.bluetooth.BluetoothManager
6
+ import android.bluetooth.BluetoothProfile
7
+ import android.content.Context
8
+ import kotlin.coroutines.resume
9
+ import kotlin.coroutines.suspendCoroutine
10
+
11
+ private val btProfiles =
12
+ listOf<Int>(
13
+ BluetoothProfile.A2DP,
14
+ BluetoothProfile.HEADSET,
15
+ )
16
+
17
+ @SuppressLint("MissingPermission")
18
+ suspend fun Context.getConnectedDevices(): List<BluetoothDevice> {
19
+ val connectedDevices = mutableSetOf<BluetoothDevice>()
20
+ val profileIterator = btProfiles.iterator()
21
+ while (profileIterator.hasNext()) {
22
+ val profile = profileIterator.next()
23
+ connectedDevices.addAll(
24
+ getConnectedDevices(profile),
25
+ )
26
+ }
27
+ val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as? BluetoothManager
28
+ bluetoothManager?.getConnectedDevices(BluetoothProfile.GATT)?.let(connectedDevices::addAll)
29
+ return connectedDevices.toList()
30
+ }
31
+
32
+ private suspend fun Context.getConnectedDevices(profile: Int): List<BluetoothDevice> =
33
+ suspendCoroutine { continuation ->
34
+ val adapter = getSystemService(BluetoothManager::class.java)?.adapter
35
+ adapter?.getProfileProxy(
36
+ this,
37
+ object : BluetoothProfile.ServiceListener {
38
+ override fun onServiceConnected(
39
+ profile: Int,
40
+ proxy: BluetoothProfile?,
41
+ ) {
42
+ continuation.resume(proxy?.connectedDevices ?: emptyList())
43
+ adapter.closeProfileProxy(profile, proxy)
44
+ }
45
+
46
+ override fun onServiceDisconnected(profile: Int) {}
47
+ },
48
+ profile,
49
+ ) ?: {
50
+ continuation.resume(emptyList())
51
+ }
52
+ }
@@ -1,4 +1,4 @@
1
- package `in`.dolph.move.sdk.extentions
1
+ package com.movesdk.extentions
2
2
 
3
3
  import android.Manifest
4
4
  import android.content.Context
@@ -1,4 +1,4 @@
1
- package `in`.dolph.move.sdk.extentions
1
+ package com.movesdk.extentions
2
2
 
3
3
  import android.content.SharedPreferences
4
4
  import androidx.core.content.edit
@@ -1,4 +1,4 @@
1
- package `in`.dolph.move.sdk.metadata
1
+ package com.movesdk.metadata
2
2
 
3
3
  const val METADATA_PREF = "move_sdk_metadata"
4
4
  interface MetadataStorage {
@@ -1,10 +1,10 @@
1
- package `in`.dolph.move.sdk.metadata
1
+ package com.movesdk.metadata
2
2
 
3
3
  import android.content.SharedPreferences
4
4
  import android.util.Log
5
5
  import com.google.gson.Gson
6
6
  import com.google.gson.reflect.TypeToken
7
- import `in`.dolph.move.sdk.extentions.stringNullable
7
+ import com.movesdk.extentions.stringNullable
8
8
 
9
9
  class MetadataStorageImpl(
10
10
  sharedPreferences: SharedPreferences,
@@ -0,0 +1,39 @@
1
+ package com.movesdk.shared
2
+
3
+ const val EVENT_INIT_ERROR = "MoveSdk-InitError"
4
+ const val EVENT_MOVE_STATE = "MoveSdk-State"
5
+ const val EVENT_TRIP_STATE = "MoveSdk-TripState"
6
+ const val EVENT_AUTH_STATE = "MoveSdk-AuthState"
7
+ const val EVENT_ERRORS = "MoveSdk-Errors"
8
+ const val EVENT_WARNINGS = "MoveSdk-Warnings"
9
+ const val EVENT_MOVE_DEVICES = "MoveSdk-Devices"
10
+ const val EVENT_AUTH_BATTERY_PERMISSION = "MoveSdk-Permission-BatteryOptimization"
11
+ const val EVENT_AUTH_OVERLAY_PERMISSION = "MoveSdk-Permission-Overlay"
12
+ const val EVENT_MOVE_SCAN_RESULT = "MOVE_SDK_SCAN_RESULT"
13
+ const val EVENT_MOVE_SDK_APP = "MOVE_SDK_APP_EVENT"
14
+ const val EVENT_MOVE_CONFIG_UPDATE = "MOVE_SDK_CONFIG_UPDATE"
15
+ const val EVENT_MOVE_SDK_TRIP_START = "MOVE_SDK_TRIP_START"
16
+ const val EVENT_MOVE_SDK_DEVICE_STATE = "MOVE_SDK_DEVICE_STATE"
17
+ const val EVENT_MOVE_SDK_LOG = "MOVE_SDK_LOG"
18
+ const val EVENT_MOVE_SDK_HEALTH = "MOVE_SDK_HEALTH"
19
+
20
+ const val ARGUMENT_ACCESS_TOKEN = "accessToken"
21
+ const val ARGUMENT_REFRESH_TOKEN = "refreshToken"
22
+ const val ARGUMENT_STATE = "state"
23
+ const val ARGUMENT_ERROR = "errors"
24
+ const val ARGUMENT_ERRORS = "errors"
25
+ const val ARGUMENT_WARNINGS = "warnings"
26
+ const val ARGUMENT_LOG = "log"
27
+ const val ARGUMENT_WARNING = "warnings"
28
+ const val ARGUMENT_ERROR_REASON = "errorReason"
29
+ const val ARGUMENT_DEVICES = "devices"
30
+ const val ARGUMENT_SCAN_RESULTS = "results"
31
+ const val ARGUMENT_MOVE_SERVICES = "services"
32
+ const val ARGUMENT_MOVE_HEALTH = "health"
33
+
34
+ const val PROMISE_OK = "OK"
35
+ const val LOG_TAG = "MOVE_SDK"
36
+ const val ERROR_CODE = "MOVE_SDK_ERROR"
37
+
38
+ const val OVERLAY_REQUEST_CODE = 1
39
+ const val BATTERY_OPTIMIZATION_REQUEST_CODE = 2
@@ -0,0 +1,422 @@
1
+ package com.movesdk
2
+
3
+ import android.app.Activity
4
+ import android.content.Intent
5
+ import android.provider.Settings
6
+ import android.util.Log
7
+ import com.facebook.react.bridge.ActivityEventListener
8
+ import com.facebook.react.bridge.Callback
9
+ import com.facebook.react.bridge.Promise
10
+ import com.facebook.react.bridge.ReactApplicationContext
11
+ import com.facebook.react.bridge.ReadableArray
12
+ import com.facebook.react.bridge.ReadableMap
13
+ import com.movesdk.shared.ARGUMENT_STATE
14
+ import com.movesdk.shared.BATTERY_OPTIMIZATION_REQUEST_CODE
15
+ import com.movesdk.shared.EVENT_AUTH_BATTERY_PERMISSION
16
+ import com.movesdk.shared.EVENT_AUTH_OVERLAY_PERMISSION
17
+ import com.movesdk.shared.LOG_TAG
18
+ import com.movesdk.shared.OVERLAY_REQUEST_CODE
19
+ import io.dolphin.move.MoveSdk
20
+ import io.dolphin.move.MoveServiceWarning
21
+
22
+ class MoveSdkModule internal constructor(context: ReactApplicationContext) :
23
+ NativeMoveSdkSpec(context), ActivityEventListener {
24
+
25
+ companion object {
26
+ const val NAME = "MoveSdk"
27
+ }
28
+
29
+ private val reactContext: ReactApplicationContext = context
30
+
31
+ private val nativeSdkWrapper = NativeMoveSdkWrapper.getInstance(context)
32
+
33
+ init {
34
+ nativeSdkWrapper.applyDelegate(this)
35
+
36
+ // **** PERMISSIONS MODULE START *****
37
+ reactContext.addActivityEventListener(this)
38
+ // **** PERMISSIONS MODULE START *****
39
+ }
40
+
41
+ override fun getName(): String {
42
+ return NAME
43
+ }
44
+
45
+ override fun addListener(eventType: String?) {
46
+ // Set up any upstream listeners or background tasks as necessary
47
+ }
48
+
49
+ override fun removeListeners(count: Double) {
50
+ // Remove upstream listeners, stop unnecessary background tasks
51
+ }
52
+
53
+ override fun cancelTimer(key: String?) {
54
+ nativeSdkWrapper.cancelTimer(key = key)
55
+ }
56
+
57
+ override fun canDrawOverlays(promise: Promise) {
58
+ promise.resolve(Settings.canDrawOverlays(reactContext))
59
+ }
60
+
61
+ override fun finishCurrentTrip() {
62
+ nativeSdkWrapper.finishCurrentTrip()
63
+ }
64
+
65
+ override fun forceTripRecognition(duration: Double) {
66
+ nativeSdkWrapper.forceTripRecognition(duration.toLong())
67
+ }
68
+
69
+ override fun getAuthState(promise: Promise) {
70
+ nativeSdkWrapper.getAuthState(promise)
71
+ }
72
+
73
+ override fun getBluetoothPermission(promise: Promise) {
74
+ promise.resolve(nativeSdkWrapper.hasDiscoveryPermissions())
75
+ }
76
+
77
+ override fun getBluetoothState(promise: Promise) {
78
+ promise.resolve(nativeSdkWrapper.isBluetoothEnabled())
79
+ }
80
+
81
+ override fun getDeviceQualifier(promise: Promise) {
82
+ promise.resolve(nativeSdkWrapper.getDeviceQualifier())
83
+ }
84
+
85
+ override fun getErrors(promise: Promise?) {
86
+ nativeSdkWrapper.getErrors(promise)
87
+ }
88
+
89
+ override fun geocode(
90
+ latitude: Double,
91
+ longitude: Double,
92
+ promise: Promise
93
+ ) {
94
+ nativeSdkWrapper.geocode(latitude, longitude, promise)
95
+ }
96
+
97
+ override fun getRegisteredDevices(promise: Promise) {
98
+ nativeSdkWrapper.getRegisteredDevices(promise)
99
+ }
100
+
101
+ override fun getState(promise: Promise) {
102
+ nativeSdkWrapper.getState(promise)
103
+ }
104
+
105
+ override fun getTripState(promise: Promise) {
106
+ nativeSdkWrapper.getTripState(promise)
107
+ }
108
+
109
+ override fun getWarnings(promise: Promise) {
110
+ val warnings: List<MoveServiceWarning> = nativeSdkWrapper.getWarnings() ?: emptyList()
111
+ promise.resolve(warnings.warningsToArray().toWritableArray())
112
+ }
113
+
114
+ override fun ignoreCurrentTrip() {
115
+ nativeSdkWrapper.ignoreCurrentTrip()
116
+ }
117
+
118
+ override fun initiateAssistanceCall(promise: Promise) {
119
+ nativeSdkWrapper.initiateAssistanceCall(promise)
120
+ }
121
+
122
+ override fun isAppIgnoringBatteryOptimization(promise: Promise?) {
123
+ promise?.resolve(reactContext.isAppIgnoringBatteryOptimization())
124
+ }
125
+
126
+ override fun requestAppIgnoringBatteryOptimization() {
127
+ nativeSdkWrapper.requestAppIgnoringBatteryOptimization(reactContext)
128
+ }
129
+
130
+ override fun isAuthValid(promise: Promise) {
131
+ nativeSdkWrapper.isAuthValid(promise)
132
+ }
133
+
134
+ override fun keepActive(enabled: Boolean) {
135
+ nativeSdkWrapper.keepActive(enabled)
136
+ }
137
+
138
+ override fun keepInForeground(enabled: Boolean) {
139
+ nativeSdkWrapper.keepInForeground(enabled)
140
+ }
141
+
142
+ override fun mockLocations(allow: Boolean) {
143
+ nativeSdkWrapper.allowMockLocations(allow)
144
+ }
145
+
146
+ override fun registerDevices(
147
+ devices: ReadableArray?,
148
+ promise: Promise
149
+ ) {
150
+ try {
151
+ nativeSdkWrapper.registerDevices(
152
+ rawData = devices?.toArrayList() as? ArrayList<Map<String, String>>,
153
+ promise = promise,
154
+ )
155
+ } catch (t: Throwable) {
156
+ Log.e("SDK Module", t.message, t)
157
+ }
158
+ }
159
+
160
+ override fun requestBluetoothAlwaysUsagePermission() {
161
+ // Stub
162
+ }
163
+
164
+ override fun requestDrawOverlaysPermission() {
165
+ nativeSdkWrapper.requestDrawOverlaysPermission(reactContext)
166
+ }
167
+
168
+ override fun requestMotionPermission() {
169
+ // Stub
170
+ }
171
+
172
+ override fun resolveError() {
173
+ nativeSdkWrapper.resolveError()
174
+ }
175
+
176
+ override fun setAssistanceMetaData(data: String?) {
177
+ nativeSdkWrapper.setAssistanceMetaData(data)
178
+ }
179
+
180
+ override fun setLiveLocationTag(
181
+ tag: String?,
182
+ promise: Promise?
183
+ ) {
184
+ if (nativeSdkWrapper.setLiveLocationTag(tag)) {
185
+ promise?.resolve(true)
186
+ } else {
187
+ promise?.reject(Exception("Can't set location tag, check Move SDK logs for more information"))
188
+ }
189
+ }
190
+
191
+ override fun setTimer(callback: Callback, delay: Double) {
192
+ nativeSdkWrapper.setTimer(
193
+ delay = delay.toInt(),
194
+ key = "key",
195
+ callback = callback
196
+ )
197
+ }
198
+
199
+ override fun setTripMetadata(metadata: ReadableMap?) {
200
+ val metadataMap = metadata?.toHashMap()?.mapValues { it.value.toString() }
201
+ nativeSdkWrapper.setTripMetadata(metadataMap)
202
+ }
203
+
204
+ override fun setup(
205
+ auth: ReadableMap?,
206
+ config: ReadableMap?,
207
+ options: ReadableMap?,
208
+ platformParams: ReadableArray?,
209
+ promise: Promise?
210
+ ) {
211
+ try {
212
+ val authMap = auth?.toHashMap() ?: throw IllegalArgumentException("Auth object is null")
213
+ val userId = authMap["userId"] as String
214
+ val accessToken = authMap["accessToken"] as String
215
+ val refreshToken = authMap["refreshToken"] as String
216
+ val projectId = authMap["projectId"] as Int
217
+
218
+ config ?: throw IllegalArgumentException("Config object is null")
219
+ val timelineDetectionServices = config.getArray("timelineDetectionServices")!!
220
+ val drivingServices = config.getArray("drivingServices")!!
221
+ val walkingServices = config.getArray("walkingServices")!!
222
+
223
+ val platformParamsIterator = platformParams?.toArrayList()?.iterator()
224
+ ?: throw IllegalArgumentException("Platform Params object is null")
225
+ val recognitionNotificationTitle = platformParamsIterator.next() as String
226
+ val recognitionNotificationText = platformParamsIterator.next() as String
227
+ val tripNotificationTitle = platformParamsIterator.next() as String
228
+ val tripNotificationText = platformParamsIterator.next() as String
229
+
230
+ nativeSdkWrapper.setup(
231
+ userId = userId,
232
+ accessToken = accessToken,
233
+ refreshToken = refreshToken,
234
+ projectId = projectId,
235
+ timelineDetectionServices = timelineDetectionServices,
236
+ drivingServices = drivingServices,
237
+ walkingServices = walkingServices,
238
+ options = options,
239
+ recognitionNotificationTitle = recognitionNotificationTitle,
240
+ recognitionNotificationText = recognitionNotificationText,
241
+ tripNotificationTitle = tripNotificationTitle,
242
+ tripNotificationText = tripNotificationText,
243
+ promise = promise
244
+ )
245
+ } catch (e: Exception) {
246
+ Log.e(LOG_TAG, "Error during setup", e)
247
+ }
248
+ }
249
+
250
+ override fun setupWithCode(
251
+ code: String?,
252
+ config: ReadableMap?,
253
+ options: ReadableMap?,
254
+ platformParams: ReadableArray?,
255
+ promise: Promise?
256
+ ) {
257
+ try {
258
+ code ?: throw IllegalArgumentException("Code is null")
259
+ config ?: throw IllegalArgumentException("Config object is null")
260
+ val timelineDetectionServices = config.getArray("timelineDetectionServices")!!
261
+ val drivingServices = config.getArray("drivingServices")!!
262
+ val walkingServices = config.getArray("walkingServices")!!
263
+
264
+ val platformParamsIterator = platformParams?.toArrayList()?.iterator()
265
+ ?: throw IllegalArgumentException("Platform Params object is null")
266
+ val recognitionNotificationTitle = platformParamsIterator.next() as String
267
+ val recognitionNotificationText = platformParamsIterator.next() as String
268
+ val tripNotificationTitle = platformParamsIterator.next() as String
269
+ val tripNotificationText = platformParamsIterator.next() as String
270
+
271
+ nativeSdkWrapper.setup(
272
+ code = code,
273
+ timelineDetectionServices = timelineDetectionServices,
274
+ drivingServices = drivingServices,
275
+ walkingServices = walkingServices,
276
+ options = options,
277
+ recognitionNotificationTitle = recognitionNotificationTitle,
278
+ recognitionNotificationText = recognitionNotificationText,
279
+ tripNotificationTitle = tripNotificationTitle,
280
+ tripNotificationText = tripNotificationText,
281
+ promise = promise
282
+ )
283
+ } catch (e: Exception) {
284
+ Log.e(LOG_TAG, "Error during setup", e)
285
+ }
286
+ }
287
+
288
+ override fun shutdown(force: Boolean, promise: Promise?) {
289
+ nativeSdkWrapper.shutdown(force = force == true, promise = promise)
290
+ }
291
+
292
+ override fun startAutomaticDetection(promise: Promise?) {
293
+ promise?.resolve(nativeSdkWrapper.startAutomaticDetection())
294
+ }
295
+
296
+ override fun startScanningDevices(
297
+ filter: ReadableArray?,
298
+ uuid: String?,
299
+ manufacturerId: Double?
300
+ ) {
301
+ Log.i("MODULE_SCAN_DEVICE", "startScanningDevices: ${filter}")
302
+ val filters = try {
303
+ filter?.toArrayList()?.map { it.toString() }.orEmpty()
304
+ } catch (e: Exception) {
305
+ emptyList<String>()
306
+ }
307
+ nativeSdkWrapper.startScanningDevices(filters, manufacturerId?.toInt(), uuid)
308
+ }
309
+
310
+ override fun startTrip(
311
+ metadata: ReadableMap?,
312
+ promise: Promise?
313
+ ) {
314
+ val metadataMap = metadata?.toHashMap()?.mapValues { it.value.toString() }
315
+ promise?.resolve(MoveSdk.get()?.startTrip(metadataMap) == true)
316
+ }
317
+
318
+ override fun stopAutomaticDetection(promise: Promise?) {
319
+ promise?.resolve(nativeSdkWrapper.stopAutomaticDetection())
320
+ }
321
+
322
+ override fun stopScanningDevices() {
323
+ nativeSdkWrapper.stopScanningDevices()
324
+ }
325
+
326
+ override fun synchronizeUserData(promise: Promise) {
327
+ nativeSdkWrapper.synchronizeUserData(promise)
328
+ }
329
+
330
+ override fun unregisterDevices(
331
+ devices: ReadableArray?,
332
+ promise: Promise
333
+ ) {
334
+ try {
335
+ nativeSdkWrapper.unregisterDevices(
336
+ rawData = devices?.toArrayList() as? ArrayList<Map<String, String>>,
337
+ promise = promise,
338
+ )
339
+ } catch (t: Throwable) {
340
+ Log.e("SDK Module", t.message, t)
341
+ }
342
+ }
343
+
344
+ override fun updateAuth(
345
+ auth: ReadableMap?,
346
+ promise: Promise?
347
+ ) {
348
+ try {
349
+ val authMap = auth?.toHashMap() ?: throw IllegalArgumentException("Auth object is null")
350
+ val contractId = authMap["contractId"] as String
351
+ val accessToken = authMap["accessToken"] as String
352
+ val refreshToken = authMap["refreshToken"] as String
353
+ val productId = authMap["productId"] as Int
354
+ nativeSdkWrapper.updateAuth(contractId, accessToken, refreshToken, productId)
355
+ } catch (e: Exception) {
356
+ Log.e(LOG_TAG, "Error updating auth", e)
357
+ }
358
+ }
359
+
360
+ override fun updateConfig(
361
+ config: ReadableMap?,
362
+ options: ReadableMap?
363
+ ) {
364
+ try {
365
+ nativeSdkWrapper.updateConfig(
366
+ timelineDetectionServices = config?.getArray("timelineDetectionServices")!!,
367
+ drivingServices = config.getArray("drivingServices")!!,
368
+ walkingServices = config.getArray("walkingServices")!!,
369
+ options
370
+ )
371
+ } catch (e: Exception) {
372
+ Log.e(LOG_TAG, "Error updating config", e)
373
+ }
374
+ }
375
+
376
+ fun emitDeviceEvent(eventName: String, data: Array<Any>) {
377
+ reactContext.emitDeviceArrayEvent(eventName, data)
378
+ }
379
+
380
+ fun emitDeviceEvent(eventName: String, data: Map<*, *>) {
381
+ reactContext.emitDeviceMapEvent(eventName, data)
382
+ }
383
+
384
+ fun emitDeviceEvent(eventName: String, data: String) {
385
+ reactContext.emitDeviceStringEvent(eventName, data)
386
+ }
387
+
388
+ override fun onActivityResult(
389
+ activity: Activity,
390
+ requestCode: Int,
391
+ resultCode: Int,
392
+ data: Intent?
393
+ ) {
394
+ if (requestCode == OVERLAY_REQUEST_CODE) {
395
+ val eventData = mutableMapOf<Any, Any>()
396
+ eventData[ARGUMENT_STATE] = Settings.canDrawOverlays(reactContext)
397
+ emitDeviceEvent(EVENT_AUTH_OVERLAY_PERMISSION, eventData)
398
+ } else if (requestCode == BATTERY_OPTIMIZATION_REQUEST_CODE) {
399
+ val eventData = mutableMapOf<Any, Any>()
400
+ eventData[ARGUMENT_STATE] = reactContext.isAppIgnoringBatteryOptimization()
401
+ emitDeviceEvent(EVENT_AUTH_BATTERY_PERMISSION, eventData)
402
+ }
403
+ }
404
+
405
+ override fun onNewIntent(intent: Intent) {
406
+ // Stub
407
+ }
408
+
409
+ override fun getConstants(): Map<String, Any>? {
410
+ val constants = mutableMapOf<String, Any>()
411
+ constants["version"] = MoveSdk.version
412
+ return constants.toMap()
413
+ }
414
+
415
+ override fun startNativeSdkStateListener() {
416
+ nativeSdkWrapper.addSdkStateListener()
417
+ }
418
+
419
+ override fun requestHealthPermissions(promise: Promise?) {
420
+ nativeSdkWrapper.requestHealthPermissions(promise)
421
+ }
422
+ }
package/ios/MoveSdk.h ADDED
@@ -0,0 +1,13 @@
1
+ #import <React/RCTEventEmitter.h>
2
+
3
+ #ifdef RCT_NEW_ARCH_ENABLED
4
+ #import "RNMoveSdkSpec.h"
5
+
6
+ @interface MoveSdk : RCTEventEmitter <NativeMoveSdkSpec>
7
+ #else
8
+ #import <React/RCTBridgeModule.h>
9
+
10
+ @interface MoveSdk : RCTEventEmitter <RCTBridgeModule>
11
+ #endif
12
+
13
+ @end