react-native-move-sdk 2.6.8 → 2.7.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.
@@ -142,7 +142,7 @@ dependencies {
142
142
  // noinspection GradleDynamicVersion
143
143
 
144
144
  implementation "com.facebook.react:react-native:+"
145
- api "io.dolphin.move:move-sdk:2.6.8.79"
145
+ api "io.dolphin.move:move-sdk:2.6.9.83"
146
146
 
147
147
  testImplementation 'junit:junit:4.13.2'
148
148
  testImplementation "androidx.test:core:1.4.0"
@@ -12,6 +12,7 @@ import android.util.Log
12
12
  import androidx.annotation.RequiresApi
13
13
  import com.facebook.react.bridge.ActivityEventListener
14
14
  import com.facebook.react.bridge.Arguments
15
+ import com.facebook.react.bridge.Callback
15
16
  import com.facebook.react.bridge.Promise
16
17
  import com.facebook.react.bridge.ReactApplicationContext
17
18
  import com.facebook.react.bridge.ReactContextBaseJavaModule
@@ -24,6 +25,9 @@ import com.facebook.react.modules.core.DeviceEventManagerModule
24
25
  import io.dolphin.move.MoveSdk
25
26
  import io.dolphin.move.MoveServiceFailure
26
27
  import io.dolphin.move.MoveServiceWarning
28
+ import java.util.Timer
29
+ import java.util.TimerTask
30
+ import java.util.UUID
27
31
 
28
32
  internal const val EVENT_INIT_ERROR = "MoveSdk-InitError"
29
33
  internal const val EVENT_MOVE_STATE = "MoveSdk-State"
@@ -70,6 +74,7 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
70
74
  private val reactContext: ReactApplicationContext = context
71
75
 
72
76
  private val nativeSdkWrapper = NativeMoveSdkWrapper.getInstance(reactContext)
77
+ private val timersHolder = mutableMapOf<String, Timer?>()
73
78
 
74
79
  init {
75
80
  nativeSdkWrapper.applyDelegate(this)
@@ -309,8 +314,7 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
309
314
 
310
315
  @ReactMethod
311
316
  fun isAuthValid(promise: Promise) {
312
- val isAuthValid = nativeSdkWrapper.isAuthValid()
313
- promise.resolve(isAuthValid)
317
+ nativeSdkWrapper.isAuthValid(promise)
314
318
  }
315
319
 
316
320
  @ReactMethod
@@ -358,6 +362,37 @@ class MoveSdkModule(context: ReactApplicationContext) : ReactContextBaseJavaModu
358
362
  nativeSdkWrapper.stopScanningDevices()
359
363
  }
360
364
 
365
+ @ReactMethod
366
+ fun setTimer(delay: Int? = 0, key: String, callback: Callback) {
367
+ try {
368
+ val timer = timersHolder[key]
369
+ timer?.cancel()
370
+ Timer().also {
371
+ timersHolder[key] = it
372
+ it.schedule(
373
+ object : TimerTask() {
374
+ override fun run() {
375
+ callback.invoke()
376
+ }
377
+ },
378
+ delay?.toLong() ?: 0L,
379
+ )
380
+ }
381
+ } catch (e: Exception) {
382
+ // Do nothing
383
+ }
384
+ }
385
+
386
+ @ReactMethod
387
+ fun cancelTimer(key: String?) {
388
+ key ?: return
389
+ try {
390
+ timersHolder[key]?.cancel()
391
+ } catch (e: Exception) {
392
+ Log.i("cancelTimer", "error: ${e.message}")
393
+ }
394
+ }
395
+
361
396
  // region PERMISSIONS MODULE
362
397
  @SuppressLint("NewApi")
363
398
  override fun onActivityResult(
@@ -181,6 +181,7 @@ class NativeMoveSdkWrapper(private val context: Context) : MoveSdk.StateListener
181
181
  val motionPermissionMandatory = featureOptions?.get("motionPermissionMandatory") as? Boolean
182
182
  val useBackendConfig = featureOptions?.get("useBackendConfig") as? Boolean
183
183
  val backgroundLocationPermissionMandatory = featureOptions?.get("backgroundLocationPermissionMandatory") as? Boolean
184
+ val overlayPermissionMandatory = featureOptions?.get("overlayPermissionMandatory") as? Boolean
184
185
  val deviceDiscovery = featureOptions?.get("deviceDiscovery") as? Map<String, Any>
185
186
  val startDelay = deviceDiscovery?.get("startDelay") as? Double
186
187
  val duration = deviceDiscovery?.get("duration") as? Double
@@ -190,6 +191,7 @@ class NativeMoveSdkWrapper(private val context: Context) : MoveSdk.StateListener
190
191
  motionPermissionRequired = motionPermissionMandatory ?: false,
191
192
  useBackendConfig = useBackendConfig ?: false,
192
193
  backgroundLocationPermissionMandatory = backgroundLocationPermissionMandatory ?: false,
194
+ overlayPermissionMandatory = overlayPermissionMandatory ?: true,
193
195
  deviceDiscovery = DeviceDiscovery(
194
196
  startDelay = startDelay?.toLong(),
195
197
  duration = duration?.toLong(),
@@ -212,8 +214,8 @@ class NativeMoveSdkWrapper(private val context: Context) : MoveSdk.StateListener
212
214
  projectId = projectId.toLong(),
213
215
  )
214
216
  MoveSdk.get()?.let {
215
- it.tripNotification(recognitionNotification.toMoveNotification(context))
216
- it.recognitionNotification(tripNotification.toMoveNotification(context))
217
+ it.tripNotification(tripNotification.toMoveNotification(context))
218
+ it.recognitionNotification(recognitionNotification.toMoveNotification(context))
217
219
  it.walkingLocationNotification(walkingNotification.toMoveNotification(context))
218
220
  }
219
221
  val moveConfig = MoveConfig(timelineDetectionServicesToUse)
@@ -308,8 +310,13 @@ class NativeMoveSdkWrapper(private val context: Context) : MoveSdk.StateListener
308
310
  }
309
311
 
310
312
  fun getState(promise: Promise) {
311
- val state = MoveSdk.get()?.getSdkState() ?: MoveSdkState.Uninitialised
312
- promise.resolve(state.toString().toSnakeCase())
313
+ mainScope.launch {
314
+ val state: MoveSdkState
315
+ withContext(ioContext) {
316
+ state = MoveSdk.get()?.getSdkState() ?: MoveSdkState.Uninitialised
317
+ }
318
+ promise.resolve(state.toString().toSnakeCase())
319
+ }
313
320
  }
314
321
 
315
322
  fun getTripState(promise: Promise) {
@@ -409,9 +416,13 @@ class NativeMoveSdkWrapper(private val context: Context) : MoveSdk.StateListener
409
416
  }
410
417
 
411
418
  fun getAuthState(promise: Promise) {
412
- MoveSdk.get()?.let {
413
- promise.resolve(it.getAuthState().toString())
414
- } ?: promise.resolve(MoveAuthState.UNKNOWN.toString())
419
+ mainScope.launch {
420
+ val state: MoveAuthState
421
+ withContext(ioContext) {
422
+ state = MoveSdk.get()?.getAuthState() ?: MoveAuthState.UNKNOWN
423
+ }
424
+ promise.resolve(state.toString())
425
+ }
415
426
  }
416
427
 
417
428
  override fun onAuthStateUpdate(state: MoveAuthState) {
@@ -465,8 +476,14 @@ class NativeMoveSdkWrapper(private val context: Context) : MoveSdk.StateListener
465
476
  return MoveSdk.get()?.getDeviceQualifier()
466
477
  }
467
478
 
468
- fun isAuthValid(): Boolean {
469
- return MoveSdk.get()?.getAuthState() is MoveAuthState.VALID
479
+ fun isAuthValid(promise: Promise) {
480
+ mainScope.launch {
481
+ val state: MoveAuthState
482
+ withContext(ioContext) {
483
+ state = MoveSdk.get()?.getAuthState() ?: MoveAuthState.UNKNOWN
484
+ }
485
+ promise.resolve(state is MoveAuthState.VALID)
486
+ }
470
487
  }
471
488
 
472
489
  override fun onScanResult(results: List<MoveScanResult>) {
@@ -5,10 +5,10 @@ import DolphinMoveSDK
5
5
 
6
6
  /// Move SDK Initialization singleton delegate.
7
7
  internal protocol MoveSDKLauncherDelegate: AnyObject {
8
- /// Send event
8
+ /// Send event to observer.
9
9
  /// - Parameters:
10
- /// - event:
11
- /// - data:
10
+ /// - event: Event key.
11
+ /// - data: Event object.
12
12
  func send(event: MoveSDKLauncher.Event, data: Any)
13
13
  }
14
14
 
@@ -635,7 +635,16 @@ internal class MoveSDKLauncher {
635
635
  /// Launcher delegate.
636
636
  ///
637
637
  /// The delegate is the allocated react native SDK plugin.
638
- weak var delegate: MoveSDKLauncherDelegate?
638
+ weak var delegate: MoveSDKLauncherDelegate? {
639
+ didSet {
640
+ for (key, value) in pendingEvents {
641
+ delegate?.send(event: key, data: value)
642
+ }
643
+ }
644
+ }
645
+
646
+ /// Pending events triggered before event observer registered.
647
+ private var pendingEvents: [Event: Any] = [:]
639
648
 
640
649
  /// Shared singleton.
641
650
  static let shared = MoveSDKLauncher()
@@ -647,44 +656,58 @@ internal class MoveSDKLauncher {
647
656
  init() {
648
657
  sdk.setSDKStateListener { state in
649
658
  let value = "\(state)".uppercased()
650
- self.delegate?.send(event: .sdkState, data: ["state": "\(value)"])
659
+ self.send(event: .sdkState, data: ["state": "\(value)"])
651
660
  }
652
661
 
653
662
  sdk.setTripStateListener { state in
654
663
  let value = "\(state)".uppercased()
655
- self.delegate?.send(event: .tripState, data: ["state": "\(value)"])
664
+ self.send(event: .tripState, data: ["state": "\(value)"])
656
665
  }
657
666
 
658
667
  sdk.setTripStartListener { date in
659
- self.delegate?.send(event: .tripStart, data: Int64(date.timeIntervalSince1970 * 1000.0))
668
+ self.send(event: .tripStart, data: Int64(date.timeIntervalSince1970 * 1000.0))
660
669
  }
661
670
 
662
671
  sdk.setAuthStateUpdateListener { state in
663
672
  let value = "\(state)".uppercased()
664
- self.delegate?.send(event: .authState, data: ["state": "\(value)"])
673
+ self.send(event: .authState, data: ["state": "\(value)"])
665
674
  }
666
675
 
667
676
  sdk.setServiceFailureListener { failures in
668
677
  let data: [String: Any] = ["errors": self.convert(failures: failures)]
669
- self.delegate?.send(event: .failure, data: data)
678
+ self.send(event: .failure, data: data)
670
679
  }
671
680
 
672
681
  sdk.setServiceWarningListener { warnings in
673
682
  let data: [String: Any] = ["warnings": self.convert(warnings: warnings)]
674
- self.delegate?.send(event: .warning, data: data)
683
+ self.send(event: .warning, data: data)
675
684
  }
676
685
 
677
686
  sdk.setDeviceDiscoveryListener { scanResults in
678
687
  let data = self.convert(scanResults: scanResults)
679
- self.delegate?.send(event: .scanResult, data: data)
688
+ self.send(event: .scanResult, data: data)
680
689
  }
681
690
 
682
691
  sdk.setRemoteConfigChangeListener { config in
683
692
  let services: [String] = config.services.reduce([]) { $0 + self.convert(service: $1, base: true) }
684
693
  let data = ["services": services]
685
- self.delegate?.send(event: .configUpdate, data: data)
694
+ self.send(event: .configUpdate, data: data)
686
695
  }
687
696
  }
697
+
698
+ /// Send event to observer.
699
+ /// - Parameters:
700
+ /// - event: Event key.
701
+ /// - data: Event object.
702
+ ///
703
+ /// Events are buffered when there is no observer.
704
+ func send(event: Event, data: Any) {
705
+ if let delegate {
706
+ delegate.send(event: event, data: data)
707
+ }
708
+
709
+ pendingEvents[event] = data
710
+ }
688
711
 
689
712
  /// Wrapper for `MoveSDK.getServiceWarnings()`.
690
713
  /// - Returns: Serialized SDK service warnings.
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _reactNative = require("react-native");
9
+
10
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+
12
+ const {
13
+ MoveSdk: NativeMoveSdk
14
+ } = _reactNative.NativeModules;
15
+ const eventEmitter = new _reactNative.NativeEventEmitter(NativeMoveSdk);
16
+
17
+ class MoveSdk {
18
+ static sdkStateFromNative(sdkState) {
19
+ if ([MoveSdk.UNINITIALIZED, MoveSdk.READY, MoveSdk.RUNNING, MoveSdk.UNINITIALIZED].includes(sdkState)) {
20
+ return sdkState;
21
+ }
22
+
23
+ return MoveSdk.UNINITIALIZED;
24
+ }
25
+
26
+ static tripStateFromNative(nativeTripState) {
27
+ if ([MoveSdk.UNKNOWN, MoveSdk.DRIVING, MoveSdk.HALT, MoveSdk.IDLE, MoveSdk.IGNORED].includes(nativeTripState)) {
28
+ return nativeTripState;
29
+ }
30
+
31
+ return MoveSdk.UNKNOWN;
32
+ }
33
+
34
+ static authStateFromNative(nativeAuthState) {
35
+ if ([MoveSdk.AUTH_VALID, MoveSdk.AUTH_EXPIRED].includes(nativeAuthState)) {
36
+ return nativeAuthState;
37
+ }
38
+
39
+ return MoveSdk.AUTH_UNKNOWN;
40
+ }
41
+
42
+ static async setup(config, auth, android, options) {
43
+ const {
44
+ timelineDetectionServices,
45
+ drivingServices,
46
+ walkingServices
47
+ } = config;
48
+ const {
49
+ userId,
50
+ projectId,
51
+ accessToken,
52
+ refreshToken
53
+ } = auth;
54
+ let platformParams = [];
55
+
56
+ if (_reactNative.Platform.OS === 'android') {
57
+ const {
58
+ notifications
59
+ } = android;
60
+ const {
61
+ tripNotification,
62
+ recognitionNotification
63
+ } = notifications;
64
+
65
+ if (!tripNotification || !recognitionNotification) {
66
+ throw new Error('MOVE SDK needs notification configuration for Android');
67
+ }
68
+
69
+ platformParams = [recognitionNotification.title, recognitionNotification.text, recognitionNotification.channel.id, recognitionNotification.channel.name, recognitionNotification.channel.description, tripNotification.title, tripNotification.text, tripNotification.channel.id, tripNotification.channel.name, tripNotification.channel.description];
70
+ }
71
+
72
+ return await NativeMoveSdk.setup(userId, accessToken, refreshToken, projectId, // Config
73
+ timelineDetectionServices, drivingServices, walkingServices, options, // Platform config
74
+ ...platformParams);
75
+ }
76
+
77
+ static allowMockLocations(allowMockLocations) {
78
+ NativeMoveSdk.allowMockLocations(allowMockLocations);
79
+ }
80
+ /* Deprecated */
81
+
82
+
83
+ static init() {
84
+ NativeMoveSdk.init();
85
+ }
86
+
87
+ static resolveError() {
88
+ NativeMoveSdk.resolveError();
89
+ }
90
+
91
+ static async updateAuth(auth) {
92
+ const {
93
+ userId,
94
+ projectId,
95
+ accessToken,
96
+ refreshToken
97
+ } = auth;
98
+ return await NativeMoveSdk.updateAuth(userId, accessToken, refreshToken, projectId);
99
+ }
100
+
101
+ static startAutomaticDetection() {
102
+ NativeMoveSdk.startAutomaticDetection();
103
+ }
104
+
105
+ static stopAutomaticDetection() {
106
+ NativeMoveSdk.stopAutomaticDetection();
107
+ }
108
+
109
+ static forceTripRecognition() {
110
+ let duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 60000;
111
+ NativeMoveSdk.forceTripRecognition(duration);
112
+ }
113
+
114
+ static keepInForeground(enabled) {
115
+ if (_reactNative.Platform.OS === 'android') {
116
+ NativeMoveSdk.keepInForeground(enabled);
117
+ } else {
118
+ console.warn('MoveSdk.keepInForeground() is Android OS only.');
119
+ }
120
+ }
121
+
122
+ static keepActive(enabled) {
123
+ if (_reactNative.Platform.OS === 'android') {
124
+ NativeMoveSdk.keepActive(enabled);
125
+ } else {
126
+ console.warn('MoveSdk.keepActive() is Android OS only.');
127
+ }
128
+ }
129
+
130
+ static async synchronizeUserData() {
131
+ return await NativeMoveSdk.synchronizeUserData();
132
+ }
133
+
134
+ static async getAuthState() {
135
+ const authState = await NativeMoveSdk.getAuthState();
136
+ return MoveSdk.authStateFromNative(authState);
137
+ }
138
+
139
+ static async getState() {
140
+ const state = await NativeMoveSdk.getState();
141
+ return MoveSdk.sdkStateFromNative(state);
142
+ }
143
+
144
+ static async getTripState() {
145
+ const tripState = await NativeMoveSdk.getTripState();
146
+ return MoveSdk.tripStateFromNative(tripState);
147
+ }
148
+
149
+ static async getErrors() {
150
+ return await NativeMoveSdk.getErrors();
151
+ }
152
+
153
+ static async getWarnings() {
154
+ return await NativeMoveSdk.getWarnings();
155
+ }
156
+
157
+ static async initiateAssistanceCall() {
158
+ return await NativeMoveSdk.initiateAssistanceCall();
159
+ }
160
+
161
+ static setAssistanceMetaData(data) {
162
+ NativeMoveSdk.setAssistanceMetaData(data);
163
+ }
164
+
165
+ static addTripStateListener(tripStateChanged) {
166
+ return eventEmitter.addListener('MOVE_SDK_TRIP_STATE', event => tripStateChanged(MoveSdk.tripStateFromNative(event.state)));
167
+ }
168
+
169
+ static addTripStartListener(tripStartTriggered) {
170
+ return eventEmitter.addListener('MOVE_SDK_TRIP_START', start => tripStartTriggered(new Date(Number(start))));
171
+ }
172
+
173
+ static addSdkStateListener(sdkStateChanged) {
174
+ return eventEmitter.addListener('MOVE_SDK_STATE', event => {
175
+ sdkStateChanged(MoveSdk.sdkStateFromNative(event.state));
176
+ });
177
+ }
178
+
179
+ static addAuthStateListener(authStateChanged) {
180
+ return eventEmitter.addListener('MOVE_SDK_AUTH_STATE', event => {
181
+ const transformedEvent = { ...event,
182
+ state: MoveSdk.authStateFromNative(event.state)
183
+ };
184
+ authStateChanged(transformedEvent);
185
+ });
186
+ }
187
+
188
+ static addErrorsListener(errorsReceived) {
189
+ return eventEmitter.addListener('MOVE_SDK_ERRORS', event => {
190
+ errorsReceived(event.errors);
191
+ });
192
+ }
193
+
194
+ static addWarningsListener(warningsReceived) {
195
+ return eventEmitter.addListener('MOVE_SDK_WARNINGS', event => {
196
+ warningsReceived(event.warnings);
197
+ });
198
+ }
199
+
200
+ static addAppEventListener(appEventReceived) {
201
+ return eventEmitter.addListener('MOVE_SDK_APP_EVENT', event => {
202
+ appEventReceived(event);
203
+ });
204
+ }
205
+
206
+ static addRemoteConfigChangeListener(configChangeReceived) {
207
+ return eventEmitter.addListener('MOVE_SDK_CONFIG_UPDATE', config => {
208
+ configChangeReceived(config);
209
+ });
210
+ }
211
+
212
+ static version() {
213
+ return _reactNative.Platform.OS === 'android' ? NativeMoveSdk.getConstants().version : 'Unknown';
214
+ }
215
+
216
+ static finishCurrentTrip() {
217
+ NativeMoveSdk.finishCurrentTrip();
218
+ }
219
+
220
+ static ignoreCurrentTrip() {
221
+ NativeMoveSdk.ignoreCurrentTrip();
222
+ }
223
+
224
+ static requestMotionPermission() {
225
+ if (_reactNative.Platform.OS === 'ios') {
226
+ NativeMoveSdk.requestMotionPermission();
227
+ } else {
228
+ console.warn('MoveSdk.requestMotionPermission() is iOS only.');
229
+ }
230
+ }
231
+
232
+ static async shutdown() {
233
+ let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
234
+ return await NativeMoveSdk.shutdown(force);
235
+ }
236
+
237
+ static async getDeviceQualifier() {
238
+ return NativeMoveSdk.getDeviceQualifier();
239
+ }
240
+
241
+ static async geocode(latitude, longitude) {
242
+ return await NativeMoveSdk.geocode(latitude, longitude);
243
+ }
244
+
245
+ static async isAuthValid() {
246
+ return await NativeMoveSdk.isAuthValid();
247
+ } // **** PERMISSIONS MODULE START *****
248
+
249
+
250
+ static async canDrawOverlays() {
251
+ return await NativeMoveSdk.canDrawOverlays();
252
+ }
253
+
254
+ static requestDrawOverlaysPermission() {
255
+ if (_reactNative.Platform.OS === 'android') {
256
+ NativeMoveSdk.requestDrawOverlaysPermission();
257
+ } else {
258
+ console.warn('MoveSdk.requestDrawOverlaysPermission() is Android OS only.');
259
+ }
260
+ }
261
+
262
+ static async isAppIgnoringBatteryOptimization() {
263
+ return await NativeMoveSdk.isAppIgnoringBatteryOptimization();
264
+ }
265
+
266
+ static requestAppIgnoringBatteryOptimization() {
267
+ if (_reactNative.Platform.OS === 'android') {
268
+ NativeMoveSdk.requestAppIgnoringBatteryOptimization();
269
+ } else {
270
+ console.warn('MoveSdk.requestAppIgnoringBatteryOptimization() is Android OS only.');
271
+ }
272
+ } // **** PERMISSIONS MODULE END *****
273
+
274
+
275
+ static startScanningDevices(sdkDevicesDetected) {
276
+ let filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['paired'];
277
+ let uuid = arguments.length > 2 ? arguments[2] : undefined;
278
+ let manufacturerId = arguments.length > 3 ? arguments[3] : undefined;
279
+ const subscription = eventEmitter.addListener('MOVE_SDK_DEVICES', devices => {
280
+ sdkDevicesDetected(devices);
281
+ });
282
+ const subscriptionRemove = subscription.remove;
283
+
284
+ subscription.remove = () => {
285
+ NativeMoveSdk.stopScanningDevices();
286
+ subscriptionRemove();
287
+ };
288
+
289
+ NativeMoveSdk.startScanningDevices(filter, uuid, manufacturerId !== null && manufacturerId !== void 0 ? manufacturerId : -1);
290
+ return subscription;
291
+ }
292
+
293
+ static async getRegisteredDevices() {
294
+ return await NativeMoveSdk.getRegisteredDevices();
295
+ }
296
+
297
+ static async registerDevices(devices) {
298
+ return await NativeMoveSdk.registerDevices(devices);
299
+ }
300
+
301
+ static async unregisterDevices(devices) {
302
+ return await NativeMoveSdk.unregisterDevices(devices);
303
+ }
304
+
305
+ static requestBluetoothAlwaysUsagePermission() {
306
+ NativeMoveSdk.requestBluetoothAlwaysUsagePermission();
307
+ }
308
+
309
+ static addDeviceDiscoveryListener(onScanResult) {
310
+ return eventEmitter.addListener('MOVE_SDK_SCAN_RESULT', results => {
311
+ onScanResult(results);
312
+ });
313
+ }
314
+
315
+ static setTimer(callback) {
316
+ let delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 60000;
317
+ const key = Date.now().toString();
318
+ NativeMoveSdk.setTimer(delay, key, callback);
319
+ return key;
320
+ }
321
+
322
+ static cancelTimer(key) {
323
+ NativeMoveSdk.cancelTimer(key);
324
+ }
325
+
326
+ }
327
+
328
+ exports.default = MoveSdk;
329
+
330
+ _defineProperty(MoveSdk, "READY", 'READY');
331
+
332
+ _defineProperty(MoveSdk, "RUNNING", 'RUNNING');
333
+
334
+ _defineProperty(MoveSdk, "UNINITIALIZED", 'UNINITIALIZED');
335
+
336
+ _defineProperty(MoveSdk, "AUTH_EXPIRED", 'EXPIRED');
337
+
338
+ _defineProperty(MoveSdk, "AUTH_VALID", 'VALID');
339
+
340
+ _defineProperty(MoveSdk, "AUTH_UNKNOWN", 'UNKNOWN');
341
+
342
+ _defineProperty(MoveSdk, "UNKNOWN", 'UNKNOWN');
343
+
344
+ _defineProperty(MoveSdk, "DRIVING", 'DRIVING');
345
+
346
+ _defineProperty(MoveSdk, "HALT", 'HALT');
347
+
348
+ _defineProperty(MoveSdk, "IDLE", 'IDLE');
349
+
350
+ _defineProperty(MoveSdk, "IGNORED", 'IGNORED');
351
+ //# sourceMappingURL=MoveSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["MoveSdk.ts"],"names":["MoveSdk","NativeMoveSdk","NativeModules","eventEmitter","NativeEventEmitter","sdkStateFromNative","sdkState","UNINITIALIZED","READY","RUNNING","includes","tripStateFromNative","nativeTripState","UNKNOWN","DRIVING","HALT","IDLE","IGNORED","authStateFromNative","nativeAuthState","AUTH_VALID","AUTH_EXPIRED","AUTH_UNKNOWN","setup","config","auth","android","options","timelineDetectionServices","drivingServices","walkingServices","userId","projectId","accessToken","refreshToken","platformParams","Platform","OS","notifications","tripNotification","recognitionNotification","Error","title","text","channel","id","name","description","allowMockLocations","init","resolveError","updateAuth","startAutomaticDetection","stopAutomaticDetection","forceTripRecognition","duration","keepInForeground","enabled","console","warn","keepActive","synchronizeUserData","getAuthState","authState","getState","state","getTripState","tripState","getErrors","getWarnings","initiateAssistanceCall","setAssistanceMetaData","data","addTripStateListener","tripStateChanged","addListener","event","addTripStartListener","tripStartTriggered","start","Date","Number","addSdkStateListener","sdkStateChanged","addAuthStateListener","authStateChanged","transformedEvent","addErrorsListener","errorsReceived","errors","addWarningsListener","warningsReceived","warnings","addAppEventListener","appEventReceived","addRemoteConfigChangeListener","configChangeReceived","version","getConstants","finishCurrentTrip","ignoreCurrentTrip","requestMotionPermission","shutdown","force","getDeviceQualifier","geocode","latitude","longitude","isAuthValid","canDrawOverlays","requestDrawOverlaysPermission","isAppIgnoringBatteryOptimization","requestAppIgnoringBatteryOptimization","startScanningDevices","sdkDevicesDetected","filter","uuid","manufacturerId","subscription","devices","subscriptionRemove","remove","stopScanningDevices","getRegisteredDevices","registerDevices","unregisterDevices","requestBluetoothAlwaysUsagePermission","addDeviceDiscoveryListener","onScanResult","results","setTimer","callback","delay","key","now","toString","cancelTimer"],"mappings":"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","sourcesContent":["import { NativeModules, NativeEventEmitter, Platform, EmitterSubscription } from 'react-native';\n\nexport type SdkState = 'UNINITIALIZED' | 'READY' | 'RUNNING';\nexport type TripState = 'UNKNOWN' | 'DRIVING' | 'HALT' | 'IDLE' | 'IGNORED';\nexport type AuthState = 'UNKNOWN' | 'VALID' | 'EXPIRED' | 'INVALID';\nexport type DrivingService = 'DISTRACTION_FREE_DRIVING' | 'DRIVING_BEHAVIOUR' | 'DEVICE_DISCOVERY';\nexport type WalkingService = 'WALKING_LOCATION';\nexport type OtherService = 'POINTS_OF_INTEREST';\nexport type TimelineDetectionService = 'DRIVING' | 'CYCLING' | 'WALKING' | 'PLACES' | 'PUBLIC_TRANSPORT' | 'AUTOMATIC_IMPACT_DETECTION' | 'ASSISTANCE_CALL' | 'POINTS_OF_INTEREST';\n\nexport type ErrorReasons =\n | 'BACKGROUND_LOCATION_PERMISSION_MISSING'\n | 'LOCATION_PERMISSION_MISSING'\n | 'MOTION_PERMISSION_MISSING'\n | 'ACTIVITY_PERMISSION_MISSING'\n | 'BATTERY_PERMISSION_MISSING'\n | 'UNAUTHORIZED'\n | 'INTERNET_PERMISSION_MISSING'\n | 'PHONE_PERMISSION_MISSING'\n | 'OVERLAY_PERMISSION_MISSING'\n | 'NOTIFICATION_MISSING'\n | 'ACCELEROMETER_MISSING'\n | 'GOOGLE_PLAY_LOCATION_ACCURACY_MISSING'\n | 'PRECISE_LOCATION_PERMISSION_MISSING';\n\nexport type WarningReasons =\n | 'BACKGROUND_LOCATION_PERMISSION_MISSING'\n | 'MOTION_PERMISSION_MISSING'\n | 'ACTIVITY_PERMISSION_MISSING'\n | 'BATTERY_OPTIMIZATION'\n | 'BLUETOOTH_TURNED_OFF'\n | 'BLUETOOTH_SCAN_PERMISSION_MISSING'\n | 'BLUETOOTH_CONNECT_PERMISSION_MISSING'\n | 'GOOGLE_PLAY_LOCATION_ACCURACY_MISSING'\n | 'NOTIFICATION_PERMISSION_MISSING'\n | 'FINE_LOCATION_PERMISSION_MISSING'\n | 'BLUETOOTH_PERMISSION_MISSING'\n | 'GPS_OFF'\n | 'OFFLINE';\n\nexport type IssueListService = TimelineDetectionService | DrivingService | WalkingService;\n\nexport type IssueListItem<ReasonsType> = {\n reasons: Array<ReasonsType>;\n service?: IssueListService;\n};\n\nexport type ErrorListType = Array<IssueListItem<ErrorReasons>>;\n\nexport type WarningListType = Array<IssueListItem<WarningReasons>>;\n\nexport type ShutdownReturnType = 'NETWORK_ERROR' | 'SUCCESS' | 'UNINITIALIZED';\n\nexport type MoveSdkConfig = {\n timelineDetectionServices: Array<TimelineDetectionService>;\n drivingServices: Array<DrivingService>;\n walkingServices: Array<WalkingService>;\n};\n\nexport type MoveSdkDeviceDiscovery = {\n startDelay?: number;\n duration?: number;\n interval?: number;\n stopScanOnFirstDiscovered?: boolean;\n};\n\nexport type MoveSdkOptions = {\n motionPermissionMandatory?: boolean;\n backgroundLocationPermissionMandatory?: boolean;\n useBackendConfig?: boolean;\n deviceDiscovery?: MoveSdkDeviceDiscovery;\n};\n\nexport type MoveSdkAuth = {\n userId: string;\n accessToken: string;\n refreshToken: string;\n projectId: number;\n};\n\nexport type NotificationConfig = {\n title: string;\n text: string;\n channel: { id: string; name: string; description: string };\n};\n\nexport type MoveSdkAndroidConfig = {\n notifications: {\n recognitionNotification: NotificationConfig;\n tripNotification: NotificationConfig;\n };\n};\n\nexport type ListenerSubscription = EmitterSubscription;\n\nexport type AuthStateEvent = {\n state: AuthState;\n accessToken?: string;\n refreshToken?: string;\n};\n\nexport type MoveSdkDeviceFilter = 'beacon' | 'paired';\n\nexport type MoveSdkDevice = {\n name: string;\n data: string;\n id: string;\n};\n\nexport type MoveScanResult = {\n isDiscovered: boolean;\n device: MoveSdkDevice;\n name: string;\n};\n\nconst { MoveSdk: NativeMoveSdk } = NativeModules;\nconst eventEmitter = new NativeEventEmitter(NativeMoveSdk);\n\nexport default class MoveSdk {\n static READY: SdkState = 'READY';\n static RUNNING: SdkState = 'RUNNING';\n static UNINITIALIZED: SdkState = 'UNINITIALIZED';\n\n static AUTH_EXPIRED: AuthState = 'EXPIRED';\n static AUTH_VALID: AuthState = 'VALID';\n static AUTH_UNKNOWN: AuthState = 'UNKNOWN';\n\n static UNKNOWN: TripState = 'UNKNOWN';\n static DRIVING: TripState = 'DRIVING';\n static HALT: TripState = 'HALT';\n static IDLE: TripState = 'IDLE';\n static IGNORED: TripState = 'IGNORED';\n\n static sdkStateFromNative(sdkState: SdkState): SdkState {\n if ([MoveSdk.UNINITIALIZED, MoveSdk.READY, MoveSdk.RUNNING, MoveSdk.UNINITIALIZED].includes(sdkState)) {\n return sdkState;\n }\n\n return MoveSdk.UNINITIALIZED;\n }\n\n static tripStateFromNative(nativeTripState: TripState): TripState {\n if ([MoveSdk.UNKNOWN, MoveSdk.DRIVING, MoveSdk.HALT, MoveSdk.IDLE, MoveSdk.IGNORED].includes(nativeTripState)) {\n return nativeTripState;\n }\n\n return MoveSdk.UNKNOWN;\n }\n\n static authStateFromNative(nativeAuthState: AuthState): AuthState {\n if ([MoveSdk.AUTH_VALID, MoveSdk.AUTH_EXPIRED].includes(nativeAuthState)) {\n return nativeAuthState;\n }\n\n return MoveSdk.AUTH_UNKNOWN;\n }\n\n static async setup(config: MoveSdkConfig, auth: MoveSdkAuth, android: MoveSdkAndroidConfig, options?: MoveSdkOptions): Promise<void> {\n const { timelineDetectionServices, drivingServices, walkingServices } = config;\n\n const { userId, projectId, accessToken, refreshToken } = auth;\n\n let platformParams: Array<string | boolean> = [];\n if (Platform.OS === 'android') {\n const { notifications } = android;\n\n const { tripNotification, recognitionNotification } = notifications;\n\n if (!tripNotification || !recognitionNotification) {\n throw new Error('MOVE SDK needs notification configuration for Android');\n }\n\n platformParams = [\n recognitionNotification.title,\n recognitionNotification.text,\n recognitionNotification.channel.id,\n recognitionNotification.channel.name,\n recognitionNotification.channel.description,\n tripNotification.title,\n tripNotification.text,\n tripNotification.channel.id,\n tripNotification.channel.name,\n tripNotification.channel.description,\n ];\n }\n\n return await NativeMoveSdk.setup(\n userId,\n accessToken,\n refreshToken,\n projectId,\n // Config\n timelineDetectionServices,\n drivingServices,\n walkingServices,\n options,\n // Platform config\n ...platformParams\n );\n }\n\n static allowMockLocations(allowMockLocations: boolean) {\n NativeMoveSdk.allowMockLocations(allowMockLocations);\n }\n\n /* Deprecated */\n static init() {\n NativeMoveSdk.init();\n }\n\n static resolveError() {\n NativeMoveSdk.resolveError();\n }\n\n static async updateAuth(auth: MoveSdkAuth): Promise<void> {\n const { userId, projectId, accessToken, refreshToken } = auth;\n return await NativeMoveSdk.updateAuth(userId, accessToken, refreshToken, projectId);\n }\n\n static startAutomaticDetection() {\n NativeMoveSdk.startAutomaticDetection();\n }\n\n static stopAutomaticDetection() {\n NativeMoveSdk.stopAutomaticDetection();\n }\n\n static forceTripRecognition(duration: number = 60000) {\n NativeMoveSdk.forceTripRecognition(duration);\n }\n\n static keepInForeground(enabled: boolean) {\n if (Platform.OS === 'android') {\n NativeMoveSdk.keepInForeground(enabled);\n } else {\n console.warn('MoveSdk.keepInForeground() is Android OS only.');\n }\n }\n\n static keepActive(enabled: boolean) {\n if (Platform.OS === 'android') {\n NativeMoveSdk.keepActive(enabled);\n } else {\n console.warn('MoveSdk.keepActive() is Android OS only.');\n }\n }\n\n static async synchronizeUserData(): Promise<boolean> {\n return await NativeMoveSdk.synchronizeUserData();\n }\n\n static async getAuthState(): Promise<AuthState> {\n const authState = await NativeMoveSdk.getAuthState();\n return MoveSdk.authStateFromNative(authState);\n }\n\n static async getState(): Promise<SdkState> {\n const state = await NativeMoveSdk.getState();\n return MoveSdk.sdkStateFromNative(state);\n }\n\n static async getTripState(): Promise<TripState> {\n const tripState = await NativeMoveSdk.getTripState();\n return MoveSdk.tripStateFromNative(tripState);\n }\n\n static async getErrors(): Promise<ErrorListType> {\n return await NativeMoveSdk.getErrors();\n }\n\n static async getWarnings(): Promise<WarningListType> {\n return await NativeMoveSdk.getWarnings();\n }\n\n static async initiateAssistanceCall(): Promise<boolean> {\n return await NativeMoveSdk.initiateAssistanceCall();\n }\n\n static setAssistanceMetaData(data: string) {\n NativeMoveSdk.setAssistanceMetaData(data);\n }\n\n static addTripStateListener(tripStateChanged: (state: TripState) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_TRIP_STATE', (event) => tripStateChanged(MoveSdk.tripStateFromNative(event.state)));\n }\n\n static addTripStartListener(tripStartTriggered: (start: Date) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_TRIP_START', (start) => tripStartTriggered(new Date(Number(start))));\n }\n\n static addSdkStateListener(sdkStateChanged: (state: SdkState) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_STATE', (event) => {\n sdkStateChanged(MoveSdk.sdkStateFromNative(event.state));\n });\n }\n\n static addAuthStateListener(authStateChanged: (event: AuthStateEvent) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_AUTH_STATE', (event) => {\n const transformedEvent = {\n ...event,\n state: MoveSdk.authStateFromNative(event.state),\n };\n authStateChanged(transformedEvent);\n });\n }\n\n static addErrorsListener(errorsReceived: (errors: ErrorListType) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_ERRORS', (event) => {\n errorsReceived(event.errors);\n });\n }\n\n static addWarningsListener(warningsReceived: (warnings: WarningListType) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_WARNINGS', (event) => {\n warningsReceived(event.warnings);\n });\n }\n\n static addAppEventListener(appEventReceived: (event: string) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_APP_EVENT', (event) => {\n appEventReceived(event);\n });\n }\n\n static addRemoteConfigChangeListener(configChangeReceived: (config: Array<IssueListService>) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_CONFIG_UPDATE', (config) => {\n configChangeReceived(config);\n });\n }\n\n static version(): string {\n return Platform.OS === 'android' ? NativeMoveSdk.getConstants().version : 'Unknown';\n }\n\n static finishCurrentTrip() {\n NativeMoveSdk.finishCurrentTrip();\n }\n\n static ignoreCurrentTrip() {\n NativeMoveSdk.ignoreCurrentTrip();\n }\n\n static requestMotionPermission() {\n if (Platform.OS === 'ios') {\n NativeMoveSdk.requestMotionPermission();\n } else {\n console.warn('MoveSdk.requestMotionPermission() is iOS only.');\n }\n }\n\n static async shutdown(force: boolean = true): Promise<ShutdownReturnType> {\n return await NativeMoveSdk.shutdown(force);\n }\n\n static async getDeviceQualifier(): Promise<string | null> {\n return NativeMoveSdk.getDeviceQualifier();\n }\n\n static async geocode(latitude: number, longitude: number): Promise<string> {\n return await NativeMoveSdk.geocode(latitude, longitude);\n }\n\n static async isAuthValid(): Promise<boolean> {\n return await NativeMoveSdk.isAuthValid();\n }\n\n // **** PERMISSIONS MODULE START *****\n\n static async canDrawOverlays(): Promise<boolean> {\n return await NativeMoveSdk.canDrawOverlays();\n }\n\n static requestDrawOverlaysPermission() {\n if (Platform.OS === 'android') {\n NativeMoveSdk.requestDrawOverlaysPermission();\n } else {\n console.warn('MoveSdk.requestDrawOverlaysPermission() is Android OS only.');\n }\n }\n\n static async isAppIgnoringBatteryOptimization(): Promise<boolean> {\n return await NativeMoveSdk.isAppIgnoringBatteryOptimization();\n }\n\n static requestAppIgnoringBatteryOptimization() {\n if (Platform.OS === 'android') {\n NativeMoveSdk.requestAppIgnoringBatteryOptimization();\n } else {\n console.warn('MoveSdk.requestAppIgnoringBatteryOptimization() is Android OS only.');\n }\n }\n\n // **** PERMISSIONS MODULE END *****\n\n static startScanningDevices(sdkDevicesDetected: (state: Array<MoveSdkDevice>) => void, filter: MoveSdkDeviceFilter[] = ['paired'], uuid?: string, manufacturerId?: number): ListenerSubscription {\n const subscription = eventEmitter.addListener('MOVE_SDK_DEVICES', (devices) => {\n sdkDevicesDetected(devices);\n });\n const subscriptionRemove = subscription.remove;\n subscription.remove = () => {\n NativeMoveSdk.stopScanningDevices();\n subscriptionRemove();\n };\n\n NativeMoveSdk.startScanningDevices(filter, uuid, manufacturerId ?? -1);\n return subscription;\n }\n\n static async getRegisteredDevices(): Promise<Array<MoveSdkDevice>> {\n return await NativeMoveSdk.getRegisteredDevices();\n }\n\n static async registerDevices(devices: Array<MoveSdkDevice>): Promise<boolean> {\n return await NativeMoveSdk.registerDevices(devices);\n }\n\n static async unregisterDevices(devices: Array<MoveSdkDevice>): Promise<boolean> {\n return await NativeMoveSdk.unregisterDevices(devices);\n }\n\n static requestBluetoothAlwaysUsagePermission(): void {\n NativeMoveSdk.requestBluetoothAlwaysUsagePermission();\n }\n\n static addDeviceDiscoveryListener(onScanResult: (state: Array<MoveScanResult>) => void): ListenerSubscription {\n return eventEmitter.addListener('MOVE_SDK_SCAN_RESULT', (results) => {\n onScanResult(results);\n });\n }\n\n static setTimer(callback: (key: string) => void, delay: number = 60000): string {\n const key = Date.now().toString();\n NativeMoveSdk.setTimer(delay, key, callback);\n return key;\n }\n\n static cancelTimer(key: string) {\n NativeMoveSdk.cancelTimer(key);\n }\n}\n"]}