react-native-move-sdk 2.12.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.
- package/android/build.gradle.kts +42 -0
- package/android/gradle.properties +16 -6
- package/android/settings.gradle.kts +35 -0
- package/android/src/{main/java/in/dolph/move/sdk → legacy}/MoveSdkModule.kt +30 -195
- package/android/src/main/AndroidManifest.xml +1 -11
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/DeviceScanner.kt +19 -21
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/Mapper.kt +3 -2
- package/android/src/main/java/com/movesdk/MoveExtensions.kt +188 -0
- package/android/src/main/java/{in/dolph/move/sdk/MoveSdkRepository.kt → com/movesdk/MoveSdkConfigRepository.kt} +3 -1
- package/android/src/main/java/com/movesdk/MoveSdkPackage.kt +32 -0
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/NativeMoveSdkWrapper.kt +201 -61
- package/android/src/main/java/com/movesdk/extentions/ConnectionExt.kt +52 -0
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/extentions/PermissionUtils.kt +1 -1
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/extentions/SharedPreferencesExt.kt +1 -1
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/metadata/MetadataStorage.kt +1 -1
- package/android/src/main/java/{in/dolph/move/sdk → com/movesdk}/metadata/MetadataStorageImpl.kt +2 -2
- package/android/src/main/java/com/movesdk/shared/Constants.kt +39 -0
- package/android/src/turbo/MoveSdkModule.kt +422 -0
- package/ios/MoveSdk.h +13 -0
- package/ios/MoveSdk.mm +717 -0
- package/ios/MoveSdk.swift +1022 -0
- package/ios/{NativeModule/MoveSdkDeviceScanner.swift → MoveSdkDeviceScanner.swift} +1 -1
- package/lib/commonjs/NativeMoveSdk.js +21 -0
- package/lib/commonjs/NativeMoveSdk.js.map +1 -0
- package/lib/commonjs/components/LazyMoveSdk.js +22 -41
- package/lib/commonjs/components/LazyMoveSdk.js.map +1 -1
- package/lib/commonjs/index.js +331 -25
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/module/NativeMoveSdk.js +17 -0
- package/lib/module/NativeMoveSdk.js.map +1 -0
- package/lib/module/components/LazyMoveSdk.js +15 -20
- package/lib/module/components/LazyMoveSdk.js.map +1 -1
- package/lib/module/index.js +337 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/package.json +1 -0
- package/lib/typescript/commonjs/example/src/App.d.ts +2 -0
- package/lib/typescript/commonjs/example/src/App.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/NativeMoveSdk.d.ts +133 -0
- package/lib/typescript/commonjs/src/NativeMoveSdk.d.ts.map +1 -0
- package/lib/typescript/{components → commonjs/src/components}/LazyMoveSdk.d.ts +2 -1
- package/lib/typescript/commonjs/src/components/LazyMoveSdk.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +84 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/module/example/src/App.d.ts +2 -0
- package/lib/typescript/module/example/src/App.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/NativeMoveSdk.d.ts +133 -0
- package/lib/typescript/module/src/NativeMoveSdk.d.ts.map +1 -0
- package/lib/typescript/module/src/components/LazyMoveSdk.d.ts +8 -0
- package/lib/typescript/module/src/components/LazyMoveSdk.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +84 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/package.json +197 -138
- package/react-native-move-sdk.podspec +30 -9
- package/src/NativeMoveSdk.ts +227 -0
- package/src/components/LazyMoveSdk.tsx +2 -2
- package/src/{MoveSdk.ts → index.tsx} +131 -199
- package/android/.project +0 -17
- package/android/build.gradle +0 -153
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -8
- package/android/gradlew +0 -183
- package/android/gradlew.bat +0 -100
- package/android/src/main/java/in/dolph/move/sdk/MoveExtensions.kt +0 -72
- package/android/src/main/java/in/dolph/move/sdk/MoveSdkPackage.kt +0 -19
- package/android/src/main/java/in/dolph/move/sdk/WrapperBtConnectionsReceiver.kt +0 -96
- package/android/src/main/res/drawable-anydpi-v24/ic_notification.xml +0 -13
- package/android/src/main/res/drawable-hdpi/ic_notification.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_notification.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_notification.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_notification.png +0 -0
- package/android/src/main/res/values/strings.xml +0 -9
- package/android/src/main/strings.xml +0 -0
- package/android/src/test/java/io/dolphin/move/MoveWrapperTest.kt +0 -190
- package/ios/MoveSdk-Bridging-Header.h +0 -3
- package/ios/MoveSdk.xcodeproj/project.pbxproj +0 -287
- package/ios/MoveSdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -4
- package/ios/MoveSdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/NativeModule/MoveSdk.h +0 -144
- package/ios/NativeModule/MoveSdk.swift +0 -1359
- package/lib/commonjs/MoveSdk.js +0 -443
- package/lib/commonjs/MoveSdk.js.map +0 -1
- package/lib/module/MoveSdk.js +0 -432
- package/lib/module/MoveSdk.js.map +0 -1
- package/lib/typescript/MoveSdk.d.ts +0 -158
- package/lib/typescript/index.d.ts +0 -3
- 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
|
-
|
|
2
|
-
MoveSdk_compileSdkVersion=33
|
|
3
|
-
MoveSdk_targetSdkVersion=32
|
|
1
|
+
# Project-wide Gradle settings.
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
24
|
-
import com.
|
|
25
|
-
import com.
|
|
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
|
|
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
|
|
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
|
-
|
|
276
|
-
|
|
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
|
-
|
|
288
|
-
|
|
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
|
-
|
|
300
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
559
|
-
|
|
560
|
-
|
|
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
|
-
|
|
424
|
+
// endregion PERMISSIONS MODULE
|
|
590
425
|
}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
1
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
-
package="
|
|
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
|
|
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
|
|
14
|
-
import com.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
|
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(
|
|
60
|
+
Log.e(LOG_TAG, "Error extractions Move options from JS map: ${e.message}", e)
|
|
60
61
|
null
|
|
61
62
|
}
|
|
62
63
|
}
|