react-native-move-sdk 2.13.0 → 2.14.0

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 +138 -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 +138 -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 +191 -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,42 @@
1
+ fun isNewArchitectureEnabled(): Boolean {
2
+ // Check if the project has the "newArchEnabled" property and if its value is "true"
3
+ return project.hasProperty("newArchEnabled") && project.property("newArchEnabled") == "true"
4
+ }
5
+
6
+ plugins {
7
+ id("com.facebook.react")
8
+ id("com.android.library")// version "8.6.0"
9
+ id("org.jetbrains.kotlin.android")// version "2.0.21"
10
+ }
11
+
12
+ android {
13
+ compileSdk = 35
14
+ buildToolsVersion = "35.0.0"
15
+ namespace = "com.movesdk"
16
+
17
+ compileOptions {
18
+ sourceCompatibility = JavaVersion.VERSION_17
19
+ targetCompatibility = JavaVersion.VERSION_17
20
+ }
21
+
22
+ defaultConfig {
23
+ minSdk = 26
24
+ buildConfigField("boolean", "IS_TURBO_MODULE", isNewArchitectureEnabled().toString())
25
+ }
26
+
27
+ sourceSets {
28
+ getByName("main") {
29
+ if (isNewArchitectureEnabled()) {
30
+ java.srcDirs("src/turbo", "src/main/java")
31
+ } else {
32
+ java.srcDirs("src/legacy", "src/main/java")
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ dependencies {
39
+ implementation("com.facebook.react:react-android")
40
+ api("io.dolphin.move:move-sdk:2.14.0.95")
41
+ implementation("androidx.health.connect:connect-client:1.1.0-beta01")
42
+ }
@@ -1,8 +1,18 @@
1
- MoveSdk_kotlinVersion=1.7.10
2
- MoveSdk_compileSdkVersion=33
3
- MoveSdk_targetSdkVersion=32
1
+ # Project-wide Gradle settings.
4
2
 
5
- android.useAndroidX=true
6
- android.enableJetifier=true
3
+ # IDE (e.g. Android Studio) users:
4
+ # Gradle settings configured through the IDE *will override*
5
+ # any settings specified in this file.
7
6
 
8
- org.gradle.jvmargs=-Xmx4g
7
+ # For more details on how to configure your build environment visit
8
+ # http://www.gradle.org/docs/current/userguide/build_environment.html
9
+
10
+ # Specifies the JVM arguments used for the daemon process.
11
+ # The setting is particularly useful for tweaking memory settings.
12
+ # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
13
+ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
14
+
15
+ # Use this property to specify which architecture you want to build.
16
+ # You can also override it from the CLI using
17
+ # ./gradlew <task> -PreactNativeArchitectures=x86_64
18
+ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
@@ -0,0 +1,35 @@
1
+ import java.io.FileInputStream
2
+ import java.util.Properties
3
+
4
+ pluginManagement {
5
+ includeBuild("../node_modules/@react-native/gradle-plugin")
6
+ repositories {
7
+ google()
8
+ mavenCentral()
9
+ gradlePluginPortal()
10
+ }
11
+ }
12
+
13
+ dependencyResolutionManagement {
14
+ val localPropsFile = File(rootProject.projectDir, "local.properties")
15
+ val properties = Properties()
16
+ if (localPropsFile.exists()) {
17
+ properties.apply {
18
+ load(FileInputStream(localPropsFile))
19
+ }
20
+ }
21
+ repositories {
22
+ google()
23
+ mavenCentral()
24
+ maven {
25
+ url = uri("https://dolphin.jfrog.io/artifactory/move-sdk-libs-release")
26
+ }
27
+ }
28
+ }
29
+
30
+ plugins {
31
+ id("com.facebook.react.settings")
32
+ }
33
+
34
+ rootProject.name = "RN Move SDK"
35
+ includeBuild("../node_modules/@react-native/gradle-plugin")
@@ -1,18 +1,11 @@
1
- package `in`.dolph.move.sdk
1
+ package com.movesdk
2
2
 
3
3
  import android.annotation.SuppressLint
4
4
  import android.app.Activity
5
- import android.bluetooth.BluetoothManager
6
- import android.content.Context
7
5
  import android.content.Intent
8
- import android.net.Uri
9
- import android.os.Build
10
- import android.os.PowerManager
11
6
  import android.provider.Settings
12
7
  import android.util.Log
13
- import androidx.annotation.RequiresApi
14
8
  import com.facebook.react.bridge.ActivityEventListener
15
- import com.facebook.react.bridge.Arguments
16
9
  import com.facebook.react.bridge.Callback
17
10
  import com.facebook.react.bridge.Promise
18
11
  import com.facebook.react.bridge.ReactApplicationContext
@@ -20,65 +13,24 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
20
13
  import com.facebook.react.bridge.ReactMethod
21
14
  import com.facebook.react.bridge.ReadableArray
22
15
  import com.facebook.react.bridge.ReadableMap
23
- import com.facebook.react.bridge.WritableArray
24
- import com.facebook.react.bridge.WritableMap
25
- import com.facebook.react.modules.core.DeviceEventManagerModule
16
+ import com.movesdk.shared.ARGUMENT_STATE
17
+ import com.movesdk.shared.BATTERY_OPTIMIZATION_REQUEST_CODE
18
+ import com.movesdk.shared.EVENT_AUTH_BATTERY_PERMISSION
19
+ import com.movesdk.shared.EVENT_AUTH_OVERLAY_PERMISSION
20
+ import com.movesdk.shared.OVERLAY_REQUEST_CODE
26
21
  import io.dolphin.move.MoveSdk
27
- import io.dolphin.move.MoveServiceFailure
28
22
  import io.dolphin.move.MoveServiceWarning
29
- import java.util.Timer
30
- import java.util.TimerTask
31
-
32
- internal const val EVENT_INIT_ERROR = "MoveSdk-InitError"
33
- internal const val EVENT_MOVE_STATE = "MoveSdk-State"
34
- internal const val EVENT_TRIP_STATE = "MoveSdk-TripState"
35
- internal const val EVENT_AUTH_STATE = "MoveSdk-AuthState"
36
- internal const val EVENT_ERRORS = "MoveSdk-Errors"
37
- internal const val EVENT_WARNINGS = "MoveSdk-Warnings"
38
- internal const val EVENT_MOVE_DEVICES = "MoveSdk-Devices"
39
- internal const val EVENT_AUTH_BATTERY_PERMISSION = "MoveSdk-Permission-BatteryOptimization"
40
- internal const val EVENT_AUTH_OVERLAY_PERMISSION = "MoveSdk-Permission-Overlay"
41
- internal const val EVENT_MOVE_SCAN_RESULT = "MOVE_SDK_SCAN_RESULT"
42
- internal const val EVENT_MOVE_SDK_APP = "MOVE_SDK_APP_EVENT"
43
- internal const val EVENT_MOVE_CONFIG_UPDATE = "MOVE_SDK_CONFIG_UPDATE"
44
- internal const val EVENT_MOVE_SDK_TRIP_START = "MOVE_SDK_TRIP_START"
45
- internal const val EVENT_MOVE_SDK_DEVICE_STATE = "MOVE_SDK_DEVICE_STATE"
46
- internal const val EVENT_MOVE_SDK_LOG = "MOVE_SDK_LOG"
47
- internal const val EVENT_MOVE_SDK_HEALTH = "MOVE_SDK_HEALTH"
48
-
49
- internal const val ARGUMENT_ACCESS_TOKEN = "accessToken"
50
- internal const val ARGUMENT_REFRESH_TOKEN = "refreshToken"
51
- internal const val ARGUMENT_STATE = "state"
52
- internal const val ARGUMENT_ERROR = "errors"
53
- internal const val ARGUMENT_ERRORS = "errors"
54
- internal const val ARGUMENT_WARNINGS = "warnings"
55
- internal const val ARGUMENT_LOG = "log"
56
- internal const val ARGUMENT_WARNING = "warnings"
57
- internal const val ARGUMENT_ERROR_REASON = "errorReason"
58
- internal const val ARGUMENT_DEVICES = "devices"
59
- internal const val ARGUMENT_SCAN_RESULTS = "results"
60
- internal const val ARGUMENT_MOVE_SERVICES = "services"
61
- internal const val ARGUMENT_MOVE_HEALTH = "health"
62
-
63
- internal const val PROMISE_OK = "OK"
64
23
 
65
24
  class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context),
66
25
  ActivityEventListener {
67
26
 
68
27
  companion object {
69
- const val LOG_TAG = "MOVE_SDK"
70
- const val ERROR_CODE = "MOVE_SDK_ERROR"
71
-
72
- // **** PERMISSIONS MODULE START *****
73
- const val OVERLAY_REQUEST_CODE = 1
74
- const val BATTERY_OPTIMIZATION_REQUEST_CODE = 2
75
- // **** PERMISSIONS MODULE END *****
28
+ const val NAME = "MoveSdk"
76
29
  }
77
30
 
78
31
  private val reactContext: ReactApplicationContext = context
79
32
 
80
33
  private val nativeSdkWrapper = NativeMoveSdkWrapper.getInstance(reactContext)
81
- private val timersHolder = mutableMapOf<String, Timer?>()
82
34
 
83
35
  init {
84
36
  nativeSdkWrapper.applyDelegate(this)
@@ -263,7 +215,7 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
263
215
  }
264
216
 
265
217
  override fun getName(): String {
266
- return "MoveSdk"
218
+ return NAME
267
219
  }
268
220
 
269
221
  override fun getConstants(): MutableMap<String, Any> {
@@ -272,39 +224,16 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
272
224
  return constants
273
225
  }
274
226
 
275
- internal fun emitDeviceEvent(eventName: String, data: Array<Any>) {
276
- try {
277
- val eventData: WritableArray = data.toWritableArray()
278
- reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
279
- .emit(eventName.toSnakeCase(), eventData)
280
- } catch (t: Throwable) {
281
- Log.e("SDK Module", t.message, t)
282
- // java.lang.IllegalStateException: Tried to access a JS module before the React instance was fully set up.
283
- // Calls to ReactContext#getJSModule should only happen once initialize() has been called on your native module.
284
- }
227
+ fun emitDeviceEvent(eventName: String, data: Array<Any>) {
228
+ reactContext.emitDeviceArrayEvent(eventName, data)
285
229
  }
286
230
 
287
- internal fun emitDeviceEvent(eventName: String, data: Map<*, *>) {
288
- try {
289
- val eventData: WritableMap = data.toWritableMap()
290
- reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
291
- .emit(eventName.toSnakeCase(), eventData)
292
- } catch (t: Throwable) {
293
- Log.e("SDK Module", t.message, t)
294
- // java.lang.IllegalStateException: Tried to access a JS module before the React instance was fully set up.
295
- // Calls to ReactContext#getJSModule should only happen once initialize() has been called on your native module.
296
- }
231
+ fun emitDeviceEvent(eventName: String, data: Map<*, *>) {
232
+ reactContext.emitDeviceMapEvent(eventName, data)
297
233
  }
298
234
 
299
- internal fun emitDeviceEvent(eventName: String, data: String) {
300
- try {
301
- reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
302
- .emit(eventName.toSnakeCase(), data)
303
- } catch (t: Throwable) {
304
- Log.e("SDK Module", t.message, t)
305
- // java.lang.IllegalStateException: Tried to access a JS module before the React instance was fully set up.
306
- // Calls to ReactContext#getJSModule should only happen once initialize() has been called on your native module.
307
- }
235
+ fun emitDeviceEvent(eventName: String, data: String) {
236
+ reactContext.emitDeviceStringEvent(eventName, data)
308
237
  }
309
238
 
310
239
  @ReactMethod
@@ -319,8 +248,7 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
319
248
 
320
249
  @ReactMethod
321
250
  fun getErrors(promise: Promise?) {
322
- val errors: List<MoveServiceFailure> = nativeSdkWrapper.getErrors() ?: emptyList()
323
- promise?.resolve(errors.failuresToArray().toWritableArray())
251
+ nativeSdkWrapper.getErrors(promise)
324
252
  }
325
253
 
326
254
  @ReactMethod
@@ -331,8 +259,7 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
331
259
 
332
260
  @ReactMethod
333
261
  fun getDeviceQualifier(promise: Promise) {
334
- val deviceQualifier = nativeSdkWrapper.getDeviceQualifier()
335
- promise.resolve(deviceQualifier)
262
+ promise.resolve(nativeSdkWrapper.getDeviceQualifier())
336
263
  }
337
264
 
338
265
  @ReactMethod
@@ -387,33 +314,16 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
387
314
 
388
315
  @ReactMethod
389
316
  fun setTimer(delay: Int? = 0, key: String, callback: Callback) {
390
- try {
391
- val timer = timersHolder[key]
392
- timer?.cancel()
393
- Timer().also {
394
- timersHolder[key] = it
395
- it.schedule(
396
- object : TimerTask() {
397
- override fun run() {
398
- callback.invoke()
399
- }
400
- },
401
- delay?.toLong() ?: 0L,
402
- )
403
- }
404
- } catch (e: Exception) {
405
- // Do nothing
406
- }
317
+ nativeSdkWrapper.setTimer(
318
+ delay = delay,
319
+ key = key,
320
+ callback = callback
321
+ )
407
322
  }
408
323
 
409
324
  @ReactMethod
410
325
  fun cancelTimer(key: String?) {
411
- key ?: return
412
- try {
413
- timersHolder[key]?.cancel()
414
- } catch (e: Exception) {
415
- Log.i("cancelTimer", "error: ${e.message}")
416
- }
326
+ nativeSdkWrapper.cancelTimer(key = key)
417
327
  }
418
328
 
419
329
  @ReactMethod
@@ -481,7 +391,7 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
481
391
  emitDeviceEvent(EVENT_AUTH_OVERLAY_PERMISSION, eventData)
482
392
  } else if (requestCode == BATTERY_OPTIMIZATION_REQUEST_CODE) {
483
393
  val eventData = mutableMapOf<Any, Any>()
484
- eventData[ARGUMENT_STATE] = isAppIgnoringBatteryOptimization()
394
+ eventData[ARGUMENT_STATE] = reactContext.isAppIgnoringBatteryOptimization()
485
395
  emitDeviceEvent(EVENT_AUTH_BATTERY_PERMISSION, eventData)
486
396
  }
487
397
  }
@@ -493,98 +403,23 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
493
403
 
494
404
  @ReactMethod
495
405
  fun requestDrawOverlaysPermission() {
496
- val intent = Intent(
497
- Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
498
- Uri.parse("package:${reactContext.packageName}")
499
- )
500
- reactContext.currentActivity!!.startActivityForResult(intent, OVERLAY_REQUEST_CODE)
501
- }
502
-
503
- private fun isAppIgnoringBatteryOptimization(): Boolean {
504
- val packageName = reactContext.packageName
505
- val pm: PowerManager = reactContext.getSystemService(Context.POWER_SERVICE) as PowerManager
506
- return pm.isIgnoringBatteryOptimizations(packageName)
406
+ nativeSdkWrapper.requestDrawOverlaysPermission(reactContext)
507
407
  }
508
408
 
509
409
  @ReactMethod
510
410
  fun isAppIgnoringBatteryOptimization(promise: Promise) {
511
- promise.resolve(isAppIgnoringBatteryOptimization())
411
+ promise.resolve(reactContext.isAppIgnoringBatteryOptimization())
512
412
  }
513
413
 
514
414
  @SuppressLint("BatteryLife")
515
415
  @ReactMethod
516
416
  fun requestAppIgnoringBatteryOptimization() {
517
- val intent = Intent(
518
- Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
519
- Uri.parse("package:" + reactContext.packageName)
520
- )
521
- reactContext.currentActivity?.startActivityForResult(intent, BATTERY_OPTIMIZATION_REQUEST_CODE)
417
+ nativeSdkWrapper.requestAppIgnoringBatteryOptimization(reactContext)
522
418
  }
523
- // endregion PERMISSIONS MODULE
524
- }
525
-
526
- internal fun Array<*>.toWritableArray(): WritableArray {
527
- val data: WritableArray = Arguments.createArray()
528
- for (value in iterator()) {
529
- when (value) {
530
- is String -> {
531
- data.pushString(value)
532
- }
533
-
534
- is Boolean -> {
535
- data.pushBoolean(value)
536
- }
537
-
538
- is Int -> {
539
- data.pushInt(value)
540
- }
541
-
542
- is Array<*> -> {
543
- data.pushArray(value.toWritableArray())
544
- }
545
-
546
- is List<*> -> {
547
- data.pushArray(value.toTypedArray().toWritableArray())
548
- }
549
-
550
- is Map<*, *> -> {
551
- data.pushMap(value.toWritableMap())
552
- }
553
- }
554
- }
555
- return data
556
- }
557
419
 
558
- internal fun Map<*, *>.toWritableMap(): WritableMap {
559
- val data: WritableMap = Arguments.createMap()
560
- for (entry in iterator()) {
561
- val value = entry.value
562
- print("${entry.key} : $value")
563
- when (value) {
564
- is String -> {
565
- data.putString(entry.key.toString(), value)
566
- }
567
-
568
- is Boolean -> {
569
- data.putBoolean(entry.key.toString(), value)
570
- }
571
-
572
- is Int -> {
573
- data.putInt(entry.key.toString(), value)
574
- }
575
-
576
- is Array<*> -> {
577
- data.putArray(entry.key.toString(), value.toWritableArray())
578
- }
579
-
580
- is List<*> -> {
581
- data.putArray(entry.key.toString(), value.toTypedArray().toWritableArray())
582
- }
583
-
584
- is Map<*, *> -> {
585
- data.putMap(entry.key.toString(), value.toWritableMap())
586
- }
587
- }
420
+ @ReactMethod
421
+ fun requestHealthPermissions(promise: Promise?) {
422
+ nativeSdkWrapper.requestHealthPermissions(promise)
588
423
  }
589
- return data
424
+ // endregion PERMISSIONS MODULE
590
425
  }
@@ -1,13 +1,3 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
- package="in.dolph.move.sdk">
3
- <application>
4
- <receiver
5
- android:name="in.dolph.move.sdk.WrapperBtConnectionsReceiver"
6
- android:exported="true">
7
- <intent-filter>
8
- <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
9
- <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
10
- </intent-filter>
11
- </receiver>
12
- </application>
2
+ package="com.movesdk">
13
3
  </manifest>
@@ -1,4 +1,4 @@
1
- package `in`.dolph.move.sdk
1
+ package com.movesdk
2
2
 
3
3
  import android.Manifest
4
4
  import android.annotation.SuppressLint
@@ -6,17 +6,20 @@ import android.bluetooth.BluetoothManager
6
6
  import android.bluetooth.le.ScanCallback
7
7
  import android.bluetooth.le.ScanResult
8
8
  import android.content.Context
9
- import android.content.SharedPreferences
10
9
  import android.content.pm.PackageManager
11
10
  import android.os.Build
12
11
  import androidx.core.content.ContextCompat
13
- import androidx.core.content.edit
14
- import com.google.gson.Gson
15
- import `in`.dolph.move.sdk.extentions.PermissionUtils
12
+ import com.movesdk.extentions.PermissionUtils
13
+ import com.movesdk.extentions.getConnectedDevices
16
14
  import io.dolphin.move.MoveDevice
17
15
  import io.dolphin.move.MoveSdk
16
+ import kotlinx.coroutines.CoroutineScope
17
+ import kotlinx.coroutines.Dispatchers
18
+ import kotlinx.coroutines.launch
19
+ import kotlinx.coroutines.withContext
18
20
  import java.nio.ByteBuffer
19
- import java.util.*
21
+ import java.util.Locale
22
+ import java.util.UUID
20
23
 
21
24
  private const val TAG = "Android native scanner"
22
25
 
@@ -29,7 +32,9 @@ class DeviceScanner(
29
32
  private var proximityId: String? = null
30
33
  private var manufacturerId: Int? = null
31
34
  private val btManager: BluetoothManager? = context.getSystemService(BluetoothManager::class.java)
32
- private val gson = Gson()
35
+
36
+ private val mainScope = CoroutineScope(Dispatchers.Main)
37
+ private val ioContext = Dispatchers.IO
33
38
 
34
39
  private val leCallback = object : ScanCallback() {
35
40
  @SuppressLint("MissingPermission")
@@ -123,29 +128,22 @@ class DeviceScanner(
123
128
  onNewDevices.invoke(emptyList())
124
129
  return
125
130
  }
126
- val sharedPreferences: SharedPreferences =
127
- context.getSharedPreferences(
128
- SHARED_PREF_CONNECTIONS_NAME,
129
- Context.MODE_PRIVATE
130
- )
131
+
131
132
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
132
133
  if (!isPermissionGranted(Manifest.permission.BLUETOOTH_CONNECT)) {
133
134
  onNewEvent(TAG, "Missing BLUETOOTH_CONNECT permission")
134
135
  onNewDevices.invoke(emptyList())
135
- if (sharedPreferences.all.isNotEmpty()) {
136
- sharedPreferences.edit { clear() }
137
- }
138
136
  return
139
137
  }
140
138
  }
141
- val connectedDevices = sharedPreferences.all.mapNotNull {
142
- try {
143
- gson.fromJson(it.value as? String, MoveDevice::class.java)
144
- } catch (e: Exception) {
145
- null
139
+ mainScope.launch {
140
+ val connectedDevices = withContext(ioContext) {
141
+ context.getConnectedDevices().mapNotNull {
142
+ MoveSdk.get()?.convertToMoveDevice(it)
143
+ }
146
144
  }
145
+ onNewDevices(connectedDevices)
147
146
  }
148
- onNewDevices(connectedDevices)
149
147
  }
150
148
 
151
149
  @SuppressLint("MissingPermission")
@@ -1,7 +1,8 @@
1
- package `in`.dolph.move.sdk
1
+ package com.movesdk
2
2
 
3
3
  import android.util.Log
4
4
  import com.facebook.react.bridge.ReadableMap
5
+ import com.movesdk.shared.LOG_TAG
5
6
  import io.dolphin.move.DeviceDiscovery
6
7
  import io.dolphin.move.MoveDevice
7
8
  import io.dolphin.move.MoveOptions
@@ -56,7 +57,7 @@ fun extractMoveOptions(options: ReadableMap): MoveOptions? {
56
57
  ),
57
58
  )
58
59
  } catch (e: Exception) {
59
- Log.e(MoveSdkModule.LOG_TAG, "Error extractions Move options from JS map: ${e.message}", e)
60
+ Log.e(LOG_TAG, "Error extractions Move options from JS map: ${e.message}", e)
60
61
  null
61
62
  }
62
63
  }