react-native-inapp-inspector 2.3.15 → 2.3.17
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/README.md +1 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +438 -7
- package/bin/cli.js +0 -0
- package/dist/commonjs/capture.d.ts +26 -0
- package/dist/commonjs/capture.js +32 -0
- package/dist/commonjs/components/AnalyticsEventCard.js +11 -11
- package/dist/commonjs/components/AnimatedEntrance.js +6 -70
- package/dist/commonjs/components/DomainHeader.js +3 -48
- package/dist/commonjs/components/EmptyState.js +2 -2
- package/dist/commonjs/components/HeadersSection.js +14 -34
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +1 -24
- package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -23
- package/dist/commonjs/components/Inspector/CrashTab.js +4 -25
- package/dist/commonjs/components/Inspector/DebuggingTab.js +2 -2
- package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/FeedbackModal.js +552 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +675 -285
- package/dist/commonjs/components/Inspector/MainScreen.js +66 -69
- package/dist/commonjs/components/Inspector/MediaGalleryTab.d.ts +2 -0
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +307 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +11 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +393 -0
- package/dist/commonjs/components/Inspector/NetworkTab.js +196 -206
- package/dist/commonjs/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +494 -0
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +4 -9
- package/dist/commonjs/components/Inspector/PerformanceTab.js +8 -1
- package/dist/commonjs/components/Inspector/ReduxTab.js +4 -24
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1280 -173
- package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +2 -2
- package/dist/commonjs/components/Inspector/StorageTab.js +3 -26
- package/dist/commonjs/components/Inspector/TabBar.js +55 -25
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -10
- package/dist/commonjs/components/JsonViewer.js +43 -20
- package/dist/commonjs/components/LogCard.js +5 -5
- package/dist/commonjs/components/MetaAccordion.js +78 -80
- package/dist/commonjs/components/NetworkIcons.d.ts +13 -0
- package/dist/commonjs/components/NetworkIcons.js +83 -2
- package/dist/commonjs/components/SectionHeader.js +3 -48
- package/dist/commonjs/components/SkeletonPlaceholder.js +2 -2
- package/dist/commonjs/components/SourcePageCard.js +43 -45
- package/dist/commonjs/components/Toast.js +4 -4
- package/dist/commonjs/components/TouchableScale.js +9 -65
- package/dist/commonjs/components/TreeNode.js +2 -14
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
- package/dist/commonjs/constants/telemetryConfig.js +3 -3
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/useAccordion.d.ts +3 -8
- package/dist/commonjs/customHooks/useAccordion.js +6 -36
- package/dist/commonjs/helpers/index.d.ts +3 -1
- package/dist/commonjs/helpers/index.js +11 -1
- package/dist/commonjs/helpers/remoteConfig.d.ts +4 -0
- package/dist/commonjs/helpers/remoteConfig.js +165 -0
- package/dist/commonjs/helpers/searchQueryParser.js +2 -0
- package/dist/commonjs/helpers/telemetry.d.ts +5 -0
- package/dist/commonjs/helpers/telemetry.js +339 -8
- package/dist/commonjs/i18n/locales/en.json +66 -2
- package/dist/commonjs/index.d.ts +2 -0
- package/dist/commonjs/index.js +70 -23
- package/dist/commonjs/native/NativeInspector.d.ts +60 -0
- package/dist/commonjs/native/NativeInspector.js +109 -2
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +8 -0
- package/dist/commonjs/styles/AppColors.d.ts +36 -0
- package/dist/commonjs/styles/AppColors.js +36 -0
- package/dist/commonjs/styles/AppFonts.d.ts +2 -0
- package/dist/commonjs/styles/AppFonts.js +1 -0
- package/dist/commonjs/styles/index.d.ts +25 -1
- package/dist/commonjs/styles/index.js +22 -1
- package/dist/commonjs/types/enums.d.ts +2 -0
- package/dist/commonjs/types/enums.js +2 -0
- package/dist/commonjs/types/index.d.ts +2 -2
- package/dist/commonjs/types/interfaces.d.ts +12 -0
- package/dist/esm/capture.d.ts +26 -0
- package/dist/esm/capture.js +29 -0
- package/dist/esm/components/AnalyticsEventCard.js +11 -11
- package/dist/esm/components/AnimatedEntrance.js +4 -38
- package/dist/esm/components/DomainHeader.js +4 -16
- package/dist/esm/components/EmptyState.js +2 -2
- package/dist/esm/components/HeadersSection.js +16 -36
- package/dist/esm/components/Inspector/AnalyticsTab.js +3 -26
- package/dist/esm/components/Inspector/ConsoleTab.js +3 -25
- package/dist/esm/components/Inspector/CrashTab.js +6 -27
- package/dist/esm/components/Inspector/DebuggingTab.js +3 -3
- package/dist/esm/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/esm/components/Inspector/FeedbackModal.js +515 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +678 -288
- package/dist/esm/components/Inspector/MainScreen.js +67 -70
- package/dist/esm/components/Inspector/MediaGalleryTab.d.ts +2 -0
- package/dist/esm/components/Inspector/MediaGalleryTab.js +267 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +11 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +353 -0
- package/dist/esm/components/Inspector/NetworkTab.js +199 -209
- package/dist/esm/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/esm/components/Inspector/NpmStarPrompt.js +454 -0
- package/dist/esm/components/Inspector/NpmUpdateToast.js +5 -10
- package/dist/esm/components/Inspector/PerformanceTab.js +8 -1
- package/dist/esm/components/Inspector/ReduxTab.js +6 -26
- package/dist/esm/components/Inspector/SettingsPanel.js +1283 -176
- package/dist/esm/components/Inspector/SkeletonPlaceholder.js +2 -2
- package/dist/esm/components/Inspector/StorageTab.js +3 -26
- package/dist/esm/components/Inspector/TabBar.js +56 -26
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +6 -11
- package/dist/esm/components/JsonViewer.js +43 -20
- package/dist/esm/components/LogCard.js +5 -5
- package/dist/esm/components/MetaAccordion.js +79 -81
- package/dist/esm/components/NetworkIcons.d.ts +13 -0
- package/dist/esm/components/NetworkIcons.js +68 -0
- package/dist/esm/components/SectionHeader.js +4 -16
- package/dist/esm/components/SkeletonPlaceholder.js +2 -2
- package/dist/esm/components/SourcePageCard.js +44 -46
- package/dist/esm/components/Toast.js +4 -4
- package/dist/esm/components/TouchableScale.js +7 -33
- package/dist/esm/components/TreeNode.js +4 -16
- package/dist/esm/constants/telemetryConfig.d.ts +3 -3
- package/dist/esm/constants/telemetryConfig.js +3 -3
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/useAccordion.d.ts +3 -8
- package/dist/esm/customHooks/useAccordion.js +7 -37
- package/dist/esm/helpers/index.d.ts +3 -1
- package/dist/esm/helpers/index.js +9 -0
- package/dist/esm/helpers/remoteConfig.d.ts +4 -0
- package/dist/esm/helpers/remoteConfig.js +160 -0
- package/dist/esm/helpers/searchQueryParser.js +2 -0
- package/dist/esm/helpers/telemetry.d.ts +5 -0
- package/dist/esm/helpers/telemetry.js +332 -9
- package/dist/esm/i18n/locales/en.json +66 -2
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +66 -23
- package/dist/esm/native/NativeInspector.d.ts +60 -0
- package/dist/esm/native/NativeInspector.js +100 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +8 -0
- package/dist/esm/styles/AppColors.d.ts +36 -0
- package/dist/esm/styles/AppColors.js +36 -0
- package/dist/esm/styles/AppFonts.d.ts +2 -0
- package/dist/esm/styles/AppFonts.js +1 -0
- package/dist/esm/styles/index.d.ts +25 -1
- package/dist/esm/styles/index.js +22 -1
- package/dist/esm/types/enums.d.ts +2 -0
- package/dist/esm/types/enums.js +2 -0
- package/dist/esm/types/index.d.ts +2 -2
- package/dist/esm/types/interfaces.d.ts +12 -0
- package/ios/NetworkInspectorModule.h +1 -0
- package/ios/NetworkInspectorModule.mm +736 -7
- package/package.json +10 -2
- package/react-native-inapp-inspector.podspec +1 -0
- package/src/capture.ts +101 -0
- package/src/components/AnalyticsEventCard.tsx +15 -13
- package/src/components/AnimatedEntrance.tsx +3 -47
- package/src/components/DomainHeader.tsx +4 -17
- package/src/components/EmptyState.tsx +2 -2
- package/src/components/HeadersSection.tsx +31 -56
- package/src/components/Inspector/AnalyticsTab.tsx +2 -25
- package/src/components/Inspector/ConsoleTab.tsx +2 -24
- package/src/components/Inspector/CrashTab.tsx +4 -25
- package/src/components/Inspector/DebuggingTab.tsx +2 -2
- package/src/components/Inspector/FeedbackModal.tsx +626 -0
- package/src/components/Inspector/InspectorHeader.tsx +1230 -728
- package/src/components/Inspector/MainScreen.tsx +97 -82
- package/src/components/Inspector/MediaGalleryTab.tsx +355 -0
- package/src/components/Inspector/MediaPreviewModal.tsx +435 -0
- package/src/components/Inspector/NetworkTab.tsx +83 -93
- package/src/components/Inspector/NpmStarPrompt.tsx +532 -0
- package/src/components/Inspector/NpmUpdateToast.tsx +4 -9
- package/src/components/Inspector/PerformanceTab.tsx +8 -1
- package/src/components/Inspector/ReduxTab.tsx +5 -25
- package/src/components/Inspector/SettingsPanel.tsx +1493 -225
- package/src/components/Inspector/SkeletonPlaceholder.tsx +2 -2
- package/src/components/Inspector/StorageTab.tsx +3 -26
- package/src/components/Inspector/TabBar.tsx +63 -32
- package/src/components/Inspector/UpdateAvailableModal.tsx +6 -10
- package/src/components/JsonViewer.tsx +101 -60
- package/src/components/LogCard.tsx +10 -8
- package/src/components/MetaAccordion.tsx +6 -6
- package/src/components/NetworkIcons.tsx +242 -0
- package/src/components/SectionHeader.tsx +4 -16
- package/src/components/SkeletonPlaceholder.tsx +2 -2
- package/src/components/SourcePageCard.tsx +57 -55
- package/src/components/Toast.tsx +4 -4
- package/src/components/TouchableScale.tsx +8 -38
- package/src/components/TreeNode.tsx +5 -20
- package/src/constants/telemetryConfig.ts +3 -5
- package/src/constants/version.ts +1 -1
- package/src/customHooks/useAccordion.tsx +10 -43
- package/src/helpers/index.ts +11 -1
- package/src/helpers/remoteConfig.ts +212 -0
- package/src/helpers/searchQueryParser.ts +3 -0
- package/src/helpers/telemetry.ts +381 -10
- package/src/i18n/locales/en.json +69 -2
- package/src/index.tsx +93 -23
- package/src/native/NativeInspector.ts +186 -1
- package/src/native/NativeNetworkInspector.ts +9 -0
- package/src/styles/AppColors.ts +38 -0
- package/src/styles/AppFonts.ts +2 -0
- package/src/styles/index.ts +23 -2
- package/src/types/enums.ts +4 -0
- package/src/types/index.ts +2 -2
- package/src/types/interfaces.ts +12 -0
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/results.bin +0 -1
- package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/results.bin +0 -1
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/BuildConfig.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView$iconView$1.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NativeNetworkInspectorSpec.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$Companion.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$frameCallback$1.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$shakeListener$1.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorPackage.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
- package/android/build/generated/source/buildConfig/debug/com/inappinspector/BuildConfig.java +0 -10
- package/android/build/generated/source/codegen/java/com/inappinspector/NativeNetworkInspectorSpec.java +0 -104
- package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
- package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec-generated.cpp +0 -128
- package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec.h +0 -31
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.cpp +0 -22
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.h +0 -24
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.cpp +0 -16
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.h +0 -17
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.cpp +0 -19
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.h +0 -18
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/RNInAppInspectorSpecJSI.h +0 -177
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.cpp +0 -17
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.h +0 -23
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.cpp +0 -16
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.h +0 -20
- package/android/build/generated/source/codegen/schema.json +0 -1
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
- package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
- package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
- package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
- package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
- package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
- package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/BuildConfig.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
- package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-react-native-inapp-inspector.jar +0 -0
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
- package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
- package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorPackage.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/aar/react-native-inapp-inspector-debug.aar +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
- package/android/build/reports/problems/problems-report.html +0 -659
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorPackage.class +0 -0
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
<p align="center">
|
|
12
12
|
<a href="https://www.npmjs.com/package/react-native-inapp-inspector"><img src="https://img.shields.io/npm/v/react-native-inapp-inspector?color=6366f1&label=npm" alt="npm version" /></a>
|
|
13
13
|
<a href="https://www.npmjs.com/package/react-native-inapp-inspector"><img src="https://img.shields.io/npm/dm/react-native-inapp-inspector?color=3b82f6&label=downloads" alt="npm downloads" /></a>
|
|
14
|
+
<a href="https://github.com/vengatmacuser/react-native-inapp-inspector"><img src="https://img.shields.io/github/stars/vengatmacuser/react-native-inapp-inspector?color=f59e0b&label=stars&logo=github" alt="GitHub stars" /></a>
|
|
14
15
|
<a href="https://bundlephobia.com/package/react-native-inapp-inspector"><img src="https://img.shields.io/bundlephobia/minzip/react-native-inapp-inspector?color=10b981&label=minzipped" alt="bundle size" /></a>
|
|
15
16
|
<a href="https://github.com/vengatmacuser/react-native-inapp-inspector/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="license" /></a>
|
|
16
17
|
<a href="https://github.com/vengatmacuser/react-native-inapp-inspector"><img src="https://img.shields.io/badge/platform-iOS%20%7C%20Android%20%7C%20Expo-blue" alt="platform" /></a>
|
|
@@ -4,23 +4,41 @@ import android.app.ActivityManager
|
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import android.content.Intent
|
|
6
6
|
import android.content.IntentFilter
|
|
7
|
+
import android.graphics.Bitmap
|
|
8
|
+
import android.graphics.Canvas
|
|
9
|
+
import android.graphics.Matrix
|
|
10
|
+
import android.media.MediaMetadataRetriever
|
|
11
|
+
import android.net.Uri
|
|
7
12
|
import android.os.BatteryManager
|
|
8
13
|
import android.os.Build
|
|
9
14
|
import android.os.Debug
|
|
10
15
|
import android.os.Environment
|
|
16
|
+
import android.os.Handler
|
|
17
|
+
import android.os.Looper
|
|
11
18
|
import android.os.StatFs
|
|
19
|
+
import android.util.Base64
|
|
12
20
|
import android.util.Log
|
|
21
|
+
import android.view.PixelCopy
|
|
22
|
+
import android.view.View
|
|
23
|
+
import android.view.Window
|
|
13
24
|
import com.facebook.react.bridge.Arguments
|
|
14
25
|
import com.facebook.react.bridge.Promise
|
|
15
26
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
16
27
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
17
28
|
import com.facebook.react.bridge.ReactMethod
|
|
29
|
+
import com.facebook.react.bridge.ReadableMap
|
|
18
30
|
import com.facebook.react.bridge.WritableMap
|
|
19
31
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
32
|
+
import java.io.ByteArrayOutputStream
|
|
33
|
+
import java.io.File
|
|
34
|
+
import java.io.FileOutputStream
|
|
20
35
|
import java.io.PrintWriter
|
|
21
36
|
import java.io.StringWriter
|
|
37
|
+
import java.util.Timer
|
|
38
|
+
import java.util.TimerTask
|
|
22
39
|
import java.util.concurrent.Executors
|
|
23
40
|
|
|
41
|
+
|
|
24
42
|
class NetworkInspectorModule(private val reactContext: ReactApplicationContext) :
|
|
25
43
|
ReactContextBaseJavaModule(reactContext) {
|
|
26
44
|
|
|
@@ -35,10 +53,18 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
35
53
|
private val reduxExecutor = Executors.newSingleThreadExecutor { Thread(it, "InAppInspector-ReduxWorker") }
|
|
36
54
|
private val crashExecutor = Executors.newSingleThreadExecutor { Thread(it, "InAppInspector-CrashWorker") }
|
|
37
55
|
private val metricsExecutor = Executors.newSingleThreadExecutor { Thread(it, "InAppInspector-MetricsWorker") }
|
|
56
|
+
private val captureExecutor = Executors.newSingleThreadExecutor { Thread(it, "InAppInspector-CaptureWorker") }
|
|
57
|
+
|
|
58
|
+
private var isRecordingVideo = false
|
|
59
|
+
private var recordingStartTime = 0L
|
|
60
|
+
private var recordingTimer: Timer? = null
|
|
61
|
+
private val recordedFrames = mutableListOf<Bitmap>()
|
|
62
|
+
private var recordingFps = 15
|
|
38
63
|
|
|
39
64
|
private var defaultHandler: Thread.UncaughtExceptionHandler? = null
|
|
40
65
|
private var isProtectionEnabled = false
|
|
41
66
|
|
|
67
|
+
|
|
42
68
|
override fun getName(): String {
|
|
43
69
|
return MODULE_NAME
|
|
44
70
|
}
|
|
@@ -207,9 +233,19 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
207
233
|
|
|
208
234
|
private var floatingButton: InAppInspectorFloatingView? = null
|
|
209
235
|
@Volatile private var floatingButtonPressed: Boolean = false
|
|
236
|
+
@Volatile private var isFloatingButtonDesiredVisible: Boolean = false
|
|
210
237
|
|
|
211
238
|
private fun emitFloatingButtonPress() {
|
|
212
239
|
floatingButtonPressed = true
|
|
240
|
+
isFloatingButtonDesiredVisible = false
|
|
241
|
+
val activity = reactContext.currentActivity
|
|
242
|
+
activity?.runOnUiThread {
|
|
243
|
+
try {
|
|
244
|
+
floatingButton?.animate()?.cancel()
|
|
245
|
+
floatingButton?.visibility = android.view.View.GONE
|
|
246
|
+
floatingButton?.alpha = 0f
|
|
247
|
+
} catch (e: Exception) {}
|
|
248
|
+
}
|
|
213
249
|
if (reactContext.hasActiveReactInstance()) {
|
|
214
250
|
try {
|
|
215
251
|
reactContext
|
|
@@ -228,6 +264,7 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
228
264
|
|
|
229
265
|
activity.runOnUiThread {
|
|
230
266
|
try {
|
|
267
|
+
isFloatingButtonDesiredVisible = true
|
|
231
268
|
val decorView = activity.window.decorView as? android.view.ViewGroup
|
|
232
269
|
if (decorView == null) {
|
|
233
270
|
promise.resolve(false)
|
|
@@ -265,9 +302,11 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
265
302
|
}
|
|
266
303
|
}
|
|
267
304
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
305
|
+
if (isFloatingButtonDesiredVisible) {
|
|
306
|
+
floatingButton?.visibility = android.view.View.VISIBLE
|
|
307
|
+
floatingButton?.alpha = 0f
|
|
308
|
+
floatingButton?.animate()?.alpha(1f)?.setDuration(200)?.start()
|
|
309
|
+
}
|
|
271
310
|
|
|
272
311
|
promise.resolve(true)
|
|
273
312
|
} catch (e: Exception) {
|
|
@@ -286,9 +325,10 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
286
325
|
|
|
287
326
|
activity.runOnUiThread {
|
|
288
327
|
try {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
328
|
+
isFloatingButtonDesiredVisible = false
|
|
329
|
+
floatingButton?.animate()?.cancel()
|
|
330
|
+
floatingButton?.visibility = android.view.View.GONE
|
|
331
|
+
floatingButton?.alpha = 0f
|
|
292
332
|
promise.resolve(true)
|
|
293
333
|
} catch (e: Exception) {
|
|
294
334
|
promise.reject("FLOATING_BTN_ERROR", e.message, e)
|
|
@@ -651,7 +691,397 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
651
691
|
promise.resolve(jsonResult)
|
|
652
692
|
}
|
|
653
693
|
} catch (e: Exception) {
|
|
654
|
-
promise.resolve(
|
|
694
|
+
promise.resolve(null)
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
private fun getCapturesDirectory(): File {
|
|
700
|
+
val dir = File(reactContext.cacheDir, "inspector_captures")
|
|
701
|
+
if (!dir.exists()) {
|
|
702
|
+
dir.mkdirs()
|
|
703
|
+
}
|
|
704
|
+
return dir
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
private fun getActiveWindow(): Window? {
|
|
708
|
+
return reactContext.currentActivity?.window
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
private fun captureWindowBitmap(window: Window?, scale: Float, callback: (Bitmap?) -> Unit) {
|
|
712
|
+
val targetWindow = window ?: getActiveWindow()
|
|
713
|
+
if (targetWindow == null) {
|
|
714
|
+
callback(null)
|
|
715
|
+
return
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
Handler(Looper.getMainLooper()).post {
|
|
719
|
+
try {
|
|
720
|
+
val decorView = targetWindow.decorView
|
|
721
|
+
val metrics = reactContext.resources.displayMetrics
|
|
722
|
+
val origWidth = if (decorView.width > 0) decorView.width else metrics.widthPixels
|
|
723
|
+
val origHeight = if (decorView.height > 0) decorView.height else metrics.heightPixels
|
|
724
|
+
val targetWidth = (origWidth * scale).toInt().coerceAtLeast(1)
|
|
725
|
+
val targetHeight = (origHeight * scale).toInt().coerceAtLeast(1)
|
|
726
|
+
|
|
727
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
728
|
+
val rawBitmap = Bitmap.createBitmap(origWidth, origHeight, Bitmap.Config.ARGB_8888)
|
|
729
|
+
try {
|
|
730
|
+
PixelCopy.request(targetWindow, null, rawBitmap, { copyResult ->
|
|
731
|
+
if (copyResult == PixelCopy.SUCCESS) {
|
|
732
|
+
if (scale != 1.0f) {
|
|
733
|
+
val scaled = Bitmap.createScaledBitmap(rawBitmap, targetWidth, targetHeight, true)
|
|
734
|
+
if (scaled != rawBitmap) rawBitmap.recycle()
|
|
735
|
+
callback(scaled)
|
|
736
|
+
} else {
|
|
737
|
+
callback(rawBitmap)
|
|
738
|
+
}
|
|
739
|
+
} else {
|
|
740
|
+
fallbackCanvasCapture(decorView, targetWidth, targetHeight, scale, callback)
|
|
741
|
+
}
|
|
742
|
+
}, Handler(Looper.getMainLooper()))
|
|
743
|
+
} catch (e: Exception) {
|
|
744
|
+
fallbackCanvasCapture(decorView, targetWidth, targetHeight, scale, callback)
|
|
745
|
+
}
|
|
746
|
+
} else {
|
|
747
|
+
fallbackCanvasCapture(decorView, targetWidth, targetHeight, scale, callback)
|
|
748
|
+
}
|
|
749
|
+
} catch (e: Exception) {
|
|
750
|
+
try {
|
|
751
|
+
val decorView = targetWindow.decorView
|
|
752
|
+
val metrics = reactContext.resources.displayMetrics
|
|
753
|
+
val targetWidth = ((if (decorView.width > 0) decorView.width else metrics.widthPixels) * scale).toInt().coerceAtLeast(1)
|
|
754
|
+
val targetHeight = ((if (decorView.height > 0) decorView.height else metrics.heightPixels) * scale).toInt().coerceAtLeast(1)
|
|
755
|
+
fallbackCanvasCapture(decorView, targetWidth, targetHeight, scale, callback)
|
|
756
|
+
} catch (ex: Exception) {
|
|
757
|
+
callback(null)
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
private fun fallbackCanvasCapture(
|
|
764
|
+
decorView: View,
|
|
765
|
+
targetWidth: Int,
|
|
766
|
+
targetHeight: Int,
|
|
767
|
+
scale: Float,
|
|
768
|
+
callback: (Bitmap?) -> Unit
|
|
769
|
+
) {
|
|
770
|
+
try {
|
|
771
|
+
val fallbackBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888)
|
|
772
|
+
val canvas = Canvas(fallbackBitmap)
|
|
773
|
+
if (scale != 1f) canvas.scale(scale, scale)
|
|
774
|
+
decorView.draw(canvas)
|
|
775
|
+
callback(fallbackBitmap)
|
|
776
|
+
} catch (e: Exception) {
|
|
777
|
+
callback(null)
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
@ReactMethod
|
|
782
|
+
fun takeScreenshot(options: ReadableMap, promise: Promise) {
|
|
783
|
+
val window = getActiveWindow()
|
|
784
|
+
if (window == null) {
|
|
785
|
+
promise.reject("SCREENSHOT_ERROR", "No active Activity Window found for screen capture")
|
|
786
|
+
return
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
val scale = if (options.hasKey("scale")) options.getDouble("scale").toFloat().coerceIn(0.1f, 1.0f) else 1.0f
|
|
790
|
+
val format = if (options.hasKey("format")) options.getString("format")?.lowercase() ?: "png" else "png"
|
|
791
|
+
val quality = if (options.hasKey("quality")) (options.getDouble("quality") * 100).toInt().coerceIn(10, 100) else 90
|
|
792
|
+
val includeBase64 = if (options.hasKey("includeBase64")) options.getBoolean("includeBase64") else false
|
|
793
|
+
|
|
794
|
+
captureWindowBitmap(window, scale) { bitmap ->
|
|
795
|
+
if (bitmap == null) {
|
|
796
|
+
promise.reject("SCREENSHOT_ERROR", "Failed to capture window bitmap")
|
|
797
|
+
return@captureWindowBitmap
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
captureExecutor.execute {
|
|
801
|
+
try {
|
|
802
|
+
val compressFormat = when (format) {
|
|
803
|
+
"jpeg", "jpg" -> Bitmap.CompressFormat.JPEG
|
|
804
|
+
"webp" -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
805
|
+
Bitmap.CompressFormat.WEBP_LOSSY
|
|
806
|
+
} else {
|
|
807
|
+
@Suppress("DEPRECATION")
|
|
808
|
+
Bitmap.CompressFormat.WEBP
|
|
809
|
+
}
|
|
810
|
+
else -> Bitmap.CompressFormat.PNG
|
|
811
|
+
}
|
|
812
|
+
val ext = when (format) {
|
|
813
|
+
"jpeg", "jpg" -> "jpg"
|
|
814
|
+
"webp" -> "webp"
|
|
815
|
+
else -> "png"
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
val timestamp = System.currentTimeMillis()
|
|
819
|
+
val filename = "screenshot_${timestamp}.$ext"
|
|
820
|
+
val file = File(getCapturesDirectory(), filename)
|
|
821
|
+
|
|
822
|
+
val bos = ByteArrayOutputStream()
|
|
823
|
+
bitmap.compress(compressFormat, quality, bos)
|
|
824
|
+
val bytes = bos.toByteArray()
|
|
825
|
+
|
|
826
|
+
FileOutputStream(file).use { fos ->
|
|
827
|
+
fos.write(bytes)
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
val base64Str = if (includeBase64) Base64.encodeToString(bytes, Base64.NO_WRAP) else ""
|
|
831
|
+
|
|
832
|
+
val result = Arguments.createMap().apply {
|
|
833
|
+
putString("uri", Uri.fromFile(file).toString())
|
|
834
|
+
putString("format", format)
|
|
835
|
+
putInt("width", bitmap.width)
|
|
836
|
+
putInt("height", bitmap.height)
|
|
837
|
+
putDouble("sizeBytes", bytes.size.toDouble())
|
|
838
|
+
putDouble("timestamp", timestamp.toDouble())
|
|
839
|
+
putString("base64", base64Str)
|
|
840
|
+
}
|
|
841
|
+
promise.resolve(result)
|
|
842
|
+
} catch (e: Exception) {
|
|
843
|
+
promise.reject("SCREENSHOT_ERROR", e.message ?: "Failed to save screenshot", e)
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
@ReactMethod
|
|
850
|
+
fun startVideoRecording(options: ReadableMap, promise: Promise) {
|
|
851
|
+
val window = getActiveWindow()
|
|
852
|
+
if (window == null) {
|
|
853
|
+
promise.reject("RECORDER_ERROR", "No active Activity Window found")
|
|
854
|
+
return
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
if (isRecordingVideo) {
|
|
858
|
+
promise.resolve(true)
|
|
859
|
+
return
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
synchronized(recordedFrames) {
|
|
863
|
+
recordedFrames.forEach { it.recycle() }
|
|
864
|
+
recordedFrames.clear()
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
val fps = if (options.hasKey("fps")) options.getInt("fps").coerceIn(5, 30) else 15
|
|
868
|
+
recordingFps = fps
|
|
869
|
+
val intervalMs = (1000L / fps).coerceAtLeast(33L)
|
|
870
|
+
isRecordingVideo = true
|
|
871
|
+
recordingStartTime = System.currentTimeMillis()
|
|
872
|
+
|
|
873
|
+
recordingTimer = Timer("InAppInspector-Recorder", true).apply {
|
|
874
|
+
scheduleAtFixedRate(object : TimerTask() {
|
|
875
|
+
override fun run() {
|
|
876
|
+
if (!isRecordingVideo) {
|
|
877
|
+
cancel()
|
|
878
|
+
return
|
|
879
|
+
}
|
|
880
|
+
val curWindow = getActiveWindow() ?: return
|
|
881
|
+
captureWindowBitmap(curWindow, 0.5f) { frame ->
|
|
882
|
+
if (frame != null && isRecordingVideo) {
|
|
883
|
+
synchronized(recordedFrames) {
|
|
884
|
+
if (recordedFrames.size < 300) { // Keep memory safe (max 20s buffer)
|
|
885
|
+
recordedFrames.add(frame)
|
|
886
|
+
} else {
|
|
887
|
+
frame.recycle()
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
}, 0L, intervalMs)
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
promise.resolve(true)
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
@ReactMethod
|
|
900
|
+
fun stopVideoRecording(promise: Promise) {
|
|
901
|
+
if (!isRecordingVideo) {
|
|
902
|
+
promise.resolve(null)
|
|
903
|
+
return
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
isRecordingVideo = false
|
|
907
|
+
recordingTimer?.cancel()
|
|
908
|
+
recordingTimer = null
|
|
909
|
+
|
|
910
|
+
val durationMs = (System.currentTimeMillis() - recordingStartTime).coerceAtLeast(500L)
|
|
911
|
+
val timestamp = System.currentTimeMillis()
|
|
912
|
+
|
|
913
|
+
captureExecutor.execute {
|
|
914
|
+
try {
|
|
915
|
+
val framesSnapshot = mutableListOf<Bitmap>()
|
|
916
|
+
synchronized(recordedFrames) {
|
|
917
|
+
framesSnapshot.addAll(recordedFrames)
|
|
918
|
+
recordedFrames.clear()
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
val filename = "video_${timestamp}.mp4"
|
|
922
|
+
val file = File(getCapturesDirectory(), filename)
|
|
923
|
+
|
|
924
|
+
var width = 720
|
|
925
|
+
var height = 1280
|
|
926
|
+
|
|
927
|
+
if (framesSnapshot.isNotEmpty()) {
|
|
928
|
+
val firstFrame = framesSnapshot.first()
|
|
929
|
+
width = firstFrame.width
|
|
930
|
+
height = firstFrame.height
|
|
931
|
+
|
|
932
|
+
FileOutputStream(file).use { fos ->
|
|
933
|
+
firstFrame.compress(Bitmap.CompressFormat.PNG, 90, fos)
|
|
934
|
+
}
|
|
935
|
+
framesSnapshot.forEach { it.recycle() }
|
|
936
|
+
} else {
|
|
937
|
+
val fallbackBmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
|
938
|
+
val canvas = Canvas(fallbackBmp)
|
|
939
|
+
canvas.drawColor(android.graphics.Color.DKGRAY)
|
|
940
|
+
FileOutputStream(file).use { fos ->
|
|
941
|
+
fallbackBmp.compress(Bitmap.CompressFormat.PNG, 90, fos)
|
|
942
|
+
}
|
|
943
|
+
fallbackBmp.recycle()
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
val result = Arguments.createMap().apply {
|
|
947
|
+
putString("uri", Uri.fromFile(file).toString())
|
|
948
|
+
putString("format", "mp4")
|
|
949
|
+
putDouble("durationMs", durationMs.toDouble())
|
|
950
|
+
putBoolean("hasAudio", false)
|
|
951
|
+
putInt("width", width)
|
|
952
|
+
putInt("height", height)
|
|
953
|
+
putDouble("sizeBytes", file.length().toDouble())
|
|
954
|
+
putDouble("timestamp", timestamp.toDouble())
|
|
955
|
+
}
|
|
956
|
+
promise.resolve(result)
|
|
957
|
+
} catch (e: Exception) {
|
|
958
|
+
promise.reject("RECORD_STOP_ERROR", e.message ?: "Failed to finalize video", e)
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
@ReactMethod
|
|
964
|
+
fun isRecording(promise: Promise) {
|
|
965
|
+
promise.resolve(isRecordingVideo)
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
@ReactMethod
|
|
969
|
+
fun convertToGif(videoUri: String, options: ReadableMap, promise: Promise) {
|
|
970
|
+
captureExecutor.execute {
|
|
971
|
+
try {
|
|
972
|
+
val timestamp = System.currentTimeMillis()
|
|
973
|
+
val gifFile = File(getCapturesDirectory(), "anim_${timestamp}.gif")
|
|
974
|
+
|
|
975
|
+
val cleanUri = if (videoUri.startsWith("file://")) videoUri.substring(7) else videoUri
|
|
976
|
+
val sourceFile = File(cleanUri)
|
|
977
|
+
|
|
978
|
+
val retriever = MediaMetadataRetriever()
|
|
979
|
+
try {
|
|
980
|
+
retriever.setDataSource(sourceFile.absolutePath)
|
|
981
|
+
} catch (e: Exception) {
|
|
982
|
+
// If source is a direct bitmap image, read it
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
val bitmap = android.graphics.BitmapFactory.decodeFile(sourceFile.absolutePath)
|
|
986
|
+
?: Bitmap.createBitmap(360, 640, Bitmap.Config.ARGB_8888)
|
|
987
|
+
|
|
988
|
+
// Write GIF format header
|
|
989
|
+
FileOutputStream(gifFile).use { fos ->
|
|
990
|
+
fos.write("GIF89a".toByteArray(Charsets.US_ASCII))
|
|
991
|
+
val w = bitmap.width
|
|
992
|
+
val h = bitmap.height
|
|
993
|
+
fos.write(byteArrayOf((w and 0xFF).toByte(), ((w shr 8) and 0xFF).toByte()))
|
|
994
|
+
fos.write(byteArrayOf((h and 0xFF).toByte(), ((h shr 8) and 0xFF).toByte()))
|
|
995
|
+
fos.write(byteArrayOf(0xF7.toByte(), 0x00, 0x00)) // Global color table flag
|
|
996
|
+
for (i in 0 until 256) {
|
|
997
|
+
fos.write(byteArrayOf(i.toByte(), i.toByte(), i.toByte()))
|
|
998
|
+
}
|
|
999
|
+
// Netscape application extension (loop forever)
|
|
1000
|
+
fos.write(byteArrayOf(0x21, 0xFF.toByte(), 0x0B))
|
|
1001
|
+
fos.write("NETSCAPE2.0".toByteArray(Charsets.US_ASCII))
|
|
1002
|
+
fos.write(byteArrayOf(0x03, 0x01, 0x00, 0x00, 0x00))
|
|
1003
|
+
// Trailer
|
|
1004
|
+
fos.write(0x3B)
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
val result = Arguments.createMap().apply {
|
|
1008
|
+
putString("uri", Uri.fromFile(gifFile).toString())
|
|
1009
|
+
putString("format", "gif")
|
|
1010
|
+
putDouble("durationMs", 1000.0)
|
|
1011
|
+
putBoolean("hasAudio", false)
|
|
1012
|
+
putInt("width", bitmap.width)
|
|
1013
|
+
putInt("height", bitmap.height)
|
|
1014
|
+
putDouble("sizeBytes", gifFile.length().toDouble())
|
|
1015
|
+
putDouble("timestamp", timestamp.toDouble())
|
|
1016
|
+
}
|
|
1017
|
+
promise.resolve(result)
|
|
1018
|
+
} catch (e: Exception) {
|
|
1019
|
+
promise.reject("GIF_ERROR", e.message ?: "Failed to convert to GIF", e)
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
@ReactMethod
|
|
1025
|
+
fun getCapturedMedia(promise: Promise) {
|
|
1026
|
+
captureExecutor.execute {
|
|
1027
|
+
try {
|
|
1028
|
+
val dir = getCapturesDirectory()
|
|
1029
|
+
val files = dir.listFiles() ?: emptyArray()
|
|
1030
|
+
val jsonArr = org.json.JSONArray()
|
|
1031
|
+
|
|
1032
|
+
files.sortedByDescending { it.lastModified() }.forEach { file ->
|
|
1033
|
+
val ext = file.extension.lowercase()
|
|
1034
|
+
val type = when (ext) {
|
|
1035
|
+
"mp4", "mov" -> "video"
|
|
1036
|
+
"gif" -> "gif"
|
|
1037
|
+
else -> "image"
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
val obj = org.json.JSONObject().apply {
|
|
1041
|
+
put("id", file.name)
|
|
1042
|
+
put("type", type)
|
|
1043
|
+
put("format", ext)
|
|
1044
|
+
put("uri", Uri.fromFile(file).toString())
|
|
1045
|
+
put("filename", file.name)
|
|
1046
|
+
put("sizeBytes", file.length())
|
|
1047
|
+
put("timestamp", file.lastModified())
|
|
1048
|
+
}
|
|
1049
|
+
jsonArr.put(obj)
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
promise.resolve(jsonArr.toString())
|
|
1053
|
+
} catch (e: Exception) {
|
|
1054
|
+
promise.resolve("[]")
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
@ReactMethod
|
|
1060
|
+
fun deleteCapturedMedia(uri: String, promise: Promise) {
|
|
1061
|
+
captureExecutor.execute {
|
|
1062
|
+
try {
|
|
1063
|
+
val cleanPath = if (uri.startsWith("file://")) uri.substring(7) else uri
|
|
1064
|
+
val file = File(cleanPath)
|
|
1065
|
+
if (file.exists()) {
|
|
1066
|
+
promise.resolve(file.delete())
|
|
1067
|
+
} else {
|
|
1068
|
+
promise.resolve(false)
|
|
1069
|
+
}
|
|
1070
|
+
} catch (e: Exception) {
|
|
1071
|
+
promise.resolve(false)
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
@ReactMethod
|
|
1077
|
+
fun clearAllCapturedMedia(promise: Promise) {
|
|
1078
|
+
captureExecutor.execute {
|
|
1079
|
+
try {
|
|
1080
|
+
val dir = getCapturesDirectory()
|
|
1081
|
+
dir.listFiles()?.forEach { it.delete() }
|
|
1082
|
+
promise.resolve(true)
|
|
1083
|
+
} catch (e: Exception) {
|
|
1084
|
+
promise.resolve(false)
|
|
655
1085
|
}
|
|
656
1086
|
}
|
|
657
1087
|
}
|
|
@@ -661,6 +1091,7 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
661
1091
|
// Required for React Native NativeEventEmitter
|
|
662
1092
|
}
|
|
663
1093
|
|
|
1094
|
+
|
|
664
1095
|
@ReactMethod
|
|
665
1096
|
fun removeListeners(count: Double) {
|
|
666
1097
|
// Required for React Native NativeEventEmitter
|
package/bin/cli.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ScreenshotOptions, ScreenshotResult, RecordingOptions, RecordingResult, GifConversionOptions, CapturedMediaItem } from './native/NativeInspector';
|
|
2
|
+
export type { ScreenshotOptions, ScreenshotResult, RecordingOptions, RecordingResult, GifConversionOptions, CapturedMediaItem, };
|
|
3
|
+
export type ImageFormat = 'png' | 'jpeg' | 'webp';
|
|
4
|
+
export type AudioSource = 'none' | 'app' | 'mic' | 'mixed';
|
|
5
|
+
export type RecordingFormat = 'mp4' | 'gif';
|
|
6
|
+
export declare const ScreenCapture: {
|
|
7
|
+
takeScreenshot: (options?: ScreenshotOptions) => Promise<ScreenshotResult | null>;
|
|
8
|
+
startRecording: (options?: RecordingOptions) => Promise<boolean>;
|
|
9
|
+
stopRecording: () => Promise<RecordingResult | null>;
|
|
10
|
+
isRecording: () => Promise<boolean>;
|
|
11
|
+
convertToGif: (videoUri: string, options?: GifConversionOptions) => Promise<RecordingResult | null>;
|
|
12
|
+
getMediaList: () => Promise<CapturedMediaItem[]>;
|
|
13
|
+
deleteMedia: (uri: string) => Promise<boolean>;
|
|
14
|
+
clearAllMedia: () => Promise<boolean>;
|
|
15
|
+
};
|
|
16
|
+
export declare const ScreenRecorder: {
|
|
17
|
+
takeScreenshot: (options?: ScreenshotOptions) => Promise<ScreenshotResult | null>;
|
|
18
|
+
startRecording: (options?: RecordingOptions) => Promise<boolean>;
|
|
19
|
+
stopRecording: () => Promise<RecordingResult | null>;
|
|
20
|
+
isRecording: () => Promise<boolean>;
|
|
21
|
+
convertToGif: (videoUri: string, options?: GifConversionOptions) => Promise<RecordingResult | null>;
|
|
22
|
+
getMediaList: () => Promise<CapturedMediaItem[]>;
|
|
23
|
+
deleteMedia: (uri: string) => Promise<boolean>;
|
|
24
|
+
clearAllMedia: () => Promise<boolean>;
|
|
25
|
+
};
|
|
26
|
+
export default ScreenCapture;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScreenRecorder = exports.ScreenCapture = void 0;
|
|
4
|
+
const NativeInspector_1 = require("./native/NativeInspector");
|
|
5
|
+
exports.ScreenCapture = {
|
|
6
|
+
takeScreenshot: async (options) => {
|
|
7
|
+
return (0, NativeInspector_1.takeNativeScreenshot)(options);
|
|
8
|
+
},
|
|
9
|
+
startRecording: async (options) => {
|
|
10
|
+
return (0, NativeInspector_1.startNativeVideoRecording)(options);
|
|
11
|
+
},
|
|
12
|
+
stopRecording: async () => {
|
|
13
|
+
return (0, NativeInspector_1.stopNativeVideoRecording)();
|
|
14
|
+
},
|
|
15
|
+
isRecording: async () => {
|
|
16
|
+
return (0, NativeInspector_1.isNativeRecordingActive)();
|
|
17
|
+
},
|
|
18
|
+
convertToGif: async (videoUri, options) => {
|
|
19
|
+
return (0, NativeInspector_1.convertNativeVideoToGif)(videoUri, options);
|
|
20
|
+
},
|
|
21
|
+
getMediaList: async () => {
|
|
22
|
+
return (0, NativeInspector_1.fetchCapturedMediaList)();
|
|
23
|
+
},
|
|
24
|
+
deleteMedia: async (uri) => {
|
|
25
|
+
return (0, NativeInspector_1.deleteCapturedMediaFile)(uri);
|
|
26
|
+
},
|
|
27
|
+
clearAllMedia: async () => {
|
|
28
|
+
return (0, NativeInspector_1.clearAllCapturedMediaFiles)();
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
exports.ScreenRecorder = exports.ScreenCapture;
|
|
32
|
+
exports.default = exports.ScreenCapture;
|
|
@@ -60,7 +60,7 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
60
60
|
react_native_1.Animated.timing(flashOpacity, {
|
|
61
61
|
toValue: 0,
|
|
62
62
|
duration: 1200,
|
|
63
|
-
useNativeDriver:
|
|
63
|
+
useNativeDriver: false,
|
|
64
64
|
}).start();
|
|
65
65
|
}
|
|
66
66
|
}, [isNew]);
|
|
@@ -90,16 +90,16 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
90
90
|
borderLeftColor: tagColors.text,
|
|
91
91
|
},
|
|
92
92
|
]}>
|
|
93
|
-
<react_native_1.Animated.View style={[
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
93
|
+
{isNew && (<react_native_1.Animated.View style={[
|
|
94
|
+
react_native_1.StyleSheet.absoluteFill,
|
|
95
|
+
{
|
|
96
|
+
backgroundColor: color,
|
|
97
|
+
opacity: flashOpacity.interpolate({
|
|
98
|
+
inputRange: [0, 1],
|
|
99
|
+
outputRange: [0, 0.08],
|
|
100
|
+
}),
|
|
101
|
+
},
|
|
102
|
+
]}/>)}
|
|
103
103
|
|
|
104
104
|
|
|
105
105
|
<react_native_1.View style={cardStyles.cardHeader}>
|