hypertrack-sdk-react-native 7.19.0 → 8.0.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 (40) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CONTRIBUTING.md +154 -0
  3. package/README.md +25 -16
  4. package/android/build.gradle +141 -35
  5. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  6. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  7. package/android/gradle.properties +6 -0
  8. package/android/gradlew +185 -0
  9. package/android/gradlew.bat +89 -0
  10. package/android/src/main/AndroidManifest.xml +2 -3
  11. package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackModule.kt +284 -0
  12. package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackSdkPackage.kt +17 -0
  13. package/hypertrack-sdk-react-native.podspec +34 -15
  14. package/ios/{RNHyperTrack/RNHyperTrack.h → HyperTrack.h} +1 -2
  15. package/ios/HyperTrack.m +384 -0
  16. package/ios/{RNHyperTrack.xcodeproj → HyperTrackSdk.xcodeproj}/project.pbxproj +70 -99
  17. package/lib/commonjs/HyperTrack/HyperTrack.js +244 -0
  18. package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -0
  19. package/lib/commonjs/index.js +52 -0
  20. package/lib/commonjs/index.js.map +1 -0
  21. package/lib/module/HyperTrack/HyperTrack.js +230 -0
  22. package/lib/module/HyperTrack/HyperTrack.js.map +1 -0
  23. package/lib/module/index.js +5 -0
  24. package/lib/module/index.js.map +1 -0
  25. package/lib/typescript/HyperTrack/HyperTrack.d.ts +161 -0
  26. package/lib/typescript/index.d.ts +4 -0
  27. package/package.json +145 -47
  28. package/src/HyperTrack/HyperTrack.ts +273 -0
  29. package/src/index.tsx +11 -0
  30. package/android/src/main/java/com/hypertrack/reactnative/androidsdk/HTSDKModule.java +0 -301
  31. package/android/src/main/java/com/hypertrack/reactnative/androidsdk/HTSDKPackage.java +0 -29
  32. package/ios/RNHyperTrack/RNHyperTrack.m +0 -312
  33. package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  34. package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  35. package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/xcuserdata/tulushev.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  36. package/ios/RNHyperTrack.xcodeproj/xcuserdata/tulushev.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  37. package/js/CriticalErrors.js +0 -97
  38. package/js/EventEmitter.js +0 -11
  39. package/js/HyperTrack.js +0 -130
  40. package/js/index.js +0 -13
@@ -1,301 +0,0 @@
1
- package com.hypertrack.reactnative.androidsdk;
2
-
3
- import android.location.Location;
4
- import android.util.Log;
5
-
6
- import com.facebook.react.bridge.Arguments;
7
- import com.facebook.react.bridge.Promise;
8
- import com.facebook.react.bridge.ReactApplicationContext;
9
- import com.facebook.react.bridge.ReactContextBaseJavaModule;
10
- import com.facebook.react.bridge.ReactMethod;
11
- import com.facebook.react.bridge.ReadableMap;
12
- import com.facebook.react.bridge.WritableMap;
13
- import com.facebook.react.module.annotations.ReactModule;
14
- import com.facebook.react.modules.core.DeviceEventManagerModule;
15
- import com.hypertrack.sdk.AsyncResultReceiver;
16
- import com.hypertrack.sdk.GeotagResult;
17
- import com.hypertrack.sdk.HyperTrack;
18
- import com.hypertrack.sdk.OutageReason;
19
- import com.hypertrack.sdk.Result;
20
- import com.hypertrack.sdk.TrackingError;
21
- import com.hypertrack.sdk.TrackingStateObserver;
22
-
23
- import java.util.Locale;
24
-
25
-
26
- @ReactModule(name = HTSDKModule.NAME)
27
- public class HTSDKModule extends ReactContextBaseJavaModule {
28
-
29
- public TrackingStateObserver.OnTrackingStateChangeListener trackingStateChangeListener;
30
- public HyperTrack sdkInstance;
31
-
32
- public HTSDKModule(ReactApplicationContext reactContext) {
33
- super(reactContext);
34
- }
35
-
36
- @Override
37
- public String getName() {
38
- return NAME;
39
- }
40
-
41
- @ReactMethod
42
- public void initialize(String publishableKey, Boolean startsTracking, Boolean automaticallyRequestPermissions, Promise promise) {
43
- try {
44
- sdkInstance = HyperTrack.getInstance(
45
- publishableKey
46
- ).backgroundTrackingRequirement(false);
47
- if (startsTracking) {
48
- sdkInstance.start();
49
- }
50
- promise.resolve(true);
51
- } catch (java.lang.Exception exception) {
52
- Log.e(TAG, "Hypertrack SDK initialization failed.", exception);
53
- String error = String.format(Locale.ENGLISH, "%d", RN_ERROR_INVALID_PUBLISHABLE_KEY);
54
- promise.reject(error, new Exception("Hypertrack SDK initialization failed."));
55
- }
56
- }
57
-
58
- @ReactMethod
59
- public void subscribeOnEvents() {
60
- if (trackingStateChangeListener != null) {
61
- sdkInstance.removeTrackingListener(trackingStateChangeListener);
62
- trackingStateChangeListener = null;
63
- }
64
- trackingStateChangeListener = new TrackingStateObserver.OnTrackingStateChangeListener() {
65
- @Override
66
- public void onError(TrackingError trackingError) {
67
- WritableMap params = Arguments.createMap();
68
- params.putInt("code", convertToRNErrorsCode(trackingError.code));
69
- params.putString("message", trackingError.message);
70
- getReactApplicationContext()
71
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
72
- .emit("onTrackingErrorHyperTrack", params);
73
- }
74
-
75
- @Override
76
- public void onTrackingStart() {
77
- getReactApplicationContext()
78
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
79
- .emit("onTrackingStartHyperTrack", null);
80
- }
81
-
82
- @Override
83
- public void onTrackingStop() {
84
- getReactApplicationContext()
85
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
86
- .emit("onTrackingStopHyperTrack", null);
87
- }
88
- };
89
- sdkInstance.addTrackingListener(trackingStateChangeListener);
90
- }
91
-
92
- @ReactMethod
93
- public void getDeviceID(Promise promise) {
94
- promise.resolve(sdkInstance.getDeviceID());
95
- }
96
-
97
- @ReactMethod
98
- public void isTracking(Promise promise) {
99
- promise.resolve(sdkInstance.isRunning());
100
- }
101
-
102
-
103
- @ReactMethod
104
- public void startTracking() {
105
- sdkInstance.start();
106
- }
107
-
108
- @ReactMethod
109
- public void stopTracking() {
110
- sdkInstance.stop();
111
- }
112
-
113
- @ReactMethod
114
- public void syncDeviceSettings() {
115
- sdkInstance.syncDeviceSettings();
116
- }
117
-
118
- @ReactMethod
119
- public void setTripMarker(ReadableMap rMap, Promise promise) {
120
- try {
121
- sdkInstance.addGeotag(rMap.toHashMap());
122
- promise.resolve(null);
123
- } catch (Exception e) {
124
- String error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL);
125
- promise.reject(error, e);
126
- }
127
- }
128
-
129
- @ReactMethod
130
- public void addGeotag(ReadableMap rMap, ReadableMap expectedLocation, final Promise promise) {
131
- try {
132
- Location expected = expectedLocationFromMap(expectedLocation);
133
- GeotagResult result = sdkInstance.addGeotag(rMap.toHashMap(), expected);
134
- if (result instanceof GeotagResult.Success) {
135
- Location deviceLocation = ((GeotagResult.Success) result).getDeviceLocation();
136
- WritableMap map = Arguments.createMap();
137
- map.putDouble("latitude", deviceLocation.getLatitude());
138
- map.putDouble("longitude", deviceLocation.getLongitude());
139
- promise.resolve(map);
140
-
141
- } else {
142
- String error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL);
143
- promise.reject(error);
144
- }
145
- } catch (Exception e) {
146
- String error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL);
147
- promise.reject(error, e);
148
- }
149
- }
150
-
151
- private Location expectedLocationFromMap(ReadableMap expectedLocation) {
152
- if (!expectedLocation.hasKey(LATITUDE) || !expectedLocation.hasKey(LONGITUDE)) return null;
153
- try {
154
- double latitude = expectedLocation.getDouble(LATITUDE);
155
- double longitude = expectedLocation.getDouble(LONGITUDE);
156
- if (longitude > 180.0 || longitude < -180.0) return null;
157
- if (latitude > 90.0 || latitude < -90.0) return null;
158
- Location expected = new Location("any");
159
- expected.setLatitude(latitude);
160
- expected.setLongitude(longitude);
161
- return expected;
162
- } catch (Throwable ignored) {
163
- return null;
164
- }
165
- }
166
-
167
- private void fail(int error, Promise promise) {
168
- WritableMap map = Arguments.createMap();
169
- map.putInt("code", error);
170
- promise.resolve(map);
171
- }
172
-
173
- @ReactMethod
174
- public void setDeviceName(String name, Promise promise) {
175
- try {
176
- sdkInstance.setDeviceName(name);
177
- promise.resolve(true);
178
- } catch (Exception e) {
179
- String error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL);
180
- promise.reject(error, e);
181
- }
182
- }
183
-
184
- @ReactMethod
185
- public void setMetadata(ReadableMap rMap, Promise promise) {
186
- try {
187
- sdkInstance.setDeviceMetadata(rMap.toHashMap());
188
- promise.resolve(true);
189
- } catch (Exception e) {
190
- String error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL);
191
- promise.reject(error, e);
192
- }
193
- }
194
-
195
- @ReactMethod
196
- public void enableDebugLogging(Boolean enable) {
197
- if (enable) {
198
- HyperTrack.enableDebugLogging();
199
- }
200
- }
201
-
202
- @ReactMethod
203
- public void enableMockLocation(Boolean enable) {
204
- if (enable) {
205
- sdkInstance.allowMockLocations();
206
- }
207
- }
208
-
209
- @ReactMethod
210
- public void getLocation(Promise promise) {
211
- promise.resolve(locationResultToMap(sdkInstance.getLatestLocation()));
212
- }
213
-
214
- @ReactMethod
215
- public void getCurrentLocation(final Promise promise) {
216
- sdkInstance.getCurrentLocation(new AsyncResultReceiver<Location, OutageReason>() {
217
- @Override
218
- public void onResult(Result<Location, OutageReason> result) {
219
- promise.resolve(locationResultToMap(result));
220
- }
221
- });
222
- }
223
-
224
- private WritableMap locationResultToMap(Result<Location, OutageReason> result) {
225
- WritableMap resultMap = Arguments.createMap();
226
- if (result.isSuccess()) {
227
- Location location = result.getValue();
228
- WritableMap locationMap = Arguments.createMap();
229
- locationMap.putDouble(LATITUDE, location.getLatitude());
230
- locationMap.putDouble(LONGITUDE, location.getLongitude());
231
- resultMap.putMap(KEY_LOCATION, locationMap);
232
- } else {
233
- OutageReason outage = result.getError();
234
- WritableMap errorMap = Arguments.createMap();
235
- errorMap.putString(KEY_OUTAGE_CODE, getOutageName(outage));
236
- resultMap.putMap(KEY_ERROR, errorMap);
237
- }
238
- return resultMap;
239
- }
240
-
241
- private String getOutageName(OutageReason outageReason) {
242
- switch (outageReason) {
243
- case MISSING_LOCATION_PERMISSION:
244
- return OUTAGE_CODE_LOCATION_PERMISSIONS_DENIED;
245
-
246
- case MISSING_ACTIVITY_PERMISSION:
247
- return OUTAGE_CODE_MOTION_ACTIVITY_PERMISSIONS_DENIED;
248
-
249
- case LOCATION_SERVICE_DISABLED:
250
- return OUTAGE_CODE_LOCATION_SERVICES_DISABLED;
251
-
252
- case NOT_TRACKING:
253
- return OUTAGE_CODE_NOT_RUNNING;
254
-
255
- case START_HAS_NOT_FINISHED:
256
- return OUTAGE_CODE_STARTING;
257
-
258
- case NO_GPS_SIGNAL:
259
- case RESTART_REQUIRED:
260
- default:
261
- return OUTAGE_CODE_GPS_SIGNAL_LOST;
262
- }
263
- }
264
-
265
- private static final String TAG = "HTSDKModule";
266
-
267
- private static final String KEY_LOCATION = "location";
268
- private static final String KEY_ERROR = "error";
269
- private static final String KEY_OUTAGE_CODE = "code";
270
-
271
- public static final String NAME = "HyperTrack";
272
- public static final String LATITUDE = "latitude";
273
- public static final String LONGITUDE = "longitude";
274
- public static final String ACCURACY = "accuracy";
275
-
276
- private static final String OUTAGE_CODE_LOCATION_PERMISSIONS_DENIED = "location_permissions_denied";
277
- private static final String OUTAGE_CODE_LOCATION_SERVICES_DISABLED = "location_services_disabled";
278
- private static final String OUTAGE_CODE_MOTION_ACTIVITY_PERMISSIONS_DENIED = "motion_activity_permissions_denied";
279
- private static final String OUTAGE_CODE_NOT_RUNNING = "not_running";
280
- private static final String OUTAGE_CODE_GPS_SIGNAL_LOST = "gps_signal_lost";
281
- private static final String OUTAGE_CODE_STARTING = "starting";
282
-
283
- private static final int RN_ERROR_GENERAL = 0;
284
- private static final int RN_ERROR_INVALID_PUBLISHABLE_KEY = 1;
285
- private static final int RN_ERROR_AUTHORIZATION_FAILED = 2;
286
- private static final int RN_ERROR_PERMISSION_DENIED = 3;
287
-
288
- private int convertToRNErrorsCode(int androidSdkCode) {
289
- switch (androidSdkCode) {
290
- case TrackingError.INVALID_PUBLISHABLE_KEY_ERROR:
291
- return RN_ERROR_INVALID_PUBLISHABLE_KEY;
292
- case TrackingError.AUTHORIZATION_ERROR:
293
- return RN_ERROR_AUTHORIZATION_FAILED;
294
- case TrackingError.PERMISSION_DENIED_ERROR:
295
- return RN_ERROR_PERMISSION_DENIED;
296
- default:
297
- return RN_ERROR_GENERAL;
298
- }
299
- }
300
-
301
- }
@@ -1,29 +0,0 @@
1
- package com.hypertrack.reactnative.androidsdk;
2
-
3
- import com.facebook.react.ReactPackage;
4
- import com.facebook.react.bridge.JavaScriptModule;
5
- import com.facebook.react.bridge.NativeModule;
6
- import com.facebook.react.bridge.ReactApplicationContext;
7
- import com.facebook.react.uimanager.ViewManager;
8
-
9
- import java.util.Arrays;
10
- import java.util.Collections;
11
- import java.util.List;
12
-
13
- public class HTSDKPackage implements ReactPackage {
14
- @Override
15
- public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
16
- return Arrays.<NativeModule>asList(
17
- new HTSDKModule(reactContext)
18
- );
19
- }
20
-
21
- public List<Class<? extends JavaScriptModule>> createJSModules() {
22
- return Collections.emptyList();
23
- }
24
-
25
- @Override
26
- public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
27
- return Collections.emptyList();
28
- }
29
- }
@@ -1,312 +0,0 @@
1
- #import "RNHyperTrack.h"
2
- #import <React/RCTLog.h>
3
- #import <React/RCTEventDispatcher.h>
4
-
5
- @interface HyperTrack ()
6
-
7
- @property(nonatomic) HTSDK *hyperTrack;
8
-
9
- @end
10
-
11
-
12
- @implementation HyperTrack
13
- {
14
- bool hasListeners;
15
- }
16
- /**
17
- * RN Critical error type.
18
- */
19
- typedef NS_ENUM(NSUInteger, RNCriticalErrorType) {
20
- permissionDenied = 3,
21
- authorizationError = 2,
22
- invalidPublishableKey = 1,
23
- generalError = 0
24
- };
25
-
26
- RCT_EXPORT_MODULE();
27
-
28
- - (dispatch_queue_t)methodQueue {
29
- return dispatch_get_main_queue();
30
- }
31
-
32
- - (NSArray<NSString *> *)supportedEvents {
33
- return @[@"onTrackingErrorHyperTrack",
34
- @"onTrackingStopHyperTrack",
35
- @"onTrackingStartHyperTrack"];
36
- }
37
-
38
- - (void)startObserving {
39
- hasListeners = YES;
40
- }
41
-
42
- - (void)stopObserving {
43
- hasListeners = NO;
44
- }
45
-
46
- #pragma mark - HyperTrack SDK
47
-
48
- RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey startsTracking:(BOOL)startsTracking automaticallyRequestPermissions:(BOOL)automaticallyRequestPermissions :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
49
- RCTLogInfo(@"Initializing HyperTrack with publishableKey: %@", publishableKey);
50
- __weak __typeof(self) weakSelf = self;
51
- dispatch_async(dispatch_get_main_queue(), ^{
52
- [weakSelf addObservers];
53
- HTResult *result = [HTSDK makeSDKWithPublishableKey:publishableKey
54
- automaticallyRequestPermissions:automaticallyRequestPermissions];
55
- if (result.hyperTrack != nil) {
56
- RCTLogInfo(@"Successfully set publishableKey and created SDK instance");
57
- self.hyperTrack = result.hyperTrack;
58
- if (startsTracking) {
59
- [self.hyperTrack start];
60
- }
61
- resolve(nil);
62
- } else {
63
- switch ([result.error code]) {
64
-
65
- case HTFatalErrorDevelopmentPublishableKeyIsEmpty:
66
- {
67
- NSError *error = [NSError errorWithDomain: result.error.domain
68
- code: invalidPublishableKey
69
- userInfo: result.error.userInfo];
70
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
71
- }
72
- break;
73
-
74
- case HTFatalErrorDevelopmentMissingLocationUpdatesBackgroundModeCapability:
75
- {
76
- NSError *error = [NSError errorWithDomain: result.error.domain
77
- code: generalError
78
- userInfo: result.error.userInfo];
79
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
80
- }
81
- break;
82
-
83
- case HTFatalErrorDevelopmentRunningOnSimulatorUnsupported:
84
- {
85
- NSError *error = [NSError errorWithDomain: result.error.domain
86
- code: generalError
87
- userInfo: result.error.userInfo];
88
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
89
- }
90
- break;
91
-
92
- case HTFatalErrorProductionLocationServicesUnavalible:
93
- {
94
- NSError *error = [NSError errorWithDomain: result.error.domain
95
- code: permissionDenied
96
- userInfo: result.error.userInfo];
97
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
98
- }
99
- break;
100
-
101
- case HTFatalErrorProductionMotionActivityServicesUnavalible:
102
- {
103
- NSError *error = [NSError errorWithDomain: result.error.domain
104
- code: permissionDenied
105
- userInfo: result.error.userInfo];
106
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
107
- }
108
- break;
109
-
110
- case HTFatalErrorProductionMotionActivityPermissionsDenied:
111
- {
112
- NSError *error = [NSError errorWithDomain: result.error.domain
113
- code: permissionDenied
114
- userInfo: result.error.userInfo];
115
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
116
- }
117
- break;
118
-
119
- default:
120
- {
121
- NSError *error = [NSError errorWithDomain: result.error.domain
122
- code: generalError
123
- userInfo: result.error.userInfo];
124
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
125
- }
126
- break;
127
- }
128
- }
129
- });
130
- }
131
-
132
- RCT_EXPORT_METHOD(startTracking) {
133
- [self.hyperTrack start];
134
- }
135
-
136
- RCT_EXPORT_METHOD(stopTracking) {
137
- [self.hyperTrack stop];
138
- }
139
-
140
- RCT_EXPORT_METHOD(syncDeviceSettings) {
141
- [self.hyperTrack syncDeviceSettings];
142
- }
143
-
144
- RCT_EXPORT_METHOD(subscribeOnEvents) {
145
-
146
- }
147
-
148
- RCT_EXPORT_METHOD(enableDebugLogging:(BOOL)isEnable) {
149
-
150
- }
151
-
152
- RCT_EXPORT_METHOD(isTracking:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
153
- resolve([NSNumber numberWithBool:[self.hyperTrack isRunning]]);
154
- }
155
-
156
- RCT_EXPORT_METHOD(getLocation:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
157
- HTLocationResult *locationResult = self.hyperTrack.location;
158
-
159
- switch (locationResult.error) {
160
- case HTLocationErrorNoError:
161
- resolve(@{ @"location": @{ @"latitude": [NSNumber numberWithDouble:locationResult.location.latitude], @"longitude": [NSNumber numberWithDouble:locationResult.location.longitude] } });
162
- break;
163
- case HTLocationErrorLocationPermissionsNotDetermined:
164
- resolve(@{ @"error": @{ @"code": @"location_permissions_not_determined" } });
165
- break;
166
- case HTLocationErrorLocationPermissionsCantBeAskedInBackground:
167
- resolve(@{ @"error": @{ @"code": @"location_permissions_cant_be_asked_in_background" } });
168
- break;
169
- case HTLocationErrorLocationPermissionsInsufficientForBackground:
170
- resolve(@{ @"error": @{ @"code": @"location_permissions_insufficient_for_background" } });
171
- break;
172
- case HTLocationErrorLocationPermissionsRestricted:
173
- resolve(@{ @"error": @{ @"code": @"location_permissions_restricted" } });
174
- break;
175
- case HTLocationErrorLocationPermissionsReducedAccuracy:
176
- resolve(@{ @"error": @{ @"code": @"location_permissions_reduced_accuracy" } });
177
- break;
178
- case HTLocationErrorLocationPermissionsDenied:
179
- resolve(@{ @"error": @{ @"code": @"location_permissions_denied" } });
180
- break;
181
- case HTLocationErrorLocationServicesDisabled:
182
- resolve(@{ @"error": @{ @"code": @"location_services_disabled" } });
183
- break;
184
- case HTLocationErrorMotionActivityPermissionsNotDetermined:
185
- resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_not_determined" } });
186
- break;
187
- case HTLocationErrorMotionActivityPermissionsCantBeAskedInBackground:
188
- resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_cant_be_asked_in_background" } });
189
- break;
190
- case HTLocationErrorMotionActivityPermissionsDenied:
191
- resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_denied" } });
192
- break;
193
- case HTLocationErrorMotionActivityServicesDisabled:
194
- resolve(@{ @"error": @{ @"code": @"motion_activity_services_disabled" } });
195
- break;
196
- case HTLocationErrorNotRunning:
197
- resolve(@{ @"error": @{ @"code": @"not_running" } });
198
- break;
199
- case HTLocationErrorGpsSignalLost:
200
- resolve(@{ @"error": @{ @"code": @"gps_signal_lost" } });
201
- break;
202
- case HTLocationErrorStarting:
203
- resolve(@{ @"error": @{ @"code": @"starting" } });
204
- break;
205
- case HTLocationErrorLocationMocked:
206
- resolve(@{ @"error": @{ @"code": @"location_mocked" } });
207
- break;
208
- }
209
- }
210
-
211
- RCT_EXPORT_METHOD(getDeviceID:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
212
- resolve(self.hyperTrack.deviceID);
213
- }
214
-
215
- RCT_EXPORT_METHOD(setDeviceName:(NSString *)deviceName :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
216
- self.hyperTrack.deviceName = deviceName;
217
- resolve(nil);
218
- }
219
-
220
- RCT_EXPORT_METHOD(setMetadata:(NSDictionary<NSString*, id>*)metadata :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
221
- HTMetadata *hyperTrackMetadata = [[HTMetadata alloc] initWithDictionary:metadata];
222
- if (metadata != nil) {
223
- [self.hyperTrack setDeviceMetadata:hyperTrackMetadata];
224
- resolve(nil);
225
- } else {
226
- NSError *error = [NSError errorWithDomain:@"HyperTrackMetadataError" code:-1 userInfo:@{ @"description": @"Metadata is not a valid JSON" }];
227
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
228
- }
229
- }
230
-
231
- RCT_EXPORT_METHOD(setTripMarker:(NSDictionary<NSString*, id>*)metadata :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
232
- HTMetadata *hyperTrackMetadata = [[HTMetadata alloc] initWithDictionary:metadata];
233
- if (metadata != nil) {
234
- [self.hyperTrack addGeotag:hyperTrackMetadata];
235
- resolve(nil);
236
- } else {
237
- NSError *error = [NSError errorWithDomain:@"HyperTrackMetadataError" code:-1 userInfo:@{ @"description": @"Geotag is not a valid JSON" }];
238
- reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
239
- }
240
- }
241
-
242
- #pragma mark - NSNotificationCenter
243
-
244
- - (void)addObservers {
245
- [[NSNotificationCenter defaultCenter] removeObserver:self];
246
- [[NSNotificationCenter defaultCenter] addObserver:self
247
- selector:@selector(sendTrackingStateToRNWith:)
248
- name:HTSDK.startedTrackingNotification
249
- object:nil];
250
- [[NSNotificationCenter defaultCenter] addObserver:self
251
- selector:@selector(sendTrackingStateToRNWith:)
252
- name:HTSDK.stoppedTrackingNotification
253
- object:nil];
254
- [[NSNotificationCenter defaultCenter] addObserver:self
255
- selector:@selector(sendCriticalErrorForNotification:)
256
- name:HTSDK.didEncounterRestorableErrorNotification
257
- object:nil];
258
- [[NSNotificationCenter defaultCenter] addObserver:self
259
- selector:@selector(sendCriticalErrorForNotification:)
260
- name:HTSDK.didEncounterUnrestorableErrorNotification
261
- object:nil];
262
- }
263
-
264
- - (void)sendTrackingStateToRNWith:(NSNotification*)notification {
265
- NSString *eventName = @"";
266
- if ([notification.name isEqualToString: @"HyperTrackStartedTracking"]) {
267
- eventName = @"onTrackingStartHyperTrack";
268
- } else if ([notification.name isEqualToString: @"HyperTrackStoppedTracking"]) {
269
- eventName = @"onTrackingStopHyperTrack";
270
- } else {
271
- return;
272
- }
273
- if (hasListeners) {
274
- [self sendEventWithName: eventName body: @{@"isTracking": @([self.hyperTrack isRunning])}];
275
- }
276
- }
277
-
278
- - (void)sendCriticalErrorForNotification:(NSNotification *)notification {
279
- [self sendError:[notification hyperTrackTrackingError]];
280
- }
281
-
282
- - (void)sendError:(NSError *)error {
283
- if (error != nil && hasListeners) {
284
- [self sendEventWithName: @"onTrackingErrorHyperTrack"
285
- body: @{ @"code": [self convertErrorCodeToRN:[error code]], @"message": error.localizedDescription }];
286
- }
287
- }
288
-
289
- - (NSNumber *)convertErrorCodeToRN:(NSInteger)errorCode {
290
- switch (errorCode) {
291
- case HTRestorableErrorLocationPermissionsDenied:
292
- case HTRestorableErrorLocationServicesDisabled:
293
- case HTRestorableErrorMotionActivityServicesDisabled:
294
- case HTUnrestorableErrorMotionActivityPermissionsDenied:
295
- case HTFatalErrorProductionMotionActivityPermissionsDenied:
296
- return [NSNumber numberWithInteger:permissionDenied];
297
- break;
298
- case HTRestorableErrorTrialEnded:
299
- case HTRestorableErrorPaymentDefault:
300
- return [NSNumber numberWithInteger:authorizationError];
301
- break;
302
- case HTUnrestorableErrorInvalidPublishableKey:
303
- case HTFatalErrorDevelopmentPublishableKeyIsEmpty:
304
- return [NSNumber numberWithInteger:invalidPublishableKey];
305
- break;
306
- default:
307
- return [NSNumber numberWithInteger:generalError];
308
- break;
309
- }
310
- }
311
-
312
- @end
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Workspace
3
- version = "1.0">
4
- <FileRef
5
- location = "self:">
6
- </FileRef>
7
- </Workspace>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>IDEDidComputeMac32BitWarning</key>
6
- <true/>
7
- </dict>
8
- </plist>
@@ -1,14 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SchemeUserState</key>
6
- <dict>
7
- <key>RNHyperTrack.xcscheme_^#shared#^_</key>
8
- <dict>
9
- <key>orderHint</key>
10
- <integer>0</integer>
11
- </dict>
12
- </dict>
13
- </dict>
14
- </plist>