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,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
package com.shakebug;
|
|
8
|
+
|
|
9
|
+
import android.content.Context;
|
|
10
|
+
import android.net.ConnectivityManager;
|
|
11
|
+
import android.net.wifi.WifiInfo;
|
|
12
|
+
import android.net.wifi.WifiManager;
|
|
13
|
+
import android.telephony.TelephonyManager;
|
|
14
|
+
|
|
15
|
+
import com.facebook.react.bridge.Arguments;
|
|
16
|
+
import com.facebook.react.bridge.Promise;
|
|
17
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
18
|
+
import com.facebook.react.bridge.WritableMap;
|
|
19
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
20
|
+
import com.shakebug.types.CellularGeneration;
|
|
21
|
+
import com.shakebug.types.ConnectionType;
|
|
22
|
+
|
|
23
|
+
import java.math.BigInteger;
|
|
24
|
+
import java.net.Inet4Address;
|
|
25
|
+
import java.net.InetAddress;
|
|
26
|
+
import java.net.InterfaceAddress;
|
|
27
|
+
import java.net.NetworkInterface;
|
|
28
|
+
import java.net.SocketException;
|
|
29
|
+
import java.util.Enumeration;
|
|
30
|
+
import java.util.List;
|
|
31
|
+
import java.util.Locale;
|
|
32
|
+
|
|
33
|
+
import javax.annotation.Nonnull;
|
|
34
|
+
import javax.annotation.Nullable;
|
|
35
|
+
|
|
36
|
+
public abstract class ConnectivityReceiver {
|
|
37
|
+
|
|
38
|
+
private final ConnectivityManager mConnectivityManager;
|
|
39
|
+
private final WifiManager mWifiManager;
|
|
40
|
+
private final TelephonyManager mTelephonyManager;
|
|
41
|
+
private final ReactApplicationContext mReactContext;
|
|
42
|
+
public boolean hasListener = false;
|
|
43
|
+
|
|
44
|
+
@Nonnull
|
|
45
|
+
private ConnectionType mConnectionType = ConnectionType.UNKNOWN;
|
|
46
|
+
@Nullable
|
|
47
|
+
private CellularGeneration mCellularGeneration = null;
|
|
48
|
+
private boolean mIsInternetReachable = false;
|
|
49
|
+
private Boolean mIsInternetReachableOverride;
|
|
50
|
+
|
|
51
|
+
private static String getSubnet(InetAddress inetAddress) throws SocketException {
|
|
52
|
+
NetworkInterface netAddress = NetworkInterface.getByInetAddress(inetAddress);
|
|
53
|
+
List<InterfaceAddress> addresses = netAddress.getInterfaceAddresses();
|
|
54
|
+
|
|
55
|
+
short networkPrefixLength = 0;
|
|
56
|
+
for (InterfaceAddress address : addresses) {
|
|
57
|
+
boolean isIpV4 = address.getAddress().getAddress().length == 4;
|
|
58
|
+
if (isIpV4) {
|
|
59
|
+
networkPrefixLength = address.getNetworkPrefixLength();
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
int mask = 0xffffffff << (32 - networkPrefixLength);
|
|
65
|
+
return String.format(
|
|
66
|
+
Locale.US,
|
|
67
|
+
"%d.%d.%d.%d",
|
|
68
|
+
(mask >> 24 & 0xff),
|
|
69
|
+
(mask >> 16 & 0xff),
|
|
70
|
+
(mask >> 8 & 0xff),
|
|
71
|
+
(mask & 0xff));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
ConnectivityReceiver(ReactApplicationContext reactContext) {
|
|
75
|
+
mReactContext = reactContext;
|
|
76
|
+
mConnectivityManager =
|
|
77
|
+
(ConnectivityManager) reactContext.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
78
|
+
mWifiManager =
|
|
79
|
+
(WifiManager)
|
|
80
|
+
reactContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
|
81
|
+
mTelephonyManager =
|
|
82
|
+
(TelephonyManager) reactContext.getSystemService(Context.TELEPHONY_SERVICE);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public abstract void register();
|
|
86
|
+
|
|
87
|
+
public abstract void unregister();
|
|
88
|
+
|
|
89
|
+
public void getCurrentState(@Nullable final String requestedInterface, final Promise promise) {
|
|
90
|
+
promise.resolve(createConnectivityEventMap(requestedInterface));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public void setIsInternetReachableOverride(boolean isInternetReachableOverride) {
|
|
94
|
+
this.mIsInternetReachableOverride = isInternetReachableOverride;
|
|
95
|
+
updateConnectivity(mConnectionType, mCellularGeneration, mIsInternetReachable);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public void clearIsInternetReachableOverride() {
|
|
99
|
+
this.mIsInternetReachableOverride = null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
ReactApplicationContext getReactContext() {
|
|
103
|
+
return mReactContext;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
ConnectivityManager getConnectivityManager() {
|
|
107
|
+
return mConnectivityManager;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
void updateConnectivity(
|
|
111
|
+
@Nonnull ConnectionType connectionType,
|
|
112
|
+
@Nullable CellularGeneration cellularGeneration,
|
|
113
|
+
boolean isInternetReachableRaw) {
|
|
114
|
+
boolean isInternetReachable = mIsInternetReachableOverride == null
|
|
115
|
+
? isInternetReachableRaw
|
|
116
|
+
: mIsInternetReachableOverride;
|
|
117
|
+
|
|
118
|
+
// It is possible to get multiple broadcasts for the same connectivity change, so we only
|
|
119
|
+
// update and send an event when the connectivity has indeed changed.
|
|
120
|
+
boolean connectionTypeChanged = connectionType != mConnectionType;
|
|
121
|
+
boolean cellularGenerationChanged = cellularGeneration != mCellularGeneration;
|
|
122
|
+
boolean isInternetReachableChanged = isInternetReachable != mIsInternetReachable;
|
|
123
|
+
|
|
124
|
+
if (connectionTypeChanged || cellularGenerationChanged || isInternetReachableChanged) {
|
|
125
|
+
mConnectionType = connectionType;
|
|
126
|
+
mCellularGeneration = cellularGeneration;
|
|
127
|
+
mIsInternetReachable = isInternetReachable;
|
|
128
|
+
if (hasListener) {
|
|
129
|
+
sendConnectivityChangedEvent();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
protected void sendConnectivityChangedEvent() {
|
|
135
|
+
getReactContext()
|
|
136
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
137
|
+
.emit("netInfo.networkStatusDidChange", createConnectivityEventMap(null));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
protected WritableMap createConnectivityEventMap(@Nullable final String requestedInterface) {
|
|
141
|
+
WritableMap event = Arguments.createMap();
|
|
142
|
+
|
|
143
|
+
// Add if WiFi is ON or OFF
|
|
144
|
+
if (NetInfoUtils.isAccessWifiStatePermissionGranted(getReactContext())) {
|
|
145
|
+
boolean isEnabled = false;
|
|
146
|
+
if (mWifiManager != null) {
|
|
147
|
+
isEnabled = mWifiManager.isWifiEnabled();
|
|
148
|
+
}
|
|
149
|
+
event.putBoolean("isWifiEnabled", isEnabled);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Add the connection type information
|
|
153
|
+
event.putString("type", requestedInterface != null ? requestedInterface : mConnectionType.label);
|
|
154
|
+
|
|
155
|
+
// Add the connection state information
|
|
156
|
+
boolean isConnected =
|
|
157
|
+
!mConnectionType.equals(ConnectionType.NONE)
|
|
158
|
+
&& !mConnectionType.equals(ConnectionType.UNKNOWN);
|
|
159
|
+
event.putBoolean("isConnected", isConnected);
|
|
160
|
+
|
|
161
|
+
// Add the internet reachable information
|
|
162
|
+
event.putBoolean(
|
|
163
|
+
"isInternetReachable",
|
|
164
|
+
mIsInternetReachable && (requestedInterface == null || requestedInterface.equals(mConnectionType.label)));
|
|
165
|
+
|
|
166
|
+
// Add the details, if there are any
|
|
167
|
+
String detailsInterface = requestedInterface != null ? requestedInterface : mConnectionType.label;
|
|
168
|
+
WritableMap details = createDetailsMap(detailsInterface);
|
|
169
|
+
if (isConnected) {
|
|
170
|
+
boolean isConnectionExpensive =
|
|
171
|
+
getConnectivityManager() == null ? true : getConnectivityManager().isActiveNetworkMetered();
|
|
172
|
+
details.putBoolean("isConnectionExpensive", isConnectionExpensive);
|
|
173
|
+
}
|
|
174
|
+
event.putMap("details", details);
|
|
175
|
+
|
|
176
|
+
return event;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private WritableMap createDetailsMap(@Nonnull String detailsInterface) {
|
|
180
|
+
WritableMap details = Arguments.createMap();
|
|
181
|
+
switch (detailsInterface) {
|
|
182
|
+
case "cellular":
|
|
183
|
+
// Add the cellular generation, if we have one
|
|
184
|
+
if (mCellularGeneration != null) {
|
|
185
|
+
details.putString("cellularGeneration", mCellularGeneration.label);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Add the network operator name, if there is one
|
|
189
|
+
String carrier = mTelephonyManager.getNetworkOperatorName();
|
|
190
|
+
if (carrier != null) {
|
|
191
|
+
details.putString("carrier", carrier);
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
case "ethernet":
|
|
195
|
+
try {
|
|
196
|
+
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
|
|
197
|
+
NetworkInterface netInterface = en.nextElement();
|
|
198
|
+
|
|
199
|
+
for (Enumeration<InetAddress> ea = netInterface.getInetAddresses(); ea.hasMoreElements(); ) {
|
|
200
|
+
InetAddress inetAddress = ea.nextElement();
|
|
201
|
+
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
|
|
202
|
+
String ipAddress = inetAddress.getHostAddress();
|
|
203
|
+
details.putString("ipAddress", ipAddress);
|
|
204
|
+
details.putString("subnet", getSubnet(inetAddress));
|
|
205
|
+
return details;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
} catch (Exception e) {
|
|
210
|
+
e.printStackTrace();
|
|
211
|
+
}
|
|
212
|
+
break;
|
|
213
|
+
case "wifi":
|
|
214
|
+
if (NetInfoUtils.isAccessWifiStatePermissionGranted(getReactContext()) && mWifiManager != null) {
|
|
215
|
+
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
|
|
216
|
+
if (wifiInfo != null) {
|
|
217
|
+
// Get the SSID
|
|
218
|
+
try {
|
|
219
|
+
String initialSSID = wifiInfo.getSSID();
|
|
220
|
+
if (initialSSID != null && !initialSSID.contains("<unknown ssid>")) {
|
|
221
|
+
// Strip the quotes, if any
|
|
222
|
+
String ssid = initialSSID.replace("\"", "");
|
|
223
|
+
details.putString("ssid", ssid);
|
|
224
|
+
}
|
|
225
|
+
} catch (Exception e) {
|
|
226
|
+
// Ignore errors
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Get the BSSID
|
|
230
|
+
try {
|
|
231
|
+
String bssid = wifiInfo.getBSSID();
|
|
232
|
+
if (bssid != null) {
|
|
233
|
+
details.putString("bssid", bssid);
|
|
234
|
+
}
|
|
235
|
+
} catch (Exception e) {
|
|
236
|
+
// Ignore errors
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
// Get/parse the wifi signal strength
|
|
241
|
+
try {
|
|
242
|
+
int signalStrength =
|
|
243
|
+
WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 100);
|
|
244
|
+
details.putInt("strength", signalStrength);
|
|
245
|
+
} catch (Exception e) {
|
|
246
|
+
// Ignore errors
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Get WiFi frequency
|
|
250
|
+
try {
|
|
251
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
|
|
252
|
+
int frequency = wifiInfo.getFrequency();
|
|
253
|
+
details.putInt("frequency", frequency);
|
|
254
|
+
}
|
|
255
|
+
} catch (Exception e) {
|
|
256
|
+
// Ignore errors
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Get the IP address
|
|
260
|
+
try {
|
|
261
|
+
byte[] ipAddressByteArray =
|
|
262
|
+
BigInteger.valueOf(wifiInfo.getIpAddress()).toByteArray();
|
|
263
|
+
NetInfoUtils.reverseByteArray(ipAddressByteArray);
|
|
264
|
+
InetAddress inetAddress = InetAddress.getByAddress(ipAddressByteArray);
|
|
265
|
+
String ipAddress = inetAddress.getHostAddress();
|
|
266
|
+
details.putString("ipAddress", ipAddress);
|
|
267
|
+
} catch (Exception e) {
|
|
268
|
+
// Ignore errors
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Get the subnet mask
|
|
272
|
+
try {
|
|
273
|
+
byte[] ipAddressByteArray =
|
|
274
|
+
BigInteger.valueOf(wifiInfo.getIpAddress()).toByteArray();
|
|
275
|
+
NetInfoUtils.reverseByteArray(ipAddressByteArray);
|
|
276
|
+
InetAddress inetAddress = InetAddress.getByAddress(ipAddressByteArray);
|
|
277
|
+
details.putString("subnet", getSubnet(inetAddress));
|
|
278
|
+
} catch (Exception e) {
|
|
279
|
+
// Ignore errors
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Get the link speed
|
|
283
|
+
try {
|
|
284
|
+
int linkSpeed =
|
|
285
|
+
wifiInfo.getLinkSpeed();
|
|
286
|
+
details.putInt("linkSpeed", linkSpeed);
|
|
287
|
+
} catch (Exception e) {
|
|
288
|
+
// Ignore errors
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Get the current receive link speed in Mbps
|
|
292
|
+
try {
|
|
293
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
|
|
294
|
+
int rxLinkSpeed =
|
|
295
|
+
wifiInfo.getRxLinkSpeedMbps();
|
|
296
|
+
details.putInt("rxLinkSpeed", rxLinkSpeed);
|
|
297
|
+
}
|
|
298
|
+
} catch (Exception e) {
|
|
299
|
+
// Ignore errors
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Get the current transmit link speed in Mbps
|
|
303
|
+
try {
|
|
304
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
|
|
305
|
+
int txLinkSpeed =
|
|
306
|
+
wifiInfo.getTxLinkSpeedMbps();
|
|
307
|
+
details.putInt("txLinkSpeed", txLinkSpeed);
|
|
308
|
+
}
|
|
309
|
+
} catch (Exception e) {
|
|
310
|
+
// Ignore errors
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
return details;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
7
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
8
|
+
|
|
9
|
+
public class CrashLoggerModule extends ReactContextBaseJavaModule implements Thread.UncaughtExceptionHandler {
|
|
10
|
+
|
|
11
|
+
private final ReactApplicationContext reactContext;
|
|
12
|
+
private Thread.UncaughtExceptionHandler defaultUEH;
|
|
13
|
+
|
|
14
|
+
public CrashLoggerModule(ReactApplicationContext reactContext) {
|
|
15
|
+
super(reactContext);
|
|
16
|
+
this.reactContext = reactContext;
|
|
17
|
+
defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); // Save default handler
|
|
18
|
+
Thread.setDefaultUncaughtExceptionHandler(this); // Set this class as the default handler
|
|
19
|
+
Log.d("CrashLogger", "Custom UncaughtExceptionHandler set.");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Override
|
|
23
|
+
public String getName() {
|
|
24
|
+
return "ShakebugSDKCrashLogger";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Override
|
|
28
|
+
public void uncaughtException(Thread thread, Throwable e) {
|
|
29
|
+
// Handle the exception, prepare and send it to React Native
|
|
30
|
+
try {
|
|
31
|
+
String errorMessage = e.toString();
|
|
32
|
+
// Here, we simply log the error, but you can format it as needed
|
|
33
|
+
Log.e("CrashLogger", "Uncaught exception: " + errorMessage);
|
|
34
|
+
sendEvent(errorMessage);
|
|
35
|
+
} catch (Exception exception) {
|
|
36
|
+
Log.e("CrashLogger", "Error sending crash log to RN", exception);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
defaultUEH.uncaughtException(thread, e); // Ensure default handler is called
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private void sendEvent(String errorMessage) {
|
|
43
|
+
// Send error message to React Native
|
|
44
|
+
reactContext
|
|
45
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
46
|
+
.emit("CrashLog", errorMessage);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
import android.text.TextUtils;
|
|
4
|
+
|
|
5
|
+
import java.text.SimpleDateFormat;
|
|
6
|
+
import java.util.Date;
|
|
7
|
+
import java.util.Locale;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Author:J.Chou
|
|
11
|
+
* Date: 2016.07.21 11:43.
|
|
12
|
+
* Email: who_know_me@163.com
|
|
13
|
+
* Describe:
|
|
14
|
+
*/
|
|
15
|
+
public final class DateUtil {
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* second to HH:MM:ss
|
|
19
|
+
* @param seconds
|
|
20
|
+
* @return
|
|
21
|
+
*/
|
|
22
|
+
public static String convertSecondsToTime(long seconds) {
|
|
23
|
+
String timeStr = null;
|
|
24
|
+
int hour = 0;
|
|
25
|
+
int minute = 0;
|
|
26
|
+
int second = 0;
|
|
27
|
+
if (seconds <= 0)
|
|
28
|
+
return "00:00";
|
|
29
|
+
else {
|
|
30
|
+
minute = (int)seconds / 60;
|
|
31
|
+
if (minute < 60) {
|
|
32
|
+
second = (int)seconds % 60;
|
|
33
|
+
timeStr = unitFormat(minute) + ":" + unitFormat(second);
|
|
34
|
+
} else {
|
|
35
|
+
hour = minute / 60;
|
|
36
|
+
if (hour > 99)
|
|
37
|
+
return "99:59:59";
|
|
38
|
+
minute = minute % 60;
|
|
39
|
+
second = (int)(seconds - hour * 3600 - minute * 60);
|
|
40
|
+
timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return timeStr;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public static String convertSecondsToFormat(long seconds,String format){
|
|
47
|
+
|
|
48
|
+
if(TextUtils.isEmpty(format))
|
|
49
|
+
return "";
|
|
50
|
+
|
|
51
|
+
Date date = new Date(seconds);
|
|
52
|
+
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
|
|
53
|
+
return sdf.format(date);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private static String unitFormat(int i) {
|
|
57
|
+
String retStr = null;
|
|
58
|
+
if (i >= 0 && i < 10)
|
|
59
|
+
retStr = "0" + Integer.toString(i);
|
|
60
|
+
else
|
|
61
|
+
retStr = "" + i;
|
|
62
|
+
return retStr;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
public enum DeviceType {
|
|
4
|
+
HANDSET ("Handset"),
|
|
5
|
+
TABLET ("Tablet"),
|
|
6
|
+
TV ("Tv"),
|
|
7
|
+
UNKNOWN ("unknown");
|
|
8
|
+
|
|
9
|
+
private final String value;
|
|
10
|
+
|
|
11
|
+
DeviceType(String value) {
|
|
12
|
+
this.value = value;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public String getValue() {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
import android.app.ActivityManager;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.content.pm.PackageManager;
|
|
6
|
+
|
|
7
|
+
import java.util.List;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Author:J.Chou
|
|
11
|
+
* Date: 2016.07.19 11:40.
|
|
12
|
+
* Email: who_know_me@163.com
|
|
13
|
+
* Describe:
|
|
14
|
+
*/
|
|
15
|
+
public final class DeviceUtil {
|
|
16
|
+
|
|
17
|
+
public static int getDeviceWidth() {
|
|
18
|
+
return BaseUtils.getContext().getResources().getDisplayMetrics().widthPixels;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static int getDeviceHeight(){
|
|
22
|
+
return BaseUtils.getContext().getResources().getDisplayMetrics().heightPixels;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public static boolean hasAppInstalled(String pkgName) {
|
|
26
|
+
try {
|
|
27
|
+
BaseUtils.getContext().getPackageManager().getPackageInfo(pkgName, PackageManager.PERMISSION_GRANTED);
|
|
28
|
+
return true;
|
|
29
|
+
} catch (PackageManager.NameNotFoundException e) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public static boolean isAppRunInBackground() {
|
|
35
|
+
ActivityManager activityManager = (ActivityManager) BaseUtils.getContext().getSystemService(Context.ACTIVITY_SERVICE);
|
|
36
|
+
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
|
|
37
|
+
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
|
|
38
|
+
if (appProcess.processName.equals(BaseUtils.getContext().getPackageName())) {
|
|
39
|
+
// return true -> Run in background
|
|
40
|
+
// return false - > Run in foreground
|
|
41
|
+
return appProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.graphics.Bitmap;
|
|
5
|
+
import android.graphics.Canvas;
|
|
6
|
+
import android.graphics.Paint;
|
|
7
|
+
import android.view.MotionEvent;
|
|
8
|
+
import android.view.View;
|
|
9
|
+
|
|
10
|
+
public class DrawingView extends View {
|
|
11
|
+
private Bitmap bitmap;
|
|
12
|
+
private Canvas canvas;
|
|
13
|
+
private Paint paint;
|
|
14
|
+
private float lastX, lastY;
|
|
15
|
+
|
|
16
|
+
public DrawingView(Context context) {
|
|
17
|
+
super(context);
|
|
18
|
+
init();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private void init() {
|
|
22
|
+
// Initial paint setup
|
|
23
|
+
paint = new Paint();
|
|
24
|
+
paint.setColor(android.graphics.Color.BLACK);
|
|
25
|
+
paint.setStrokeWidth(10);
|
|
26
|
+
paint.setStyle(Paint.Style.STROKE);
|
|
27
|
+
paint.setAntiAlias(true);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@Override
|
|
31
|
+
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
|
32
|
+
super.onSizeChanged(w, h, oldw, oldh);
|
|
33
|
+
// Recreate the bitmap and canvas with the new dimensions
|
|
34
|
+
if (bitmap != null) {
|
|
35
|
+
bitmap.recycle();
|
|
36
|
+
}
|
|
37
|
+
bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
|
|
38
|
+
canvas = new Canvas(bitmap);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@Override
|
|
42
|
+
protected void onDraw(Canvas canvas) {
|
|
43
|
+
super.onDraw(canvas);
|
|
44
|
+
if (bitmap != null) {
|
|
45
|
+
canvas.drawBitmap(bitmap, 0, 0, null);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Override
|
|
50
|
+
public boolean onTouchEvent(MotionEvent event) {
|
|
51
|
+
float x = event.getX();
|
|
52
|
+
float y = event.getY();
|
|
53
|
+
|
|
54
|
+
switch (event.getAction()) {
|
|
55
|
+
case MotionEvent.ACTION_DOWN:
|
|
56
|
+
lastX = x;
|
|
57
|
+
lastY = y;
|
|
58
|
+
return true;
|
|
59
|
+
case MotionEvent.ACTION_MOVE:
|
|
60
|
+
float dx = Math.abs(x - lastX);
|
|
61
|
+
float dy = Math.abs(y - lastY);
|
|
62
|
+
if (dx >= 4 || dy >= 4) {
|
|
63
|
+
// Draw on the internal bitmap canvas
|
|
64
|
+
canvas.drawLine(lastX, lastY, x, y, paint);
|
|
65
|
+
invalidate();
|
|
66
|
+
lastX = x;
|
|
67
|
+
lastY = y;
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
default:
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public void setColor(int color) {
|
|
76
|
+
paint.setColor(color);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public void setStrokeWidth(float width) {
|
|
80
|
+
paint.setStrokeWidth(width);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public void clearCanvas() {
|
|
84
|
+
if (canvas != null) {
|
|
85
|
+
bitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
|
|
86
|
+
canvas = new Canvas(bitmap);
|
|
87
|
+
invalidate();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package com.shakebug;
|
|
2
|
+
|
|
3
|
+
import android.graphics.Color;
|
|
4
|
+
|
|
5
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
6
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
7
|
+
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
8
|
+
|
|
9
|
+
public class DrawingViewManager extends SimpleViewManager<DrawingView> {
|
|
10
|
+
|
|
11
|
+
@Override
|
|
12
|
+
public String getName() {
|
|
13
|
+
return "ShakebugSDKDrawingView";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
protected DrawingView createViewInstance(ThemedReactContext context) {
|
|
18
|
+
return new DrawingView(context);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@ReactProp(name = "color", customType = "Color")
|
|
22
|
+
public void setColor(DrawingView view, int color) {
|
|
23
|
+
view.setColor(color);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@ReactProp(name = "strokeWidth")
|
|
27
|
+
public void setStrokeWidth(DrawingView view, float width) {
|
|
28
|
+
view.setStrokeWidth(width);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@ReactProp(name = "clearCanvas")
|
|
32
|
+
public void clearCanvas(DrawingView view, boolean clear) {
|
|
33
|
+
if (clear) {
|
|
34
|
+
view.clearCanvas();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
}
|