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,308 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import React, { Component } from "react";
|
|
3
|
+
import { View, Platform, findNodeHandle, StyleProp } from "react-native";
|
|
4
|
+
import RNViewShot from "./RNViewShot";
|
|
5
|
+
import type { ViewStyleProp } from "react-native/Libraries/StyleSheet/StyleSheet";
|
|
6
|
+
import type { LayoutEvent } from "react-native/Libraries/Types/CoreEventTypes";
|
|
7
|
+
|
|
8
|
+
const neverEndingPromise = new Promise(() => {});
|
|
9
|
+
|
|
10
|
+
type Options = {
|
|
11
|
+
width?: number,
|
|
12
|
+
height?: number,
|
|
13
|
+
format: "png" | "jpg" | "webm" | "raw",
|
|
14
|
+
quality: number,
|
|
15
|
+
result: "tmpfile" | "base64" | "data-uri" | "zip-base64",
|
|
16
|
+
snapshotContentContainer: boolean,
|
|
17
|
+
handleGLSurfaceViewOnAndroid: boolean,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
if (!RNViewShot) {
|
|
21
|
+
console.warn(
|
|
22
|
+
"react-native-view-shot: NativeModules.RNViewShot is undefined. Make sure the library is linked on the native side."
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const acceptedFormats = ["png", "jpg"].concat(
|
|
27
|
+
Platform.OS === "android" ? ["webm", "raw"] : []
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const acceptedResults = ["tmpfile", "base64", "data-uri"].concat(
|
|
31
|
+
Platform.OS === "android" ? ["zip-base64"] : []
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const defaultOptions = {
|
|
35
|
+
format: "png",
|
|
36
|
+
quality: 1,
|
|
37
|
+
result: "tmpfile",
|
|
38
|
+
snapshotContentContainer: false,
|
|
39
|
+
handleGLSurfaceViewOnAndroid: false,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// validate and coerce options
|
|
43
|
+
function validateOptions(input: ?$Shape<Options>): {
|
|
44
|
+
options: Options,
|
|
45
|
+
errors: Array<string>,
|
|
46
|
+
} {
|
|
47
|
+
const options: Options = {
|
|
48
|
+
...defaultOptions,
|
|
49
|
+
...input,
|
|
50
|
+
};
|
|
51
|
+
const errors = [];
|
|
52
|
+
if (
|
|
53
|
+
"width" in options &&
|
|
54
|
+
(typeof options.width !== "number" || options.width <= 0)
|
|
55
|
+
) {
|
|
56
|
+
errors.push("option width should be a positive number");
|
|
57
|
+
delete options.width;
|
|
58
|
+
}
|
|
59
|
+
if (
|
|
60
|
+
"height" in options &&
|
|
61
|
+
(typeof options.height !== "number" || options.height <= 0)
|
|
62
|
+
) {
|
|
63
|
+
errors.push("option height should be a positive number");
|
|
64
|
+
delete options.height;
|
|
65
|
+
}
|
|
66
|
+
if (
|
|
67
|
+
typeof options.quality !== "number" ||
|
|
68
|
+
options.quality < 0 ||
|
|
69
|
+
options.quality > 1
|
|
70
|
+
) {
|
|
71
|
+
errors.push("option quality should be a number between 0.0 and 1.0");
|
|
72
|
+
options.quality = defaultOptions.quality;
|
|
73
|
+
}
|
|
74
|
+
if (typeof options.snapshotContentContainer !== "boolean") {
|
|
75
|
+
errors.push("option snapshotContentContainer should be a boolean");
|
|
76
|
+
}
|
|
77
|
+
if (typeof options.handleGLSurfaceViewOnAndroid !== "boolean") {
|
|
78
|
+
errors.push("option handleGLSurfaceViewOnAndroid should be a boolean");
|
|
79
|
+
}
|
|
80
|
+
if (acceptedFormats.indexOf(options.format) === -1) {
|
|
81
|
+
options.format = defaultOptions.format;
|
|
82
|
+
errors.push(
|
|
83
|
+
"option format '" +
|
|
84
|
+
options.format +
|
|
85
|
+
"' is not in valid formats: " +
|
|
86
|
+
acceptedFormats.join(" | ")
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
if (acceptedResults.indexOf(options.result) === -1) {
|
|
90
|
+
options.result = defaultOptions.result;
|
|
91
|
+
errors.push(
|
|
92
|
+
"option result '" +
|
|
93
|
+
options.result +
|
|
94
|
+
"' is not in valid formats: " +
|
|
95
|
+
acceptedResults.join(" | ")
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
return { options, errors };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function ensureModuleIsLoaded() {
|
|
102
|
+
if (!RNViewShot) {
|
|
103
|
+
throw new Error(
|
|
104
|
+
"react-native-view-shot: NativeModules.RNViewShot is undefined. Make sure the library is linked on the native side."
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function captureRef<T: React$ElementType>(
|
|
110
|
+
view: number | ?View | React$Ref<T>,
|
|
111
|
+
optionsObject?: Object
|
|
112
|
+
): Promise<string> {
|
|
113
|
+
ensureModuleIsLoaded();
|
|
114
|
+
if (
|
|
115
|
+
view &&
|
|
116
|
+
typeof view === "object" &&
|
|
117
|
+
"current" in view &&
|
|
118
|
+
// $FlowFixMe view is a ref
|
|
119
|
+
view.current
|
|
120
|
+
) {
|
|
121
|
+
// $FlowFixMe view is a ref
|
|
122
|
+
view = view.current;
|
|
123
|
+
if (!view) {
|
|
124
|
+
return Promise.reject(new Error("ref.current is null"));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (typeof view !== "number") {
|
|
128
|
+
const node = findNodeHandle(view);
|
|
129
|
+
if (!node) {
|
|
130
|
+
return Promise.reject(
|
|
131
|
+
new Error("findNodeHandle failed to resolve view=" + String(view))
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
view = node;
|
|
135
|
+
}
|
|
136
|
+
const { options, errors } = validateOptions(optionsObject);
|
|
137
|
+
if (__DEV__ && errors.length > 0) {
|
|
138
|
+
console.warn(
|
|
139
|
+
"react-native-view-shot: bad options:\n" +
|
|
140
|
+
errors.map((e) => `- ${e}`).join("\n")
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
return RNViewShot.captureRef(view, options);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function releaseCapture(uri: string): void {
|
|
147
|
+
if (typeof uri !== "string") {
|
|
148
|
+
if (__DEV__) {
|
|
149
|
+
console.warn("Invalid argument to releaseCapture. Got: " + uri);
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
RNViewShot.releaseCapture(uri);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function captureScreen(optionsObject?: Options): Promise<string> {
|
|
157
|
+
ensureModuleIsLoaded();
|
|
158
|
+
const { options, errors } = validateOptions(optionsObject);
|
|
159
|
+
if (__DEV__ && errors.length > 0) {
|
|
160
|
+
console.warn(
|
|
161
|
+
"react-native-view-shot: bad options:\n" +
|
|
162
|
+
errors.map((e) => `- ${e}`).join("\n")
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
return RNViewShot.captureScreen(options);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
type Props = {
|
|
169
|
+
options?: Object,
|
|
170
|
+
captureMode?: "mount" | "continuous" | "update",
|
|
171
|
+
children: React$Node,
|
|
172
|
+
onLayout?: (e: *) => void,
|
|
173
|
+
onCapture?: (uri: string) => void,
|
|
174
|
+
onCaptureFailure?: (e: Error) => void,
|
|
175
|
+
style?: StyleProp<ViewStyleProp>,
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
function checkCompatibleProps(props: Props) {
|
|
179
|
+
if (!props.captureMode && props.onCapture) {
|
|
180
|
+
// in that case, it's authorized if you call capture() yourself
|
|
181
|
+
} else if (props.captureMode && !props.onCapture) {
|
|
182
|
+
console.warn(
|
|
183
|
+
"react-native-view-shot: captureMode prop is defined but onCapture prop callback is missing"
|
|
184
|
+
);
|
|
185
|
+
} else if (
|
|
186
|
+
(props.captureMode === "continuous" || props.captureMode === "update") &&
|
|
187
|
+
props.options &&
|
|
188
|
+
props.options.result &&
|
|
189
|
+
props.options.result !== "tmpfile"
|
|
190
|
+
) {
|
|
191
|
+
console.warn(
|
|
192
|
+
"react-native-view-shot: result=tmpfile is recommended for captureMode=" +
|
|
193
|
+
props.captureMode
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export default class ViewShot extends Component<Props> {
|
|
199
|
+
static captureRef = captureRef;
|
|
200
|
+
static releaseCapture = releaseCapture;
|
|
201
|
+
|
|
202
|
+
root: ?View;
|
|
203
|
+
|
|
204
|
+
_raf: *;
|
|
205
|
+
lastCapturedURI: ?string;
|
|
206
|
+
|
|
207
|
+
resolveFirstLayout: (layout: Object) => void;
|
|
208
|
+
firstLayoutPromise: Promise<Object> = new Promise((resolve) => {
|
|
209
|
+
this.resolveFirstLayout = resolve;
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
capture = (): Promise<string> =>
|
|
213
|
+
this.firstLayoutPromise
|
|
214
|
+
.then(() => {
|
|
215
|
+
const { root } = this;
|
|
216
|
+
if (!root) return neverEndingPromise; // component is unmounted, you never want to hear back from the promise
|
|
217
|
+
return captureRef(root, this.props.options);
|
|
218
|
+
})
|
|
219
|
+
.then(
|
|
220
|
+
(uri: string) => {
|
|
221
|
+
this.onCapture(uri);
|
|
222
|
+
return uri;
|
|
223
|
+
},
|
|
224
|
+
(e: Error) => {
|
|
225
|
+
this.onCaptureFailure(e);
|
|
226
|
+
throw e;
|
|
227
|
+
}
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
onCapture = (uri: string) => {
|
|
231
|
+
if (!this.root) return;
|
|
232
|
+
if (this.lastCapturedURI) {
|
|
233
|
+
// schedule releasing the previous capture
|
|
234
|
+
setTimeout(releaseCapture, 500, this.lastCapturedURI);
|
|
235
|
+
}
|
|
236
|
+
this.lastCapturedURI = uri;
|
|
237
|
+
const { onCapture } = this.props;
|
|
238
|
+
if (onCapture) onCapture(uri);
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
onCaptureFailure = (e: Error) => {
|
|
242
|
+
if (!this.root) return;
|
|
243
|
+
const { onCaptureFailure } = this.props;
|
|
244
|
+
if (onCaptureFailure) onCaptureFailure(e);
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
syncCaptureLoop = (captureMode: ?string) => {
|
|
248
|
+
cancelAnimationFrame(this._raf);
|
|
249
|
+
if (captureMode === "continuous") {
|
|
250
|
+
let previousCaptureURI = "-"; // needs to capture at least once at first, so we use "-" arbitrary string
|
|
251
|
+
const loop = () => {
|
|
252
|
+
this._raf = requestAnimationFrame(loop);
|
|
253
|
+
if (previousCaptureURI === this.lastCapturedURI) return; // previous capture has not finished, don't capture yet
|
|
254
|
+
previousCaptureURI = this.lastCapturedURI;
|
|
255
|
+
this.capture();
|
|
256
|
+
};
|
|
257
|
+
this._raf = requestAnimationFrame(loop);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
onRef = (ref: React$ElementRef<*>) => {
|
|
262
|
+
this.root = ref;
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
onLayout = (e: LayoutEvent) => {
|
|
266
|
+
const { onLayout } = this.props;
|
|
267
|
+
this.resolveFirstLayout(e.nativeEvent.layout);
|
|
268
|
+
if (onLayout) onLayout(e);
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
componentDidMount() {
|
|
272
|
+
if (__DEV__) checkCompatibleProps(this.props);
|
|
273
|
+
if (this.props.captureMode === "mount") {
|
|
274
|
+
this.capture();
|
|
275
|
+
} else {
|
|
276
|
+
this.syncCaptureLoop(this.props.captureMode);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
componentDidUpdate(prevProps: Props) {
|
|
281
|
+
if (this.props.captureMode !== undefined) {
|
|
282
|
+
if (this.props.captureMode !== prevProps.captureMode) {
|
|
283
|
+
this.syncCaptureLoop(this.props.captureMode);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (this.props.captureMode === "update") {
|
|
287
|
+
this.capture();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
componentWillUnmount() {
|
|
292
|
+
this.syncCaptureLoop(null);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
render() {
|
|
296
|
+
const { children } = this.props;
|
|
297
|
+
return (
|
|
298
|
+
<View
|
|
299
|
+
ref={this.onRef}
|
|
300
|
+
collapsable={false}
|
|
301
|
+
onLayout={this.onLayout}
|
|
302
|
+
style={this.props.style}
|
|
303
|
+
>
|
|
304
|
+
{children}
|
|
305
|
+
</View>
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import sensors from "./sensors";
|
|
2
|
+
export { setUpdateInterval as setUpdateIntervalForType, setLogLevelForType } from "./rnsensors";
|
|
3
|
+
|
|
4
|
+
export const SensorTypes = {
|
|
5
|
+
accelerometer: "accelerometer",
|
|
6
|
+
gyroscope: "gyroscope",
|
|
7
|
+
magnetometer: "magnetometer",
|
|
8
|
+
barometer: "barometer",
|
|
9
|
+
orientation: "orientation",
|
|
10
|
+
gravity: "gravity"
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const { accelerometer, gyroscope, magnetometer, barometer, orientation, gravity } = sensors;
|
|
14
|
+
export default sensors;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { NativeModules } from "react-native";
|
|
2
|
+
const {
|
|
3
|
+
ShakebugSDKRNSensorsGyroscope: GyroNative,
|
|
4
|
+
ShakebugSDKRNSensorsAccelerometer: AccNative,
|
|
5
|
+
ShakebugSDKRNSensorsMagnetometer: MagnNative,
|
|
6
|
+
ShakebugSDKRNSensorsBarometer: BarNative,
|
|
7
|
+
ShakebugSDKRNSensorsOrientation: OrientNative,
|
|
8
|
+
ShakebugSDKRNSensorsGravity: GravNative,
|
|
9
|
+
} = NativeModules;
|
|
10
|
+
|
|
11
|
+
if (!GyroNative && !AccNative && !MagnNative && !BarNative && !OrientNative && !GravNative) {
|
|
12
|
+
throw new Error("Native modules for sensors not available. Did react-native link run successfully?");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const nativeApis = new Map([
|
|
16
|
+
["accelerometer", AccNative],
|
|
17
|
+
["gyroscope", GyroNative],
|
|
18
|
+
["magnetometer", MagnNative],
|
|
19
|
+
["barometer", BarNative],
|
|
20
|
+
["orientation", OrientNative],
|
|
21
|
+
["gravity", GravNative],
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
// Cache the availability of sensors
|
|
25
|
+
const availableSensors = {};
|
|
26
|
+
|
|
27
|
+
export function start(type) {
|
|
28
|
+
const api = nativeApis.get(type);
|
|
29
|
+
api.startUpdates();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function isAvailable(type) {
|
|
33
|
+
if (availableSensors[type]) {
|
|
34
|
+
return availableSensors[type];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const api = nativeApis.get(type);
|
|
38
|
+
const promise = api.isAvailable();
|
|
39
|
+
availableSensors[type] = promise;
|
|
40
|
+
|
|
41
|
+
return promise;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function stop(type) {
|
|
45
|
+
const api = nativeApis.get(type);
|
|
46
|
+
api.stopUpdates();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function setUpdateInterval(type, updateInterval) {
|
|
50
|
+
const api = nativeApis.get(type);
|
|
51
|
+
api.setUpdateInterval(updateInterval);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function setLogLevelForType(type, level) {
|
|
55
|
+
const api = nativeApis.get(type);
|
|
56
|
+
api.setLogLevel(level);
|
|
57
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from "react-native";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { publish, refCount } from "rxjs/operators";
|
|
4
|
+
import * as RNSensors from "./rnsensors";
|
|
5
|
+
|
|
6
|
+
const {
|
|
7
|
+
ShakebugSDKRNSensorsGyroscope: GyroNative,
|
|
8
|
+
ShakebugSDKRNSensorsAccelerometer: AccNative,
|
|
9
|
+
ShakebugSDKRNSensorsMagnetometer: MagnNative,
|
|
10
|
+
ShakebugSDKRNSensorsBarometer: BarNative,
|
|
11
|
+
ShakebugSDKRNSensorsOrientation: OrientNative,
|
|
12
|
+
ShakebugSDKRNSensorsGravity: GravNative,
|
|
13
|
+
} = NativeModules;
|
|
14
|
+
|
|
15
|
+
const listenerKeys = new Map([
|
|
16
|
+
["accelerometer", "ShakebugSDKRNSensorsAccelerometer"],
|
|
17
|
+
["gyroscope", "ShakebugSDKRNSensorsGyroscope"],
|
|
18
|
+
["magnetometer", "ShakebugSDKRNSensorsMagnetometer"],
|
|
19
|
+
["barometer", "ShakebugSDKRNSensorsBarometer"],
|
|
20
|
+
["orientation", "ShakebugSDKRNSensorsOrientation"],
|
|
21
|
+
["gravity", "ShakebugSDKRNSensorsGravity"],
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
const nativeApis = new Map([
|
|
25
|
+
["accelerometer", AccNative],
|
|
26
|
+
["gyroscope", GyroNative],
|
|
27
|
+
["magnetometer", MagnNative],
|
|
28
|
+
["barometer", BarNative],
|
|
29
|
+
["orientation", OrientNative],
|
|
30
|
+
["gravity", GravNative],
|
|
31
|
+
]);
|
|
32
|
+
|
|
33
|
+
const eventEmitterSubscription = new Map([
|
|
34
|
+
["accelerometer", null],
|
|
35
|
+
["gyroscope", null],
|
|
36
|
+
["magnetometer", null],
|
|
37
|
+
["barometer", null],
|
|
38
|
+
["orientation", null],
|
|
39
|
+
["gravity", null],
|
|
40
|
+
]);
|
|
41
|
+
|
|
42
|
+
function createSensorObservable(sensorType) {
|
|
43
|
+
return Observable.create(function subscribe(observer) {
|
|
44
|
+
this.isSensorAvailable = false;
|
|
45
|
+
|
|
46
|
+
this.unsubscribeCallback = () => {
|
|
47
|
+
if (!this.isSensorAvailable) return;
|
|
48
|
+
if (eventEmitterSubscription.get(sensorType)) eventEmitterSubscription.get(sensorType).remove();
|
|
49
|
+
// stop the sensor
|
|
50
|
+
RNSensors.stop(sensorType);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
RNSensors.isAvailable(sensorType).then(
|
|
54
|
+
() => {
|
|
55
|
+
this.isSensorAvailable = true;
|
|
56
|
+
|
|
57
|
+
const emitter = new NativeEventEmitter(nativeApis.get(sensorType));
|
|
58
|
+
|
|
59
|
+
eventEmitterSubscription.set(
|
|
60
|
+
sensorType,
|
|
61
|
+
emitter.addListener(listenerKeys.get(sensorType), (data) => {
|
|
62
|
+
observer.next(data);
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
// Start the sensor manager
|
|
67
|
+
RNSensors.start(sensorType);
|
|
68
|
+
},
|
|
69
|
+
() => {
|
|
70
|
+
observer.error(`Sensor ${sensorType} is not available`);
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
return this.unsubscribeCallback;
|
|
75
|
+
}).pipe(makeSingleton());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// As we only have one sensor we need to share it between the different consumers
|
|
79
|
+
function makeSingleton() {
|
|
80
|
+
return (source) => source.pipe(publish(), refCount());
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const accelerometer = createSensorObservable("accelerometer");
|
|
84
|
+
const gyroscope = createSensorObservable("gyroscope");
|
|
85
|
+
const magnetometer = createSensorObservable("magnetometer");
|
|
86
|
+
const barometer = createSensorObservable("barometer");
|
|
87
|
+
const orientation = createSensorObservable("orientation");
|
|
88
|
+
const gravity = createSensorObservable("gravity");
|
|
89
|
+
|
|
90
|
+
export default {
|
|
91
|
+
gyroscope,
|
|
92
|
+
accelerometer,
|
|
93
|
+
magnetometer,
|
|
94
|
+
barometer,
|
|
95
|
+
orientation,
|
|
96
|
+
gravity,
|
|
97
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// videoUtils.js
|
|
2
|
+
|
|
3
|
+
import { Platform } from 'react-native';
|
|
4
|
+
import { NativeModules } from 'react-native';
|
|
5
|
+
const { ShakebugSDKVideoPlayerModule } = NativeModules;
|
|
6
|
+
|
|
7
|
+
export interface EditorConfig {
|
|
8
|
+
saveToPhoto?: boolean;
|
|
9
|
+
removeAfterSavedToPhoto?: boolean;
|
|
10
|
+
maxDuration?: number;
|
|
11
|
+
cancelButtonText?: string;
|
|
12
|
+
saveButtonText?: string;
|
|
13
|
+
enableCancelDialog?: boolean;
|
|
14
|
+
cancelDialogTitle?: string;
|
|
15
|
+
cancelDialogMessage?: string;
|
|
16
|
+
cancelDialogCancelText?: string;
|
|
17
|
+
cancelDialogConfirmText?: string;
|
|
18
|
+
enableSaveDialog?: boolean;
|
|
19
|
+
saveDialogTitle?: string;
|
|
20
|
+
saveDialogMessage?: string;
|
|
21
|
+
saveDialogCancelText?: string;
|
|
22
|
+
saveDialogConfirmText?: string;
|
|
23
|
+
trimmingText?: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const PlayVideo = (videoUri: string) => {
|
|
27
|
+
|
|
28
|
+
const config: EditorConfig = {
|
|
29
|
+
saveToPhoto: false,
|
|
30
|
+
removeAfterSavedToPhoto: false,
|
|
31
|
+
maxDuration: 120,
|
|
32
|
+
cancelButtonText: "Cancel",
|
|
33
|
+
saveButtonText: "Save",
|
|
34
|
+
enableCancelDialog: false,
|
|
35
|
+
cancelDialogTitle: "Cancel Editing",
|
|
36
|
+
cancelDialogMessage: "Are you sure you want to cancel editing?",
|
|
37
|
+
cancelDialogCancelText: "No",
|
|
38
|
+
cancelDialogConfirmText: "Yes",
|
|
39
|
+
enableSaveDialog: false,
|
|
40
|
+
saveDialogTitle: "Save Video",
|
|
41
|
+
saveDialogMessage: "Do you want to save this video?",
|
|
42
|
+
saveDialogCancelText: "No",
|
|
43
|
+
saveDialogConfirmText: "Yes",
|
|
44
|
+
trimmingText: "Trimming Video"
|
|
45
|
+
};
|
|
46
|
+
if(Platform.OS == 'android')
|
|
47
|
+
ShakebugSDKVideoPlayerModule.showEditor(videoUri, config);
|
|
48
|
+
else
|
|
49
|
+
ShakebugSDKVideoPlayerModule.playVideo(videoUri);
|
|
50
|
+
};
|
|
51
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { NativeModules, Image, TouchableOpacity, ImageBackground, NativeEventEmitter, Platform, StatusBar } from 'react-native';
|
|
3
|
+
import { PlayVideo } from './PlayVideo';
|
|
4
|
+
|
|
5
|
+
const VideoPlayer = ({ videoUri, img, goToScreenAtIndex, UpdateStatusBar }) => {
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (Platform.OS == 'android') {
|
|
8
|
+
const eventEmitter = new NativeEventEmitter(NativeModules.VideoPlayerModule);
|
|
9
|
+
const subscription = eventEmitter.addListener('ShakebugSDKVideoPlayer', (event) => {
|
|
10
|
+
switch (event.name) {
|
|
11
|
+
case 'onCancelPlayer': {
|
|
12
|
+
UpdateStatusBar()
|
|
13
|
+
goToScreenAtIndex(3)
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
default:
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return () => {
|
|
22
|
+
subscription.remove();
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}, []);
|
|
26
|
+
|
|
27
|
+
const playVideo = () => {
|
|
28
|
+
// StatusBar.setHidden(true)
|
|
29
|
+
PlayVideo(videoUri)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<ImageBackground
|
|
34
|
+
source={{ uri: img }}
|
|
35
|
+
style={{
|
|
36
|
+
width: "100%",
|
|
37
|
+
height: "100%",
|
|
38
|
+
opacity: 0.8
|
|
39
|
+
}}
|
|
40
|
+
resizeMode='contain'
|
|
41
|
+
>
|
|
42
|
+
<TouchableOpacity
|
|
43
|
+
style={{
|
|
44
|
+
position: 'absolute',
|
|
45
|
+
top: "40%",
|
|
46
|
+
left: 50,
|
|
47
|
+
right: 50,
|
|
48
|
+
paddingVertical: 8,
|
|
49
|
+
paddingHorizontal: 15,
|
|
50
|
+
alignItems: 'center',
|
|
51
|
+
|
|
52
|
+
}}
|
|
53
|
+
onPress={playVideo}
|
|
54
|
+
>
|
|
55
|
+
<Image
|
|
56
|
+
source={require('../src/Assets/images/play.png')}
|
|
57
|
+
style={{
|
|
58
|
+
width: 80,
|
|
59
|
+
height: 80,
|
|
60
|
+
zIndex: 1
|
|
61
|
+
}}
|
|
62
|
+
resizeMode='contain'
|
|
63
|
+
/>
|
|
64
|
+
</TouchableOpacity>
|
|
65
|
+
</ImageBackground>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export default VideoPlayer;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
README
|
|
2
|
+
======
|
|
3
|
+
|
|
4
|
+
If you want to publish the lib as a maven dependency, follow these steps before publishing a new version to npm:
|
|
5
|
+
|
|
6
|
+
1. Be sure to have the Android [SDK](https://developer.android.com/studio/index.html) and [NDK](https://developer.android.com/ndk/guides/index.html) installed
|
|
7
|
+
2. Be sure to have a `local.properties` file in this folder that points to the Android SDK and NDK
|
|
8
|
+
```
|
|
9
|
+
ndk.dir=/Users/{username}/Library/Android/sdk/ndk-bundle
|
|
10
|
+
sdk.dir=/Users/{username}/Library/Android/sdk
|
|
11
|
+
```
|
|
12
|
+
3. Delete the `maven` folder
|
|
13
|
+
4. Run `./gradlew installArchives`
|
|
14
|
+
5. Verify that latest set of generated files is in the maven folder with the correct version number
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated file. DO NOT MODIFY
|
|
3
|
+
*/
|
|
4
|
+
package com.shakebug;
|
|
5
|
+
|
|
6
|
+
public final class BuildConfig {
|
|
7
|
+
public static final boolean DEBUG = Boolean.parseBoolean("true");
|
|
8
|
+
public static final String LIBRARY_PACKAGE_NAME = "com.shakebug";
|
|
9
|
+
public static final String BUILD_TYPE = "debug";
|
|
10
|
+
}
|
package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
package="com.shakebug" >
|
|
4
|
+
|
|
5
|
+
<uses-sdk android:minSdkVersion="24" />
|
|
6
|
+
|
|
7
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
8
|
+
|
|
9
|
+
<!-- If you intend to use the microphone -->
|
|
10
|
+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
|
11
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
12
|
+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
13
|
+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
14
|
+
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
|
15
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
|
|
16
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
17
|
+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
18
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
19
|
+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
20
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
|
|
21
|
+
|
|
22
|
+
<application android:hardwareAccelerated="true" >
|
|
23
|
+
<provider
|
|
24
|
+
android:name="com.shakebug.ImagePickerProvider"
|
|
25
|
+
android:authorities="dollar_openBracket_applicationId_closeBracket.imagepickerprovider"
|
|
26
|
+
android:exported="false"
|
|
27
|
+
android:grantUriPermissions="true" >
|
|
28
|
+
<meta-data
|
|
29
|
+
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
30
|
+
android:resource="@xml/imagepicker_provider_paths" />
|
|
31
|
+
</provider>
|
|
32
|
+
|
|
33
|
+
<receiver
|
|
34
|
+
android:name="com.shakebug.ScreenshotReceiver"
|
|
35
|
+
android:exported="true" > <!-- Specify android:exported="true" -->
|
|
36
|
+
<intent-filter>
|
|
37
|
+
<action android:name="android.intent.action.SCREENSHOT" />
|
|
38
|
+
</intent-filter>
|
|
39
|
+
</receiver>
|
|
40
|
+
</application>
|
|
41
|
+
|
|
42
|
+
</manifest>
|
package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"artifactType": {
|
|
4
|
+
"type": "AAPT_FRIENDLY_MERGED_MANIFESTS",
|
|
5
|
+
"kind": "Directory"
|
|
6
|
+
},
|
|
7
|
+
"applicationId": "com.shakebug",
|
|
8
|
+
"variantName": "debug",
|
|
9
|
+
"elements": [
|
|
10
|
+
{
|
|
11
|
+
"type": "SINGLE",
|
|
12
|
+
"filters": [],
|
|
13
|
+
"attributes": [],
|
|
14
|
+
"outputFile": "AndroidManifest.xml"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"elementType": "File"
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|