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,372 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
import static com.facebook.react.bridge.UiThreadUtil.runOnUiThread;
|
|
4
|
+
|
|
5
|
+
import android.app.Activity;
|
|
6
|
+
import android.content.res.ColorStateList;
|
|
7
|
+
import android.graphics.Color;
|
|
8
|
+
import android.media.MediaMetadataRetriever;
|
|
9
|
+
import android.net.Uri;
|
|
10
|
+
import android.os.Build;
|
|
11
|
+
import android.view.Gravity;
|
|
12
|
+
import android.view.ViewGroup;
|
|
13
|
+
import android.widget.LinearLayout;
|
|
14
|
+
import android.widget.ProgressBar;
|
|
15
|
+
import android.widget.TextView;
|
|
16
|
+
|
|
17
|
+
import androidx.annotation.NonNull;
|
|
18
|
+
import androidx.annotation.Nullable;
|
|
19
|
+
import androidx.appcompat.app.AlertDialog;
|
|
20
|
+
|
|
21
|
+
import com.facebook.react.bridge.Arguments;
|
|
22
|
+
import com.facebook.react.bridge.LifecycleEventListener;
|
|
23
|
+
import com.facebook.react.bridge.Promise;
|
|
24
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
25
|
+
import com.facebook.react.bridge.ReactContext;
|
|
26
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
27
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
28
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
29
|
+
import com.facebook.react.bridge.WritableMap;
|
|
30
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
31
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
32
|
+
import com.shakebug.interfaces.VideoTrimListener;
|
|
33
|
+
import com.shakebug.utils.StorageUtil;
|
|
34
|
+
import com.shakebug.widgets.VideoTrimmerView;
|
|
35
|
+
|
|
36
|
+
import java.io.IOException;
|
|
37
|
+
|
|
38
|
+
@ReactModule(name = VideoTrimModule.NAME)
|
|
39
|
+
public class VideoTrimModule extends ReactContextBaseJavaModule implements VideoTrimListener, LifecycleEventListener {
|
|
40
|
+
public static final String NAME = "ShakebugSDKVideoTrim";
|
|
41
|
+
private static Boolean isInit = false;
|
|
42
|
+
private VideoTrimmerView trimmerView;
|
|
43
|
+
private AlertDialog alertDialog;
|
|
44
|
+
private AlertDialog mProgressDialog;
|
|
45
|
+
private ProgressBar mProgressBar;
|
|
46
|
+
private int listenerCount = 0;
|
|
47
|
+
|
|
48
|
+
private Promise showEditorPromise;
|
|
49
|
+
|
|
50
|
+
private boolean enableCancelDialog = true;
|
|
51
|
+
private String cancelDialogTitle = "Warning!";
|
|
52
|
+
private String cancelDialogMessage = "Are you sure want to cancel?";
|
|
53
|
+
private String cancelDialogCancelText = "Close";
|
|
54
|
+
private String cancelDialogConfirmText = "Proceed";
|
|
55
|
+
private boolean enableSaveDialog = true;
|
|
56
|
+
private String saveDialogTitle = "Confirmation!";
|
|
57
|
+
private String saveDialogMessage = "Are you sure want to save?";
|
|
58
|
+
private String saveDialogCancelText = "Close";
|
|
59
|
+
private String saveDialogConfirmText = "Proceed";
|
|
60
|
+
private String trimmingText = "Trimming video...";
|
|
61
|
+
|
|
62
|
+
public VideoTrimModule(ReactApplicationContext reactContext) {
|
|
63
|
+
super(reactContext);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
@NonNull
|
|
68
|
+
public String getName() {
|
|
69
|
+
return NAME;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@ReactMethod
|
|
74
|
+
public void showEditor(String videoPath, ReadableMap config, Promise promise) {
|
|
75
|
+
showEditorPromise = promise;
|
|
76
|
+
if (trimmerView != null || alertDialog != null) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!isValidVideo(videoPath)) {
|
|
81
|
+
WritableMap map = Arguments.createMap();
|
|
82
|
+
map.putString("message", "File is not a valid video");
|
|
83
|
+
sendEvent(getReactApplicationContext(), "onError", map);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
enableCancelDialog = config.hasKey("enableCancelDialog") ? config.getBoolean("enableCancelDialog") : true;
|
|
88
|
+
cancelDialogTitle = config.hasKey("cancelDialogTitle") ? config.getString("cancelDialogTitle") : "Warning!";
|
|
89
|
+
cancelDialogMessage = config.hasKey("cancelDialogMessage") ? config.getString("cancelDialogMessage") : "Are you sure want to cancel?";
|
|
90
|
+
cancelDialogCancelText = config.hasKey("cancelDialogCancelText") ? config.getString("cancelDialogCancelText") : "Close";
|
|
91
|
+
cancelDialogConfirmText = config.hasKey("cancelDialogConfirmText") ? config.getString("cancelDialogConfirmText") : "Proceed";
|
|
92
|
+
|
|
93
|
+
enableSaveDialog = config.hasKey("enableSaveDialog") ? config.getBoolean("enableSaveDialog") : true;
|
|
94
|
+
saveDialogTitle = config.hasKey("saveDialogTitle") ? config.getString("saveDialogTitle") : "Confirmation!";
|
|
95
|
+
saveDialogMessage = config.hasKey("saveDialogMessage") ? config.getString("saveDialogMessage") : "Are you sure want to save?";
|
|
96
|
+
saveDialogCancelText = config.hasKey("saveDialogCancelText") ? config.getString("saveDialogCancelText") : "Close";
|
|
97
|
+
saveDialogConfirmText = config.hasKey("saveDialogConfirmText") ? config.getString("saveDialogConfirmText") : "Proceed";
|
|
98
|
+
trimmingText = config.hasKey("trimmingText") ? config.getString("trimmingText") : "Trimming video...";
|
|
99
|
+
|
|
100
|
+
Activity activity = getReactApplicationContext().getCurrentActivity();
|
|
101
|
+
|
|
102
|
+
if (!isInit) {
|
|
103
|
+
init(activity);
|
|
104
|
+
isInit = true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// here is NOT main thread, we need to create VideoTrimmerView on UI thread, so that later we can update it using same thread
|
|
108
|
+
|
|
109
|
+
runOnUiThread(() -> {
|
|
110
|
+
trimmerView = new VideoTrimmerView(getReactApplicationContext(), config, null);
|
|
111
|
+
trimmerView.setOnTrimVideoListener(this);
|
|
112
|
+
trimmerView.initVideoByURI(Uri.parse(videoPath));
|
|
113
|
+
|
|
114
|
+
AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
|
|
115
|
+
builder.setCancelable(false);
|
|
116
|
+
alertDialog = builder.create();
|
|
117
|
+
alertDialog.setView(trimmerView);
|
|
118
|
+
alertDialog.show();
|
|
119
|
+
|
|
120
|
+
// this is to ensure to release resource if dialog is dismissed in unexpected way (Eg. open control/notification center by dragging from top of screen)
|
|
121
|
+
alertDialog.setOnDismissListener(dialog -> {
|
|
122
|
+
// This is called in same thread as the trimmer view -> UI thread
|
|
123
|
+
if (trimmerView != null) {
|
|
124
|
+
trimmerView.onDestroy();
|
|
125
|
+
trimmerView = null;
|
|
126
|
+
}
|
|
127
|
+
hideDialog();
|
|
128
|
+
sendEvent(getReactApplicationContext(), "onHide", null);
|
|
129
|
+
});
|
|
130
|
+
sendEvent(getReactApplicationContext(), "onShow", null);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private void init(Activity activity) {
|
|
135
|
+
isInit = true;
|
|
136
|
+
// we have to init this before create videoTrimmerView
|
|
137
|
+
BaseUtils.init(getReactApplicationContext());
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@Override
|
|
141
|
+
public void onHostResume() {
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@Override
|
|
146
|
+
public void onHostPause() {
|
|
147
|
+
if (trimmerView != null) {
|
|
148
|
+
trimmerView.onVideoPause();
|
|
149
|
+
trimmerView.setRestoreState(true);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@Override
|
|
154
|
+
public void onHostDestroy() {
|
|
155
|
+
hideDialog();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@Override public void onStartTrim() {
|
|
159
|
+
sendEvent(getReactApplicationContext(), "onStartTrimming", null);
|
|
160
|
+
runOnUiThread(() -> {
|
|
161
|
+
buildDialog();
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@Override public void onTrimmingProgress(int percentage) {
|
|
166
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
|
167
|
+
mProgressBar.setProgress(percentage, true);
|
|
168
|
+
} else {
|
|
169
|
+
mProgressBar.setProgress(percentage);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
@Override public void onFinishTrim(String in) {
|
|
175
|
+
runOnUiThread(() -> {
|
|
176
|
+
WritableMap map = Arguments.createMap();
|
|
177
|
+
map.putString("outputPath", in);
|
|
178
|
+
sendEvent(getReactApplicationContext(), "onFinishTrimming", map);
|
|
179
|
+
showEditorPromise.resolve(in);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@Override public void onError(String errorMessage) {
|
|
184
|
+
WritableMap map = Arguments.createMap();
|
|
185
|
+
map.putString("message", errorMessage);
|
|
186
|
+
sendEvent(getReactApplicationContext(), "onError", map);
|
|
187
|
+
this.hideDialog();
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@Override public void onCancel() {
|
|
191
|
+
if (!enableCancelDialog) {
|
|
192
|
+
sendEvent(getReactApplicationContext(), "onCancelTrimming", null);
|
|
193
|
+
hideDialog();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
AlertDialog.Builder builder = new AlertDialog.Builder(getReactApplicationContext().getCurrentActivity());
|
|
198
|
+
builder.setMessage(cancelDialogMessage);
|
|
199
|
+
builder.setTitle(cancelDialogTitle);
|
|
200
|
+
builder.setCancelable(false);
|
|
201
|
+
builder.setPositiveButton(cancelDialogConfirmText, (dialog, which) -> {
|
|
202
|
+
dialog.cancel();
|
|
203
|
+
sendEvent(getReactApplicationContext(), "onCancelTrimming", null);
|
|
204
|
+
hideDialog();
|
|
205
|
+
});
|
|
206
|
+
builder.setNegativeButton(cancelDialogCancelText, (dialog, which) -> {
|
|
207
|
+
dialog.cancel();
|
|
208
|
+
});
|
|
209
|
+
AlertDialog alertDialog = builder.create();
|
|
210
|
+
alertDialog.show();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@Override public void onSave() {
|
|
214
|
+
if (!enableSaveDialog) {
|
|
215
|
+
trimmerView.onSaveClicked();
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
AlertDialog.Builder builder = new AlertDialog.Builder(getReactApplicationContext().getCurrentActivity());
|
|
220
|
+
builder.setMessage(saveDialogMessage);
|
|
221
|
+
builder.setTitle(saveDialogTitle);
|
|
222
|
+
builder.setCancelable(false);
|
|
223
|
+
builder.setPositiveButton(saveDialogConfirmText, (dialog, which) -> {
|
|
224
|
+
dialog.cancel();
|
|
225
|
+
trimmerView.onSaveClicked();
|
|
226
|
+
});
|
|
227
|
+
builder.setNegativeButton(saveDialogCancelText, (dialog, which) -> {
|
|
228
|
+
dialog.cancel();
|
|
229
|
+
});
|
|
230
|
+
AlertDialog alertDialog = builder.create();
|
|
231
|
+
alertDialog.show();
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
@ReactMethod
|
|
235
|
+
private void hideDialog() {
|
|
236
|
+
if (mProgressDialog != null) {
|
|
237
|
+
if (mProgressDialog.isShowing()) mProgressDialog.dismiss();
|
|
238
|
+
mProgressBar = null;
|
|
239
|
+
mProgressDialog = null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (alertDialog != null) {
|
|
243
|
+
if(alertDialog.isShowing()) {
|
|
244
|
+
alertDialog.dismiss();
|
|
245
|
+
}
|
|
246
|
+
alertDialog = null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private void buildDialog() {
|
|
251
|
+
Activity activity = getReactApplicationContext().getCurrentActivity();
|
|
252
|
+
// Create the parent layout for the dialog
|
|
253
|
+
LinearLayout layout = new LinearLayout(activity);
|
|
254
|
+
layout.setLayoutParams(new ViewGroup.LayoutParams(
|
|
255
|
+
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
256
|
+
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
257
|
+
));
|
|
258
|
+
layout.setOrientation(LinearLayout.VERTICAL);
|
|
259
|
+
layout.setGravity(Gravity.CENTER_HORIZONTAL);
|
|
260
|
+
layout.setPadding(16, 32, 16, 32);
|
|
261
|
+
|
|
262
|
+
// Create and add the TextView
|
|
263
|
+
TextView textView = new TextView(activity);
|
|
264
|
+
textView.setLayoutParams(new ViewGroup.LayoutParams(
|
|
265
|
+
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
266
|
+
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
267
|
+
));
|
|
268
|
+
textView.setText(trimmingText);
|
|
269
|
+
textView.setTextSize(18);
|
|
270
|
+
layout.addView(textView);
|
|
271
|
+
|
|
272
|
+
// Create and add the ProgressBar
|
|
273
|
+
mProgressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal);
|
|
274
|
+
mProgressBar.setLayoutParams(new ViewGroup.LayoutParams(
|
|
275
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
276
|
+
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
277
|
+
));
|
|
278
|
+
mProgressBar.setProgressTintList(ColorStateList.valueOf(Color.parseColor("#2196F3")));
|
|
279
|
+
layout.addView(mProgressBar);
|
|
280
|
+
|
|
281
|
+
// Create the AlertDialog
|
|
282
|
+
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
283
|
+
builder.setCancelable(false);
|
|
284
|
+
builder.setView(layout);
|
|
285
|
+
|
|
286
|
+
// Show the dialog
|
|
287
|
+
mProgressDialog = builder.create();
|
|
288
|
+
mProgressDialog.show();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
@ReactMethod
|
|
292
|
+
public void addListener(String eventName) {
|
|
293
|
+
// This method is required by React
|
|
294
|
+
listenerCount += 1;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@ReactMethod
|
|
298
|
+
public void removeListeners(Integer count) {
|
|
299
|
+
// This method is required by React
|
|
300
|
+
listenerCount -= count;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {
|
|
304
|
+
if (listenerCount > 0) {
|
|
305
|
+
WritableMap map = params != null ? params : Arguments.createMap();
|
|
306
|
+
map.putString("name", eventName);
|
|
307
|
+
reactContext
|
|
308
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
309
|
+
.emit("ShakebugSDKVideoTrim", map);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
public boolean isValidVideo(String filePath) {
|
|
315
|
+
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
|
|
316
|
+
|
|
317
|
+
try {
|
|
318
|
+
retriever.setDataSource(getReactApplicationContext(), Uri.parse(filePath));
|
|
319
|
+
} catch (Exception e){
|
|
320
|
+
e.printStackTrace();
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
String hasVideo = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO);
|
|
325
|
+
return "yes".equals(hasVideo);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
@ReactMethod
|
|
329
|
+
private void isValidVideo(String filePath, Promise promise) {
|
|
330
|
+
promise.resolve(isValidVideo(filePath));
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
@ReactMethod
|
|
334
|
+
private void saveVideo(String filePath, Promise promise) {
|
|
335
|
+
try {
|
|
336
|
+
StorageUtil.saveVideoToGallery(getReactApplicationContext(), filePath);
|
|
337
|
+
} catch (IOException e) {
|
|
338
|
+
e.printStackTrace();
|
|
339
|
+
WritableMap mapE = Arguments.createMap();
|
|
340
|
+
mapE.putString("message", "Fail while copying file to Gallery");
|
|
341
|
+
sendEvent(getReactApplicationContext(), "onError", mapE);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
this.hideDialog();
|
|
345
|
+
promise.resolve(null);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
@ReactMethod
|
|
349
|
+
private void listFiles(Promise promise) {
|
|
350
|
+
String[] files = StorageUtil.listFiles(getReactApplicationContext());
|
|
351
|
+
promise.resolve(Arguments.fromArray(files));
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
@ReactMethod
|
|
355
|
+
private void cleanFiles(Promise promise) {
|
|
356
|
+
String[] files = StorageUtil.listFiles(getReactApplicationContext());
|
|
357
|
+
int successCount = 0;
|
|
358
|
+
for (String file : files) {
|
|
359
|
+
boolean state = StorageUtil.deleteFile(file);
|
|
360
|
+
if (state) {
|
|
361
|
+
successCount++;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
promise.resolve(successCount);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
@ReactMethod
|
|
368
|
+
private void deleteFile(String filePath, Promise promise) {
|
|
369
|
+
boolean state = StorageUtil.deleteFile(filePath);
|
|
370
|
+
promise.resolve(state);
|
|
371
|
+
}
|
|
372
|
+
}
|