From fff04479a94c28e6bacf38ac723a79d627a2acdd Mon Sep 17 00:00:00 2001 From: Marcos Rodriguez Velez Date: Wed, 21 Feb 2024 21:38:31 -0400 Subject: [PATCH] wip --- hooks/usePrivacy.android.tsx | 35 -------------------- hooks/usePrivacy.ios.tsx | 35 -------------------- hooks/usePrivacy.tsx | 41 ++++++++++++++++++++++-- ios/BlueWallet.xcodeproj/project.pbxproj | 10 +++--- ios/Podfile.lock | 13 ++++---- package-lock.json | 39 +++++++--------------- package.json | 3 +- 7 files changed, 63 insertions(+), 113 deletions(-) delete mode 100644 hooks/usePrivacy.android.tsx delete mode 100644 hooks/usePrivacy.ios.tsx diff --git a/hooks/usePrivacy.android.tsx b/hooks/usePrivacy.android.tsx deleted file mode 100644 index 9b92fd1cc..000000000 --- a/hooks/usePrivacy.android.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useContext, useEffect, useCallback } from 'react'; -// @ts-ignore: react-native-obscure is not in the type definition -import Obscure from 'react-native-obscure'; -import { BlueStorageContext } from '../blue_modules/storage-context'; - -export const usePrivacy = () => { - const { isPrivacyBlurEnabled } = useContext(BlueStorageContext); - - const enableBlur = useCallback(() => { - if (!isPrivacyBlurEnabled) return; - Obscure.activateObscure(); - }, [isPrivacyBlurEnabled]); - - const disableBlur = useCallback(() => { - Obscure.deactivateObscure(); - }, []); // This doesn't depend on the isPrivacyBlurEnabled value - - useEffect(() => { - // Automatically activate or deactivate on mount and when isPrivacyBlurEnabled changes - if (isPrivacyBlurEnabled) { - enableBlur(); - } else { - disableBlur(); - } - - // Cleanup function to deactivate obscure when the component unmounts - return () => { - disableBlur(); - }; - }, [isPrivacyBlurEnabled, enableBlur, disableBlur]); - - return { enableBlur, disableBlur }; -}; - -export default usePrivacy; diff --git a/hooks/usePrivacy.ios.tsx b/hooks/usePrivacy.ios.tsx deleted file mode 100644 index 581cbbb94..000000000 --- a/hooks/usePrivacy.ios.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useContext, useEffect, useCallback } from 'react'; -// @ts-ignore: react-native-obscure is not in the type definition -import { enabled } from 'react-native-privacy-snapshot'; -import { BlueStorageContext } from '../blue_modules/storage-context'; - -export const usePrivacy = () => { - const { isPrivacyBlurEnabled } = useContext(BlueStorageContext); - - const enableBlur = useCallback(() => { - if (!isPrivacyBlurEnabled) return; - enabled(true); - }, [isPrivacyBlurEnabled]); - - const disableBlur = useCallback(() => { - enabled(false); - }, []); // This doesn't depend on the isPrivacyBlurEnabled value - - useEffect(() => { - // Automatically activate or deactivate on mount and when isPrivacyBlurEnabled changes - if (isPrivacyBlurEnabled) { - enableBlur(); - } else { - disableBlur(); - } - - // Cleanup function to deactivate obscure when the component unmounts - return () => { - disableBlur(); - }; - }, [isPrivacyBlurEnabled, enableBlur, disableBlur]); - - return { enableBlur, disableBlur }; -}; - -export default usePrivacy; diff --git a/hooks/usePrivacy.tsx b/hooks/usePrivacy.tsx index 8bc92e40c..7de57f878 100644 --- a/hooks/usePrivacy.tsx +++ b/hooks/usePrivacy.tsx @@ -1,7 +1,42 @@ -export const usePrivacy = () => { - const enableBlur = () => {}; +import { useContext, useEffect } from 'react'; +// @ts-ignore: Package is not in the type definition +import { enableSecureView, disableSecureView, forbidAndroidShare, allowAndroidShare } from 'react-native-prevent-screenshot-ios-android'; +import { BlueStorageContext } from '../blue_modules/storage-context'; +import { Platform } from 'react-native'; - const disableBlur = () => {}; +export const usePrivacy = () => { + const { isPrivacyBlurEnabled } = useContext(BlueStorageContext); + + const enableBlur = () => { + if (!isPrivacyBlurEnabled) return; + if (Platform.OS === 'android') { + forbidAndroidShare(); + } else if (Platform.OS === 'ios') { + enableSecureView(); + } + }; + + const disableBlur = () => { + if (Platform.OS === 'android') { + allowAndroidShare(); + } else if (Platform.OS === 'ios') { + disableSecureView(); + } + }; + + useEffect(() => { + // Automatically activate or deactivate on mount and when isPrivacyBlurEnabled changes + if (isPrivacyBlurEnabled) { + enableBlur(); + } else { + disableBlur(); + } + + return () => { + disableBlur(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); return { enableBlur, disableBlur }; }; diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index 70c59d6a6..3156bc046 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -91,7 +91,7 @@ B4AB225E2B02AD12001F4328 /* XMLParserDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */; }; B4EE583C226703320003363C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B40D4E35225841ED00428FCC /* Assets.xcassets */; }; C59F90CE0D04D3E4BB39BC5D /* libPods-BlueWalletUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F02C2F7CA3591E4E0B06EBA /* libPods-BlueWalletUITests.a */; }; - C978A716948AB7DEC5B6F677 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; + C978A716948AB7DEC5B6F677 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; E5D4794B26781FC0007838C1 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = 6DD410AD266CAF1F0087DE03 /* fiatUnits.json */; }; E5D4794C26781FC1007838C1 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = 6DD410AD266CAF1F0087DE03 /* fiatUnits.json */; }; /* End PBXBuildFile section */ @@ -399,7 +399,7 @@ files = ( 782F075B5DD048449E2DECE9 /* libz.tbd in Frameworks */, 764B49B1420D4AEB8109BF62 /* libsqlite3.0.tbd in Frameworks */, - C978A716948AB7DEC5B6F677 /* (null) in Frameworks */, + C978A716948AB7DEC5B6F677 /* BuildFile in Frameworks */, 773E382FE62E836172AAB98B /* libPods-BlueWallet.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1024,7 +1024,7 @@ ); mainGroup = 83CBB9F61A601CBA00E9B192; packageReferences = ( - 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode" */, + 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode.git" */, B41B76832B66B2FF002C48D5 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, ); productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; @@ -2518,7 +2518,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode" */ = { + 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode.git" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/EFPrefix/EFQRCode.git"; requirement = { @@ -2539,7 +2539,7 @@ /* Begin XCSwiftPackageProductDependency section */ 6DFC806F24EA0B6C007B8700 /* EFQRCode */ = { isa = XCSwiftPackageProductDependency; - package = 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode" */; + package = 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode.git" */; productName = EFQRCode; }; B41B76842B66B2FF002C48D5 /* Bugsnag */ = { diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2dae41661..022715b1f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -341,6 +341,9 @@ PODS: - React-Core - react-native-ios-context-menu (1.15.3): - React-Core + - react-native-prevent-screenshot-ios-android (1.1.0): + - RCT-Folly (= 2021.07.22.00) + - React-Core - react-native-qrcode-local-image (1.0.4): - React - react-native-randombytes (3.6.1): @@ -496,8 +499,6 @@ PODS: - React-Core - RNPermissions (4.1.2): - React-Core - - RNPrivacySnapshot (1.0.0): - - React - RNQuickAction (0.3.13): - React - RNRate (1.2.12): @@ -559,6 +560,7 @@ DEPENDENCIES: - react-native-idle-timer (from `../node_modules/react-native-idle-timer`) - react-native-image-picker (from `../node_modules/react-native-image-picker`) - react-native-ios-context-menu (from `../node_modules/react-native-ios-context-menu`) + - react-native-prevent-screenshot-ios-android (from `../node_modules/react-native-prevent-screenshot-ios-android`) - "react-native-qrcode-local-image (from `../node_modules/@remobile/react-native-qrcode-local-image`)" - react-native-randombytes (from `../node_modules/react-native-randombytes`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) @@ -597,7 +599,6 @@ DEPENDENCIES: - RNKeychain (from `../node_modules/react-native-keychain`) - RNLocalize (from `../node_modules/react-native-localize`) - RNPermissions (from `../node_modules/react-native-permissions`) - - RNPrivacySnapshot (from `../node_modules/react-native-privacy-snapshot`) - RNQuickAction (from `../node_modules/react-native-quick-actions`) - RNRate (from `../node_modules/react-native-rate`) - RNReactNativeHapticFeedback (from `../node_modules/react-native-haptic-feedback`) @@ -682,6 +683,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-image-picker" react-native-ios-context-menu: :path: "../node_modules/react-native-ios-context-menu" + react-native-prevent-screenshot-ios-android: + :path: "../node_modules/react-native-prevent-screenshot-ios-android" react-native-qrcode-local-image: :path: "../node_modules/@remobile/react-native-qrcode-local-image" react-native-randombytes: @@ -758,8 +761,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-localize" RNPermissions: :path: "../node_modules/react-native-permissions" - RNPrivacySnapshot: - :path: "../node_modules/react-native-privacy-snapshot" RNQuickAction: :path: "../node_modules/react-native-quick-actions" RNRate: @@ -818,6 +819,7 @@ SPEC CHECKSUMS: react-native-idle-timer: f7f651542b39dce9b9473e4578cb64a255075f17 react-native-image-picker: 5e076db26cd81660cfb6db5bcf517cfa12054d45 react-native-ios-context-menu: e529171ba760a1af7f2ef0729f5a7f4d226171c5 + react-native-prevent-screenshot-ios-android: 8141287c970cb037d86783841fa2eb36d59ad9f9 react-native-qrcode-local-image: 35ccb306e4265bc5545f813e54cc830b5d75bcfc react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846 react-native-safe-area-context: b97eb6f9e3b7f437806c2ce5983f479f8eb5de4b @@ -856,7 +858,6 @@ SPEC CHECKSUMS: RNKeychain: f1b48665a4646f61191eb048c4c05c58d9a7596f RNLocalize: 4222a3756cdbe2dc9a5bdf445765a4d2572107cb RNPermissions: 0e72b28a9df5e3f0ae9cc122378d4b878ccb4f2f - RNPrivacySnapshot: 71919dde3c6a29dd332115409c2aec564afee8f4 RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93 RNRate: ef3bcff84f39bb1d1e41c5593d3eea4aab2bd73a RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9 diff --git a/package-lock.json b/package-lock.json index dee7d9539..401bb7bdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,10 +79,9 @@ "react-native-linear-gradient": "2.8.3", "react-native-localize": "3.0.6", "react-native-modal": "13.0.1", - "react-native-obscure": "https://github.com/BlueWallet/react-native-obscure.git#f4b83b4a261e39b1f5ed4a45ac5bcabc8a59eadb", "react-native-passcode-auth": "https://github.com/BlueWallet/react-native-passcode-auth#a2ff977ba92b36f8d0a5567f59c05cc608e8bd12", "react-native-permissions": "4.1.2", - "react-native-privacy-snapshot": "https://github.com/BlueWallet/react-native-privacy-snapshot#529e4627d93f67752a27e82a040ff7b64dca0783", + "react-native-prevent-screenshot-ios-android": "github:BlueWallet/react-native-prevent-screenshot-ios-android", "react-native-prompt-android": "https://github.com/BlueWallet/react-native-prompt-android#ed168d66fed556bc2ed07cf498770f058b78a376", "react-native-push-notification": "8.1.1", "react-native-qrcode-svg": "6.2.0", @@ -19777,16 +19776,6 @@ "react-native": ">=0.65.0" } }, - "node_modules/react-native-obscure": { - "name": "@talaikis/react-native-obscure", - "version": "0.0.3", - "resolved": "git+ssh://git@github.com/BlueWallet/react-native-obscure.git#f4b83b4a261e39b1f5ed4a45ac5bcabc8a59eadb", - "integrity": "sha512-bmzbnlXII8hW7steqwouzQW9cJ+mdA8HJ8pWkb0KD60jC5dYgJ0e66wgUiSTDNFPrvlEKriE4eEanoJFj7Q9pg==", - "license": "MIT", - "peerDependencies": { - "react-native": "^0.60.5" - } - }, "node_modules/react-native-passcode-auth": { "version": "1.0.0", "resolved": "git+ssh://git@github.com/BlueWallet/react-native-passcode-auth.git#a2ff977ba92b36f8d0a5567f59c05cc608e8bd12", @@ -19808,14 +19797,16 @@ } } }, - "node_modules/react-native-privacy-snapshot": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/BlueWallet/react-native-privacy-snapshot.git#529e4627d93f67752a27e82a040ff7b64dca0783", - "integrity": "sha512-bO73UmkI0KpAzk3766z77qBdArwOaBCr58q5H0qDfn0jf5HonYoEkJRDRwHr7SpDxrSu2Nuoz2AokxLyb3/KXw==", + "node_modules/react-native-prevent-screenshot-ios-android": { + "version": "1.1.0", + "resolved": "git+ssh://git@github.com/BlueWallet/react-native-prevent-screenshot-ios-android.git#7f8ad1070aa231ffa075ad76a5552fa348e06d44", "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, "peerDependencies": { - "react": "^16.13.1", - "react-native": "^0.62.0" + "react": "*", + "react-native": "*" } }, "node_modules/react-native-prompt-android": { @@ -37546,11 +37537,6 @@ "react-native-animatable": "1.3.3" } }, - "react-native-obscure": { - "version": "git+ssh://git@github.com/BlueWallet/react-native-obscure.git#f4b83b4a261e39b1f5ed4a45ac5bcabc8a59eadb", - "integrity": "sha512-bmzbnlXII8hW7steqwouzQW9cJ+mdA8HJ8pWkb0KD60jC5dYgJ0e66wgUiSTDNFPrvlEKriE4eEanoJFj7Q9pg==", - "from": "react-native-obscure@https://github.com/BlueWallet/react-native-obscure.git#f4b83b4a261e39b1f5ed4a45ac5bcabc8a59eadb" - }, "react-native-passcode-auth": { "version": "git+ssh://git@github.com/BlueWallet/react-native-passcode-auth.git#a2ff977ba92b36f8d0a5567f59c05cc608e8bd12", "integrity": "sha512-8FL4NDMZZVrbHr1f4555dV+GY3PLpmSbJ1wIbdW1r6zSaFe59g9ns4sdLliisjO+RvyDJP7UDPDaeu+2iJ26Bg==", @@ -37561,10 +37547,9 @@ "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-4.1.2.tgz", "integrity": "sha512-dduzHcjYp1o52M8OLYhygQbGb/UnQLD3Gqhu+5cZz6MyWAb/4DQp5yYwKu6a2lY9Cz0QgbRd1Ejkmqn01cQqEg==" }, - "react-native-privacy-snapshot": { - "version": "git+ssh://git@github.com/BlueWallet/react-native-privacy-snapshot.git#529e4627d93f67752a27e82a040ff7b64dca0783", - "integrity": "sha512-bO73UmkI0KpAzk3766z77qBdArwOaBCr58q5H0qDfn0jf5HonYoEkJRDRwHr7SpDxrSu2Nuoz2AokxLyb3/KXw==", - "from": "react-native-privacy-snapshot@https://github.com/BlueWallet/react-native-privacy-snapshot#529e4627d93f67752a27e82a040ff7b64dca0783" + "react-native-prevent-screenshot-ios-android": { + "version": "git+ssh://git@github.com/BlueWallet/react-native-prevent-screenshot-ios-android.git#7f8ad1070aa231ffa075ad76a5552fa348e06d44", + "from": "react-native-prevent-screenshot-ios-android@github:BlueWallet/react-native-prevent-screenshot-ios-android" }, "react-native-prompt-android": { "version": "git+ssh://git@github.com/BlueWallet/react-native-prompt-android.git#ed168d66fed556bc2ed07cf498770f058b78a376", diff --git a/package.json b/package.json index ca7a8a077..199effeb5 100644 --- a/package.json +++ b/package.json @@ -165,10 +165,9 @@ "react-native-linear-gradient": "2.8.3", "react-native-localize": "3.0.6", "react-native-modal": "13.0.1", - "react-native-obscure": "https://github.com/BlueWallet/react-native-obscure.git#f4b83b4a261e39b1f5ed4a45ac5bcabc8a59eadb", "react-native-passcode-auth": "https://github.com/BlueWallet/react-native-passcode-auth#a2ff977ba92b36f8d0a5567f59c05cc608e8bd12", "react-native-permissions": "4.1.2", - "react-native-privacy-snapshot": "https://github.com/BlueWallet/react-native-privacy-snapshot#529e4627d93f67752a27e82a040ff7b64dca0783", + "react-native-prevent-screenshot-ios-android": "github:BlueWallet/react-native-prevent-screenshot-ios-android", "react-native-prompt-android": "https://github.com/BlueWallet/react-native-prompt-android#ed168d66fed556bc2ed07cf498770f058b78a376", "react-native-push-notification": "8.1.1", "react-native-qrcode-svg": "6.2.0",