shakebug-react-native 1.0.14
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/DeviceInfo/index.js.flow +177 -0
- package/DeviceInfo/index.ts +1034 -0
- package/DeviceInfo/internal/asyncHookWrappers.ts +59 -0
- package/DeviceInfo/internal/devicesWithDynamicIsland.ts +30 -0
- package/DeviceInfo/internal/devicesWithNotch.ts +374 -0
- package/DeviceInfo/internal/nativeInterface.ts +28 -0
- package/DeviceInfo/internal/privateTypes.ts +231 -0
- package/DeviceInfo/internal/supported-platform-info.ts +97 -0
- package/DeviceInfo/internal/types.ts +19 -0
- package/DeviceInfo/web/index.js +223 -0
- package/GetLocals/src/NativeRNLocalize.ts +18 -0
- package/GetLocals/src/constants.ts +269 -0
- package/GetLocals/src/index.ts +56 -0
- package/GetLocals/src/module.ts +51 -0
- package/GetLocals/src/module.web.ts +148 -0
- package/GetLocals/src/types.ts +31 -0
- package/GetLocation/LocationError.ts +20 -0
- package/GetLocation/index.ts +46 -0
- package/GetLocation/utils.ts +89 -0
- package/ImageOrVedioPicker/src/index.ts +28 -0
- package/ImageOrVedioPicker/src/platforms/NativeImagePicker.ts +10 -0
- package/ImageOrVedioPicker/src/platforms/native.ts +61 -0
- package/ImageOrVedioPicker/src/platforms/web.ts +159 -0
- package/ImageOrVedioPicker/src/types.ts +74 -0
- package/NetInfo/src/__tests__/eventListenerCallbacks.spec.ts +332 -0
- package/NetInfo/src/__tests__/fetch.spec.ts +479 -0
- package/NetInfo/src/index.ts +186 -0
- package/NetInfo/src/internal/__mocks__/nativeModule.ts +13 -0
- package/NetInfo/src/internal/defaultConfiguration.ts +17 -0
- package/NetInfo/src/internal/defaultConfiguration.web.ts +17 -0
- package/NetInfo/src/internal/internetReachability.ts +180 -0
- package/NetInfo/src/internal/nativeInterface.ts +43 -0
- package/NetInfo/src/internal/nativeInterface.web.ts +27 -0
- package/NetInfo/src/internal/nativeModule.ts +15 -0
- package/NetInfo/src/internal/nativeModule.web.ts +306 -0
- package/NetInfo/src/internal/privateTypes.ts +41 -0
- package/NetInfo/src/internal/state.ts +137 -0
- package/NetInfo/src/internal/types.ts +128 -0
- package/README.md +246 -0
- package/RecordScreen/src/index.tsx +75 -0
- package/ScreenShot/src/RNViewShot.js +3 -0
- package/ScreenShot/src/RNViewShot.web.js +42 -0
- package/ScreenShot/src/index.js +308 -0
- package/Sensor/src/index.js +14 -0
- package/Sensor/src/rnsensors.js +57 -0
- package/Sensor/src/sensors.js +97 -0
- package/VideoPlayer/PlayVideo.tsx +51 -0
- package/VideoPlayer/index.js +69 -0
- package/android/README.md +14 -0
- package/android/build/generated/source/buildConfig/debug/com/shakebug/BuildConfig.java +10 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +42 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +18 -0
- package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +6 -0
- package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +1 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/R.txt +47 -0
- package/android/build/intermediates/compiled_local_resources/debug/out/xml_imagepicker_provider_paths.xml.flat +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +12 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/BuildConfig.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/CustomMediaMetadataRetriever.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ImageMetadata.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ImagePickerProvider.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/Metadata.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/Options.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/RecordScreenModule$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/RecordScreenModule.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/Shakebug.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ShakebugPackage.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/Utility.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/Utils.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/VideoMetadata.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ViewShot$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ViewShot$2.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ViewShot$Formats.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ViewShot$Results.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ViewShot$ReusableByteArrayOutputStream.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/shakebug/ViewShot.class +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +49 -0
- package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +82 -0
- package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +42 -0
- package/android/build/intermediates/navigation_json/debug/navigation.json +1 -0
- package/android/build/intermediates/packaged_res/debug/values/values.xml +25 -0
- package/android/build/intermediates/packaged_res/debug/xml/imagepicker_provider_paths.xml +4 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/CustomMediaMetadataRetriever.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ImageMetadata.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ImagePickerProvider.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/Metadata.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/Options.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/RecordScreenModule$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/RecordScreenModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/Shakebug.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ShakebugPackage.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/Utility.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/Utils.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/VideoMetadata.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ViewShot$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ViewShot$2.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ViewShot$Formats.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ViewShot$Results.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ViewShot$ReusableByteArrayOutputStream.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/shakebug/ViewShot.class +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +48 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +97 -0
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build.gradle +235 -0
- package/android/src/main/AndroidManifest.xml +40 -0
- package/android/src/main/java/com/shakebug/AmazonFireDeviceConnectivityPoller.java +170 -0
- package/android/src/main/java/com/shakebug/BaseUtils.java +33 -0
- package/android/src/main/java/com/shakebug/BroadcastReceiverConnectivityReceiver.java +131 -0
- package/android/src/main/java/com/shakebug/ConnectivityReceiver.java +318 -0
- package/android/src/main/java/com/shakebug/CrashLoggerModule.java +48 -0
- package/android/src/main/java/com/shakebug/DateUtil.java +64 -0
- package/android/src/main/java/com/shakebug/DeviceType.java +18 -0
- package/android/src/main/java/com/shakebug/DeviceUtil.java +46 -0
- package/android/src/main/java/com/shakebug/DrawingView.java +90 -0
- package/android/src/main/java/com/shakebug/DrawingViewManager.java +38 -0
- package/android/src/main/java/com/shakebug/GetLocation.java +147 -0
- package/android/src/main/java/com/shakebug/ImageMetadata.java +42 -0
- package/android/src/main/java/com/shakebug/ImagePickerProvider.java +8 -0
- package/android/src/main/java/com/shakebug/Metadata.java +46 -0
- package/android/src/main/java/com/shakebug/NetInfoModule.java +79 -0
- package/android/src/main/java/com/shakebug/NetInfoUtils.java +50 -0
- package/android/src/main/java/com/shakebug/NetworkCallbackConnectivityReceiver.java +209 -0
- package/android/src/main/java/com/shakebug/Options.java +42 -0
- package/android/src/main/java/com/shakebug/RNDeviceModule.java +1036 -0
- package/android/src/main/java/com/shakebug/RNInstallReferrerClient.java +124 -0
- package/android/src/main/java/com/shakebug/RNLocalizeModule.java +79 -0
- package/android/src/main/java/com/shakebug/RNLocalizeModuleImpl.java +258 -0
- package/android/src/main/java/com/shakebug/ReactNativeGetLocationModule.java +95 -0
- package/android/src/main/java/com/shakebug/RecordScreenModule.java +202 -0
- package/android/src/main/java/com/shakebug/ScreenshotDetectorModule.java +63 -0
- package/android/src/main/java/com/shakebug/SettingsUtil.java +44 -0
- package/android/src/main/java/com/shakebug/Shakebug.java +181 -0
- package/android/src/main/java/com/shakebug/ShakebugPackage.java +75 -0
- package/android/src/main/java/com/shakebug/ShakebugSDKImagePickerModule.java +56 -0
- package/android/src/main/java/com/shakebug/ShakebugSDKImagePickerModuleImpl.java +230 -0
- package/android/src/main/java/com/shakebug/ShakebugSDKScreenShotModule.java +196 -0
- package/android/src/main/java/com/shakebug/SharedPreferencesModule.java +39 -0
- package/android/src/main/java/com/shakebug/UnitConverter.java +48 -0
- package/android/src/main/java/com/shakebug/Utility.java +29 -0
- package/android/src/main/java/com/shakebug/Utils.java +593 -0
- package/android/src/main/java/com/shakebug/VideoMetadata.java +91 -0
- package/android/src/main/java/com/shakebug/VideoPlayerModule.java +199 -0
- package/android/src/main/java/com/shakebug/VideoThumbnailModule.java +215 -0
- package/android/src/main/java/com/shakebug/VideoTrimModule.java +372 -0
- package/android/src/main/java/com/shakebug/ViewShot.java +627 -0
- package/android/src/main/java/com/shakebug/adapters/VideoTrimmerAdapter.java +54 -0
- package/android/src/main/java/com/shakebug/callback/SingleCallback.java +11 -0
- package/android/src/main/java/com/shakebug/interfaces/IVideoTrimmerView.java +5 -0
- package/android/src/main/java/com/shakebug/interfaces/VideoPlayerListner.java +5 -0
- package/android/src/main/java/com/shakebug/interfaces/VideoTrimListener.java +10 -0
- package/android/src/main/java/com/shakebug/resolver/DeviceIdResolver.java +87 -0
- package/android/src/main/java/com/shakebug/resolver/DeviceTypeResolver.java +94 -0
- package/android/src/main/java/com/shakebug/thread/BackgroundExecutor.java +246 -0
- package/android/src/main/java/com/shakebug/thread/UiThreadExecutor.java +120 -0
- package/android/src/main/java/com/shakebug/types/CellularGeneration.java +60 -0
- package/android/src/main/java/com/shakebug/types/ConnectionType.java +26 -0
- package/android/src/main/java/com/shakebug/utils/StorageUtil.java +139 -0
- package/android/src/main/java/com/shakebug/utils/VideoTrimmerUtil.java +89 -0
- package/android/src/main/java/com/shakebug/widgets/RangeSeekBarView.java +534 -0
- package/android/src/main/java/com/shakebug/widgets/SpacesItemDecoration2.java +32 -0
- package/android/src/main/java/com/shakebug/widgets/VideoPlayerView.java +429 -0
- package/android/src/main/java/com/shakebug/widgets/VideoTrimmerView.java +477 -0
- package/android/src/main/java/com/shakebug/widgets/ZVideoView.java +48 -0
- package/android/src/main/res/drawable/custom_progress.xml +16 -0
- package/android/src/main/res/drawable/custom_thumb.xml +4 -0
- package/android/src/main/res/drawable/ic_close_button.xml +10 -0
- package/android/src/main/res/drawable/ic_video_pause_black.png +0 -0
- package/android/src/main/res/drawable/ic_video_play_black.png +0 -0
- package/android/src/main/res/drawable/ic_video_thumb_handle.png +0 -0
- package/android/src/main/res/drawable/icon_seek_bar.png +0 -0
- package/android/src/main/res/layout/video_player_view.xml +121 -0
- package/android/src/main/res/layout/video_thumb_item_layout.xml +16 -0
- package/android/src/main/res/layout/video_trimmer_view.xml +148 -0
- package/android/src/main/res/values/colors.xml +17 -0
- package/android/src/main/res/values/strings.xml +14 -0
- package/android/src/main/res/xml/imagepicker_provider_paths.xml +4 -0
- package/ios/CammeraPermission/RNCameraPermission.h +16 -0
- package/ios/CammeraPermission/RNCameraPermission.m +46 -0
- package/ios/DeviceInfo/DeviceUID.h +14 -0
- package/ios/DeviceInfo/DeviceUID.m +202 -0
- package/ios/DeviceInfo/EnvironmentUtil.h +41 -0
- package/ios/DeviceInfo/EnvironmentUtil.m +56 -0
- package/ios/DeviceInfo/RNDeviceInfo.h +22 -0
- package/ios/DeviceInfo/RNDeviceInfo.m +918 -0
- package/ios/GetLocals/ShakebugSDKRNLocalize.h +21 -0
- package/ios/GetLocals/ShakebugSDKRNLocalize.m +296 -0
- package/ios/GetLocation/SettingsUtil.h +16 -0
- package/ios/GetLocation/SettingsUtil.m +21 -0
- package/ios/GetLocation/ShakebugSDKLocationModule.h +17 -0
- package/ios/GetLocation/ShakebugSDKLocationModule.m +218 -0
- package/ios/ImageOrVideoPicker/ShakebugSDKImagePickerManager.h +40 -0
- package/ios/ImageOrVideoPicker/ShakebugSDKImagePickerManager.m +588 -0
- package/ios/ImageOrVideoPicker/ShakebugSDKImagePickerUtils.h +26 -0
- package/ios/ImageOrVideoPicker/ShakebugSDKImagePickerUtils.m +194 -0
- package/ios/MicrophonePermissionManager.h +14 -0
- package/ios/MicrophonePermissionManager.m +35 -0
- package/ios/NetInfo/RNCConnectionState.h +42 -0
- package/ios/NetInfo/RNCConnectionState.m +119 -0
- package/ios/NetInfo/RNCConnectionStateWatcher.h +31 -0
- package/ios/NetInfo/RNCConnectionStateWatcher.m +136 -0
- package/ios/NetInfo/RNCNetInfo.h +13 -0
- package/ios/NetInfo/RNCNetInfo.m +269 -0
- package/ios/RecordScreen/ShakebugSDKRecordScreen.h +31 -0
- package/ios/RecordScreen/ShakebugSDKRecordScreen.m +309 -0
- package/ios/ScreenShot/ShakebugSDKRNViewShot.h +6 -0
- package/ios/ScreenShot/ShakebugSDKRNViewShot.m +186 -0
- package/ios/ScreenshotDetector/ScreenShotDetector.h +12 -0
- package/ios/ScreenshotDetector/ScreenShotDetector.m +37 -0
- package/ios/Senors/RNSensorsAccelerometer.h +22 -0
- package/ios/Senors/RNSensorsAccelerometer.m +162 -0
- package/ios/Senors/RNSensorsBarometer.h +22 -0
- package/ios/Senors/RNSensorsBarometer.m +141 -0
- package/ios/Senors/RNSensorsGravity.h +22 -0
- package/ios/Senors/RNSensorsGravity.m +165 -0
- package/ios/Senors/RNSensorsGyroscope.h +22 -0
- package/ios/Senors/RNSensorsGyroscope.m +160 -0
- package/ios/Senors/RNSensorsMagnetometer.h +22 -0
- package/ios/Senors/RNSensorsMagnetometer.m +163 -0
- package/ios/Senors/RNSensorsOrientation.h +22 -0
- package/ios/Senors/RNSensorsOrientation.m +189 -0
- package/ios/Senors/RNSensorsUtils.h +7 -0
- package/ios/Senors/RNSensorsUtils.m +9 -0
- package/ios/Shakebug.h +7 -0
- package/ios/Shakebug.m +16 -0
- package/ios/Shakebug.xcodeproj/project.pbxproj +872 -0
- package/ios/Shakebug.xcodeproj/xcshareddata/xcschemes/Shakebug.xcscheme +66 -0
- package/ios/Shakebug.xcworkspace/contents.xcworkspacedata +10 -0
- package/ios/Shakebug.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/SketchCanvas/DrawingView.h +18 -0
- package/ios/SketchCanvas/DrawingView.m +96 -0
- package/ios/SketchCanvas/DrawingViewManager.h +12 -0
- package/ios/SketchCanvas/DrawingViewManager.m +35 -0
- package/ios/Storage/SharedPreferencesModule.h +13 -0
- package/ios/Storage/SharedPreferencesModule.m +35 -0
- package/ios/Thumbnaill/VideoThumbnailManager.h +12 -0
- package/ios/Thumbnaill/VideoThumbnailManager.m +73 -0
- package/ios/TrimVideo/ShakebugSDKVideoTrim.swift +372 -0
- package/ios/TrimVideo/VideoTrim-Bridging-Header.h +10 -0
- package/ios/TrimVideo/VideoTrim.m +23 -0
- package/ios/TrimVideo/VideoTrimmer.swift +810 -0
- package/ios/TrimVideo/VideoTrimmerThumb.swift +119 -0
- package/ios/TrimVideo/VideoTrimmerViewController.swift +301 -0
- package/ios/VideoPlayer/VideoPlayerModule.h +14 -0
- package/ios/VideoPlayer/VideoPlayerModule.m +29 -0
- package/ios/VideoPlayer/VideoPlayerViewController.h +18 -0
- package/ios/VideoPlayer/VideoPlayerViewController.m +29 -0
- package/package.json +45 -0
- package/shakebug-react-native.podspec +50 -0
- package/src/APIs/AddIssue.js +70 -0
- package/src/APIs/EndSession.js +32 -0
- package/src/APIs/Event.js +39 -0
- package/src/APIs/MatchKey.js +40 -0
- package/src/APIs/StartSession.js +84 -0
- package/src/Assets/images/OpenSketch.png +0 -0
- package/src/Assets/images/Push.png +0 -0
- package/src/Assets/images/RemoveTextView.png +0 -0
- package/src/Assets/images/black.png +0 -0
- package/src/Assets/images/blue.png +0 -0
- package/src/Assets/images/borderdBlack.png +0 -0
- package/src/Assets/images/borderdBlue.png +0 -0
- package/src/Assets/images/borderdGreen.png +0 -0
- package/src/Assets/images/borderdRed.png +0 -0
- package/src/Assets/images/borderdYellow.png +0 -0
- package/src/Assets/images/clear.png +0 -0
- package/src/Assets/images/close.png +0 -0
- package/src/Assets/images/green.png +0 -0
- package/src/Assets/images/next.png +0 -0
- package/src/Assets/images/play.png +0 -0
- package/src/Assets/images/red.png +0 -0
- package/src/Assets/images/shake.png +0 -0
- package/src/Assets/images/shakebugLogo.png +0 -0
- package/src/Assets/images/stopButton.png +0 -0
- package/src/Assets/images/text_icon.png +0 -0
- package/src/Assets/images/yellow.png +0 -0
- package/src/Componanats/CustomAlert.js +80 -0
- package/src/Componanats/ErrorHandler.js +80 -0
- package/src/Componanats/GlobalStateContext.js +22 -0
- package/src/Componanats/KeyboardAvoidingWrapper.js +43 -0
- package/src/Componanats/NavigationContext.js +42 -0
- package/src/Componanats/ShakeFunction.js +562 -0
- package/src/Componanats/localization.js +482 -0
- package/src/Screens/AddDetailsScreen.js +462 -0
- package/src/Screens/FirstScreen.js +629 -0
- package/src/Screens/Shakebug.js +487 -0
- package/src/Screens/StrockView.js +20 -0
- package/src/Screens/TrimVideoScreen.js +81 -0
- package/src/Screens/TutorialScreen.js +36 -0
- package/src/index.tsx +117 -0
- package/trimVideo/src/index.tsx +141 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#import "ShakebugSDKRNViewShot.h"
|
|
2
|
+
#import <AVFoundation/AVFoundation.h>
|
|
3
|
+
#import <React/RCTLog.h>
|
|
4
|
+
#import <React/UIView+React.h>
|
|
5
|
+
#import <React/RCTUtils.h>
|
|
6
|
+
#import <React/RCTConvert.h>
|
|
7
|
+
#import <React/RCTScrollView.h>
|
|
8
|
+
#import <React/RCTUIManager.h>
|
|
9
|
+
#if __has_include(<React/RCTUIManagerUtils.h>)
|
|
10
|
+
#import <React/RCTUIManagerUtils.h>
|
|
11
|
+
#endif
|
|
12
|
+
#import <React/RCTBridge.h>
|
|
13
|
+
|
|
14
|
+
@implementation ShakebugSDKRNViewShot
|
|
15
|
+
|
|
16
|
+
RCT_EXPORT_MODULE()
|
|
17
|
+
|
|
18
|
+
@synthesize bridge = _bridge;
|
|
19
|
+
|
|
20
|
+
- (dispatch_queue_t)methodQueue
|
|
21
|
+
{
|
|
22
|
+
return RCTGetUIManagerQueue();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
RCT_EXPORT_METHOD(captureScreen: (NSDictionary *)options
|
|
26
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
27
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
28
|
+
{
|
|
29
|
+
[self captureRef: [NSNumber numberWithInt:-1] withOptions:options resolve:resolve reject:reject];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
RCT_EXPORT_METHOD(releaseCapture:(nonnull NSString *)uri)
|
|
33
|
+
{
|
|
34
|
+
NSString *directory = [NSTemporaryDirectory() stringByAppendingPathComponent:@"ReactNative"];
|
|
35
|
+
// Ensure it's a valid file in the tmp directory
|
|
36
|
+
if ([uri hasPrefix:directory] && ![uri isEqualToString:directory]) {
|
|
37
|
+
NSFileManager *fileManager = [NSFileManager new];
|
|
38
|
+
if ([fileManager fileExistsAtPath:uri]) {
|
|
39
|
+
[fileManager removeItemAtPath:uri error:NULL];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
RCT_EXPORT_METHOD(captureRef:(nonnull NSNumber *)target
|
|
45
|
+
withOptions:(NSDictionary *)options
|
|
46
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
47
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
48
|
+
{
|
|
49
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
|
50
|
+
|
|
51
|
+
// Get view
|
|
52
|
+
UIView *view;
|
|
53
|
+
|
|
54
|
+
if ([target intValue] == -1) {
|
|
55
|
+
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
|
|
56
|
+
view = window;
|
|
57
|
+
} else {
|
|
58
|
+
view = viewRegistry[target];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!view) {
|
|
62
|
+
reject(RCTErrorUnspecified, [NSString stringWithFormat:@"No view found with reactTag: %@", target], nil);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Get options
|
|
67
|
+
CGSize size = [RCTConvert CGSize:options];
|
|
68
|
+
NSString *format = [RCTConvert NSString:options[@"format"]];
|
|
69
|
+
NSString *result = [RCTConvert NSString:options[@"result"]];
|
|
70
|
+
BOOL renderInContext = [RCTConvert BOOL:options[@"useRenderInContext"]];
|
|
71
|
+
BOOL snapshotContentContainer = [RCTConvert BOOL:options[@"snapshotContentContainer"]];
|
|
72
|
+
|
|
73
|
+
// Capture image
|
|
74
|
+
BOOL success;
|
|
75
|
+
|
|
76
|
+
UIView* rendered;
|
|
77
|
+
UIScrollView* scrollView;
|
|
78
|
+
if (snapshotContentContainer) {
|
|
79
|
+
if (![view isKindOfClass:[RCTScrollView class]]) {
|
|
80
|
+
reject(RCTErrorUnspecified, [NSString stringWithFormat:@"snapshotContentContainer can only be used on a RCTScrollView. instead got: %@", view], nil);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
RCTScrollView* rctScrollView = view;
|
|
84
|
+
scrollView = rctScrollView.scrollView;
|
|
85
|
+
rendered = scrollView;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
rendered = view;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (size.width < 0.1 || size.height < 0.1) {
|
|
92
|
+
size = snapshotContentContainer ? scrollView.contentSize : view.bounds.size;
|
|
93
|
+
}
|
|
94
|
+
if (size.width < 0.1 || size.height < 0.1) {
|
|
95
|
+
reject(RCTErrorUnspecified, [NSString stringWithFormat:@"The content size must not be zero or negative. Got: (%g, %g)", size.width, size.height], nil);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
CGPoint savedContentOffset;
|
|
100
|
+
CGRect savedFrame;
|
|
101
|
+
if (snapshotContentContainer) {
|
|
102
|
+
// Save scroll & frame and set it temporarily to the full content size
|
|
103
|
+
savedContentOffset = scrollView.contentOffset;
|
|
104
|
+
savedFrame = scrollView.frame;
|
|
105
|
+
scrollView.contentOffset = CGPointZero;
|
|
106
|
+
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
|
|
110
|
+
|
|
111
|
+
if (renderInContext) {
|
|
112
|
+
// this comes with some trade-offs such as inability to capture gradients or scrollview's content in full but it works for large views
|
|
113
|
+
[rendered.layer renderInContext: UIGraphicsGetCurrentContext()];
|
|
114
|
+
success = YES;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// this doesn't work for large views and reports incorrect success even though the image is blank
|
|
118
|
+
success = [rendered drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
|
|
119
|
+
}
|
|
120
|
+
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
|
121
|
+
UIGraphicsEndImageContext();
|
|
122
|
+
|
|
123
|
+
if (snapshotContentContainer) {
|
|
124
|
+
// Restore scroll & frame
|
|
125
|
+
scrollView.contentOffset = savedContentOffset;
|
|
126
|
+
scrollView.frame = savedFrame;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (!success) {
|
|
130
|
+
reject(RCTErrorUnspecified, @"The view cannot be captured. drawViewHierarchyInRect was not successful. This is a potential technical or security limitation.", nil);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (!image) {
|
|
135
|
+
reject(RCTErrorUnspecified, @"Failed to capture view snapshot. UIGraphicsGetImageFromCurrentImageContext() returned nil!", nil);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Convert image to data (on a background thread)
|
|
140
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
141
|
+
|
|
142
|
+
NSData *data;
|
|
143
|
+
if ([format isEqualToString:@"jpg"]) {
|
|
144
|
+
CGFloat quality = [RCTConvert CGFloat:options[@"quality"]];
|
|
145
|
+
data = UIImageJPEGRepresentation(image, quality);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
data = UIImagePNGRepresentation(image);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
NSError *error = nil;
|
|
152
|
+
NSString *res = nil;
|
|
153
|
+
if ([result isEqualToString:@"base64"]) {
|
|
154
|
+
// Return as a base64 raw string
|
|
155
|
+
res = [data base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];
|
|
156
|
+
}
|
|
157
|
+
else if ([result isEqualToString:@"data-uri"]) {
|
|
158
|
+
// Return as a base64 data uri string
|
|
159
|
+
NSString *base64 = [data base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];
|
|
160
|
+
NSString *imageFormat = ([format isEqualToString:@"jpg"]) ? @"jpeg" : format;
|
|
161
|
+
res = [NSString stringWithFormat:@"data:image/%@;base64,%@", imageFormat, base64];
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
// Save to a temp file
|
|
165
|
+
NSString *path = RCTTempFilePath(format, &error);
|
|
166
|
+
if (path && !error) {
|
|
167
|
+
if ([data writeToFile:path options:(NSDataWritingOptions)0 error:&error]) {
|
|
168
|
+
res = path;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (res && !error) {
|
|
174
|
+
resolve(res);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// If we reached here, something went wrong
|
|
179
|
+
if (error) reject(RCTErrorUnspecified, error.localizedDescription, error);
|
|
180
|
+
else reject(RCTErrorUnspecified, @"viewshot unknown error", nil);
|
|
181
|
+
});
|
|
182
|
+
}];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
@end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ScreenShotDetector.h
|
|
3
|
+
// TestApp
|
|
4
|
+
//
|
|
5
|
+
// Created by ideveloper2 on 17/05/24.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <React/RCTEventEmitter.h>
|
|
9
|
+
|
|
10
|
+
@interface ShakebugSDKScreenShotDetector : RCTEventEmitter <RCTBridgeModule>
|
|
11
|
+
- (void)sendScreenShotEvent:(NSDictionary *)eventData;
|
|
12
|
+
@end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ScreenShotDetector.m
|
|
3
|
+
// TestApp
|
|
4
|
+
//
|
|
5
|
+
// Created by ideveloper2 on 17/05/24.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import "ScreenShotDetector.h"
|
|
9
|
+
|
|
10
|
+
@implementation ShakebugSDKScreenShotDetector
|
|
11
|
+
|
|
12
|
+
RCT_EXPORT_MODULE();
|
|
13
|
+
|
|
14
|
+
- (void)startObserving {
|
|
15
|
+
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleScreenShot:) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
- (void)stopObserving {
|
|
19
|
+
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
- (NSArray<NSString *> *)supportedEvents {
|
|
23
|
+
return @[@"ScreenshotTaken"];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
- (void)handleScreenShot:(NSNotification *)notification {
|
|
27
|
+
NSDictionary *eventData = @{@"timestamp": @([[NSDate date] timeIntervalSince1970])};
|
|
28
|
+
[self sendScreenShotEvent:eventData];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
- (void)sendScreenShotEvent:(NSDictionary *)eventData {
|
|
32
|
+
[self sendEventWithName:@"ScreenshotTaken" body:eventData];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@end
|
|
36
|
+
|
|
37
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Inspired by https://github.com/pwmckenna/react-native-motion-manager
|
|
2
|
+
|
|
3
|
+
#import <React/RCTBridgeModule.h>
|
|
4
|
+
#import <CoreMotion/CoreMotion.h>
|
|
5
|
+
#import <React/RCTEventEmitter.h>
|
|
6
|
+
|
|
7
|
+
@interface ShakebugSDKRNSensorsAccelerometer : RCTEventEmitter <RCTBridgeModule> {
|
|
8
|
+
CMMotionManager *_motionManager;
|
|
9
|
+
int logLevel;
|
|
10
|
+
bool hasListeners;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
- (void) isAvailableWithResolver:(RCTPromiseResolveBlock) resolve
|
|
14
|
+
rejecter:(RCTPromiseRejectBlock) reject;
|
|
15
|
+
- (void) setUpdateInterval:(double) interval;
|
|
16
|
+
- (void) getUpdateInterval:(RCTResponseSenderBlock) cb;
|
|
17
|
+
- (void) setLogLevel:(int) level;
|
|
18
|
+
- (void) getData:(RCTResponseSenderBlock) cb;
|
|
19
|
+
- (void) startUpdates;
|
|
20
|
+
- (void) stopUpdates;
|
|
21
|
+
|
|
22
|
+
@end
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// Accelerometer.m
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
#import <React/RCTBridge.h>
|
|
5
|
+
#import <React/RCTEventDispatcher.h>
|
|
6
|
+
#import "RNSensorsAccelerometer.h"
|
|
7
|
+
#import "RNSensorsUtils.h"
|
|
8
|
+
|
|
9
|
+
@implementation ShakebugSDKRNSensorsAccelerometer
|
|
10
|
+
|
|
11
|
+
@synthesize bridge = _bridge;
|
|
12
|
+
|
|
13
|
+
RCT_EXPORT_MODULE();
|
|
14
|
+
|
|
15
|
+
- (id) init {
|
|
16
|
+
self = [super init];
|
|
17
|
+
NSLog(@"ShakebugSDKRNSensorsAccelerometer");
|
|
18
|
+
|
|
19
|
+
if (self) {
|
|
20
|
+
self->_motionManager = [[CMMotionManager alloc] init];
|
|
21
|
+
self->logLevel = 0;
|
|
22
|
+
}
|
|
23
|
+
return self;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
+ (BOOL)requiresMainQueueSetup
|
|
27
|
+
{
|
|
28
|
+
return NO;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
- (NSArray<NSString *> *)supportedEvents
|
|
32
|
+
{
|
|
33
|
+
return @[@"ShakebugSDKRNSensorsAccelerometer"];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
RCT_REMAP_METHOD(isAvailable,
|
|
37
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
38
|
+
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
39
|
+
return [self isAvailableWithResolver:resolve
|
|
40
|
+
rejecter:reject];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
- (void) isAvailableWithResolver:(RCTPromiseResolveBlock) resolve
|
|
44
|
+
rejecter:(RCTPromiseRejectBlock) reject {
|
|
45
|
+
if([self->_motionManager isAccelerometerAvailable])
|
|
46
|
+
{
|
|
47
|
+
/* Start the accelerometer if it is not active already */
|
|
48
|
+
if([self->_motionManager isAccelerometerActive] == NO)
|
|
49
|
+
{
|
|
50
|
+
resolve(@YES);
|
|
51
|
+
} else {
|
|
52
|
+
reject(@"-1", @"Accelerometer is not active", nil);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else
|
|
56
|
+
{
|
|
57
|
+
reject(@"-1", @"Accelerometer is not available", nil);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
RCT_EXPORT_METHOD(setUpdateInterval:(double) interval) {
|
|
62
|
+
if (self->logLevel > 0) {
|
|
63
|
+
NSLog(@"setUpdateInterval: %f", interval);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
double intervalInSeconds = interval / 1000;
|
|
67
|
+
|
|
68
|
+
[self->_motionManager setAccelerometerUpdateInterval:intervalInSeconds];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
RCT_EXPORT_METHOD(setLogLevel:(int) level) {
|
|
72
|
+
if (level > 0) {
|
|
73
|
+
NSLog(@"setLogLevel: %d", level);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
self->logLevel = level;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
RCT_EXPORT_METHOD(getUpdateInterval:(RCTResponseSenderBlock) cb) {
|
|
80
|
+
double interval = self->_motionManager.accelerometerUpdateInterval;
|
|
81
|
+
|
|
82
|
+
if (self->logLevel > 0) {
|
|
83
|
+
NSLog(@"getUpdateInterval: %f", interval);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
cb(@[[NSNull null], [NSNumber numberWithDouble:interval]]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
RCT_EXPORT_METHOD(getData:(RCTResponseSenderBlock) cb) {
|
|
90
|
+
double x = self->_motionManager.accelerometerData.acceleration.x;
|
|
91
|
+
double y = self->_motionManager.accelerometerData.acceleration.y;
|
|
92
|
+
double z = self->_motionManager.accelerometerData.acceleration.z;
|
|
93
|
+
double timestamp = [ShakebugSDKRNSensorsUtils sensorTimestampToEpochMilliseconds:self->_motionManager.accelerometerData.timestamp];
|
|
94
|
+
|
|
95
|
+
if (self->logLevel > 0) {
|
|
96
|
+
NSLog(@"getData: %f, %f, %f, %f", x, y, z, timestamp);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
cb(@[[NSNull null], @{
|
|
100
|
+
@"x" : [NSNumber numberWithDouble:x],
|
|
101
|
+
@"y" : [NSNumber numberWithDouble:y],
|
|
102
|
+
@"z" : [NSNumber numberWithDouble:z],
|
|
103
|
+
@"timestamp" : [NSNumber numberWithDouble:timestamp]
|
|
104
|
+
}]
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
RCT_EXPORT_METHOD(startUpdates) {
|
|
109
|
+
if (self->logLevel > 0) {
|
|
110
|
+
NSLog(@"startUpdates/startAccelerometerUpdates");
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
[self->_motionManager startAccelerometerUpdates];
|
|
114
|
+
|
|
115
|
+
/* Receive the accelerometer data on this block */
|
|
116
|
+
[self->_motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue]
|
|
117
|
+
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
|
|
118
|
+
{
|
|
119
|
+
double x = accelerometerData.acceleration.x;
|
|
120
|
+
double y = accelerometerData.acceleration.y;
|
|
121
|
+
double z = accelerometerData.acceleration.z;
|
|
122
|
+
double timestamp = [ShakebugSDKRNSensorsUtils sensorTimestampToEpochMilliseconds:accelerometerData.timestamp];
|
|
123
|
+
|
|
124
|
+
if (self->logLevel > 1) {
|
|
125
|
+
NSLog(@"Updated accelerometer values: %f, %f, %f, %f", x, y, z, timestamp);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
[self sendEventWithName:@"ShakebugSDKRNSensorsAccelerometer" body:@{
|
|
129
|
+
@"x" : [NSNumber numberWithDouble:x],
|
|
130
|
+
@"y" : [NSNumber numberWithDouble:y],
|
|
131
|
+
@"z" : [NSNumber numberWithDouble:z],
|
|
132
|
+
@"timestamp" : [NSNumber numberWithDouble:timestamp]
|
|
133
|
+
}];
|
|
134
|
+
}];
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
RCT_EXPORT_METHOD(stopUpdates) {
|
|
139
|
+
if(self->logLevel > 0) {
|
|
140
|
+
NSLog(@"stopUpdates");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
[self->_motionManager stopAccelerometerUpdates];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Will be called when this module's first listener is added.
|
|
147
|
+
-(void)startObserving {
|
|
148
|
+
hasListeners = YES;
|
|
149
|
+
// Set up any upstream listeners or background tasks as necessary
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Will be called when this module's last listener is removed, or on dealloc.
|
|
153
|
+
-(void)stopObserving {
|
|
154
|
+
// Remove upstream listeners, stop unnecessary background tasks
|
|
155
|
+
hasListeners = NO;
|
|
156
|
+
// If we no longer have listeners registered we should also probably also stop the sensor since the sensor events are essentially being dropped.
|
|
157
|
+
if (self->_motionManager) {
|
|
158
|
+
[self stopUpdates];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Inspired by https://github.com/pwmckenna/react-native-motion-manager
|
|
2
|
+
|
|
3
|
+
#import <React/RCTBridgeModule.h>
|
|
4
|
+
#import <CoreMotion/CoreMotion.h>
|
|
5
|
+
#import <React/RCTEventEmitter.h>
|
|
6
|
+
|
|
7
|
+
@interface ShakebugSDKRNSensorsBarometer : RCTEventEmitter <RCTBridgeModule> {
|
|
8
|
+
CMAltimeter *_altimeter;
|
|
9
|
+
int logLevel;
|
|
10
|
+
bool hasListeners;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
- (void) isAvailableWithResolver:(RCTPromiseResolveBlock) resolve
|
|
14
|
+
rejecter:(RCTPromiseRejectBlock) reject;
|
|
15
|
+
- (void) setUpdateInterval:(double) interval;
|
|
16
|
+
- (void) getUpdateInterval:(RCTResponseSenderBlock) cb;
|
|
17
|
+
- (void) setLogLevel:(int) level;
|
|
18
|
+
- (void) getData:(RCTResponseSenderBlock) cb;
|
|
19
|
+
- (void) startUpdates;
|
|
20
|
+
- (void) stopUpdates;
|
|
21
|
+
|
|
22
|
+
@end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// Barometer.m
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
#import "RNSensorsBarometer.h"
|
|
5
|
+
#import <React/RCTBridge.h>
|
|
6
|
+
#import <React/RCTEventDispatcher.h>
|
|
7
|
+
#import <CoreMotion/CoreMotion.h>
|
|
8
|
+
#import "RNSensorsUtils.h"
|
|
9
|
+
|
|
10
|
+
@implementation ShakebugSDKRNSensorsBarometer
|
|
11
|
+
|
|
12
|
+
@synthesize bridge = _bridge;
|
|
13
|
+
|
|
14
|
+
RCT_EXPORT_MODULE();
|
|
15
|
+
|
|
16
|
+
- (id) init {
|
|
17
|
+
self = [super init];
|
|
18
|
+
NSLog(@"ShakebugSDKRNSensorsBarometer");
|
|
19
|
+
|
|
20
|
+
if (self) {
|
|
21
|
+
self->_altimeter = [[CMAltimeter alloc] init];
|
|
22
|
+
self->logLevel = 0;
|
|
23
|
+
}
|
|
24
|
+
return self;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
- (NSArray<NSString *> *)supportedEvents
|
|
28
|
+
{
|
|
29
|
+
return @[@"ShakebugSDKRNSensorsBarometer"];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
+ (BOOL)requiresMainQueueSetup
|
|
33
|
+
{
|
|
34
|
+
return NO;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
RCT_REMAP_METHOD(isAvailable,
|
|
38
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
39
|
+
rejecter:(RCTPromiseRejectBlock)reject) {
|
|
40
|
+
return [self isAvailableWithResolver:resolve
|
|
41
|
+
rejecter:reject];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
- (void) isAvailableWithResolver:(RCTPromiseResolveBlock) resolve
|
|
45
|
+
rejecter:(RCTPromiseRejectBlock) reject {
|
|
46
|
+
|
|
47
|
+
if ([CMAltimeter isRelativeAltitudeAvailable])
|
|
48
|
+
{
|
|
49
|
+
resolve(@YES);
|
|
50
|
+
}
|
|
51
|
+
else
|
|
52
|
+
{
|
|
53
|
+
reject(@"-1", @"Barometer is not available", nil);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
RCT_EXPORT_METHOD(setUpdateInterval:(double) interval) {
|
|
58
|
+
NSLog(@"Can not set update interval for barometer, doing nothing");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
RCT_EXPORT_METHOD(setLogLevel:(int) level) {
|
|
62
|
+
if (level > 0) {
|
|
63
|
+
NSLog(@"setLogLevel: %f", level);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
self->logLevel = level;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
RCT_EXPORT_METHOD(getUpdateInterval:(RCTResponseSenderBlock) cb) {
|
|
70
|
+
NSLog(@"getUpdateInterval is not meaningul for a barometer sensor");
|
|
71
|
+
cb(@[[NSNull null], [NSNumber numberWithDouble:0.0]]);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
RCT_EXPORT_METHOD(getData:(RCTResponseSenderBlock) cb) {
|
|
75
|
+
CMAltitudeData * _Nullable altitudeData = self->_altimeter;
|
|
76
|
+
if (altitudeData) {
|
|
77
|
+
if (self->logLevel > 0) {
|
|
78
|
+
NSLog(@"getData: %f, %f, %f", altitudeData.pressure.doubleValue, altitudeData.timestamp, [ShakebugSDKRNSensorsUtils sensorTimestampToEpochMilliseconds:altitudeData.timestamp]);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
cb(@[[NSNull null], @{
|
|
82
|
+
@"pressure" : @(altitudeData.pressure.doubleValue * 10.0),
|
|
83
|
+
@"timestamp" : [NSNumber numberWithDouble:[ShakebugSDKRNSensorsUtils sensorTimestampToEpochMilliseconds:altitudeData.timestamp]]
|
|
84
|
+
}]
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
cb(@[[NSNull null], @{}]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
RCT_EXPORT_METHOD(startUpdates) {
|
|
94
|
+
if (self->logLevel > 0) {
|
|
95
|
+
NSLog(@"startUpdates/startRelativeAltitudeUpdates");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
[self->_altimeter startRelativeAltitudeUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAltitudeData * _Nullable altitudeData, NSError * _Nullable error) {
|
|
99
|
+
if (error) {
|
|
100
|
+
NSLog(@"error while getting sensor data");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (altitudeData) {
|
|
104
|
+
if (self->logLevel > 1) {
|
|
105
|
+
NSLog(@"Updated altitue value: %f, %f, %f", altitudeData.pressure.doubleValue, altitudeData.timestamp, [ShakebugSDKRNSensorsUtils sensorTimestampToEpochMilliseconds:altitudeData.timestamp]);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
[self sendEventWithName:@"ShakebugSDKRNSensorsBarometer" body:@{
|
|
109
|
+
@"pressure" : @(altitudeData.pressure.doubleValue * 10.0),
|
|
110
|
+
@"timestamp" : [NSNumber numberWithDouble:[ShakebugSDKRNSensorsUtils sensorTimestampToEpochMilliseconds:altitudeData.timestamp]]
|
|
111
|
+
}];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
}];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
RCT_EXPORT_METHOD(stopUpdates) {
|
|
118
|
+
if(self->logLevel > 0) {
|
|
119
|
+
NSLog(@"stopUpdates");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
[self->_altimeter stopRelativeAltitudeUpdates];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Will be called when this module's first listener is added.
|
|
126
|
+
-(void)startObserving {
|
|
127
|
+
hasListeners = YES;
|
|
128
|
+
// Set up any upstream listeners or background tasks as necessary
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Will be called when this module's last listener is removed, or on dealloc.
|
|
132
|
+
-(void)stopObserving {
|
|
133
|
+
// Remove upstream listeners, stop unnecessary background tasks
|
|
134
|
+
hasListeners = NO;
|
|
135
|
+
// If we no longer have listeners registered we should also probably also stop the sensor since the sensor events are essentially being dropped.
|
|
136
|
+
if (self->_altimeter) {
|
|
137
|
+
[self stopUpdates];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Inspired by https://github.com/pwmckenna/react-native-motion-manager
|
|
2
|
+
|
|
3
|
+
#import <React/RCTBridgeModule.h>
|
|
4
|
+
#import <CoreMotion/CoreMotion.h>
|
|
5
|
+
#import <React/RCTEventEmitter.h>
|
|
6
|
+
|
|
7
|
+
@interface ShakebugSDKRNSensorsGravity : RCTEventEmitter <RCTBridgeModule> {
|
|
8
|
+
CMMotionManager *_motionManager;
|
|
9
|
+
int logLevel;
|
|
10
|
+
bool hasListeners;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
- (void) isAvailableWithResolver:(RCTPromiseResolveBlock) resolve
|
|
14
|
+
rejecter:(RCTPromiseRejectBlock) reject;
|
|
15
|
+
- (void) setUpdateInterval:(double) interval;
|
|
16
|
+
- (void) getUpdateInterval:(RCTResponseSenderBlock) cb;
|
|
17
|
+
- (void) setLogLevel:(int) level;
|
|
18
|
+
- (void) getData:(RCTResponseSenderBlock) cb;
|
|
19
|
+
- (void) startUpdates;
|
|
20
|
+
- (void) stopUpdates;
|
|
21
|
+
|
|
22
|
+
@end
|