import React, { useContext, useEffect, useState } from 'react'; import { ScrollView, TouchableWithoutFeedback, StyleSheet, Platform, Pressable, Text } from 'react-native'; import { openSettings } from 'react-native-permissions'; import navigationStyle from '../../components/navigationStyle'; import { BlueText, BlueSpacing20, BlueCard, BlueHeaderDefaultSub, BlueSpacing40 } from '../../BlueComponents'; import loc from '../../loc'; import DeviceQuickActions from '../../class/quick-actions'; import BlueClipboard from '../../blue_modules/clipboard'; import { BlueStorageContext } from '../../blue_modules/storage-context'; import WidgetCommunication from '../../blue_modules/WidgetCommunication'; import { useTheme } from '../../components/themes'; import ListItem from '../../components/ListItem'; const A = require('../../blue_modules/analytics'); const SettingsPrivacy = () => { const { colors } = useTheme(); const { isStorageEncrypted, setDoNotTrack, isDoNotTrackEnabled, setIsPrivacyBlurEnabled } = useContext(BlueStorageContext); const sections = Object.freeze({ ALL: 0, CLIPBOARDREAD: 1, QUICKACTION: 2, WIDGETS: 3 }); const [isLoading, setIsLoading] = useState(sections.ALL); const [isReadClipboardAllowed, setIsReadClipboardAllowed] = useState(false); const [doNotTrackSwitchValue, setDoNotTrackSwitchValue] = useState(false); const [isDisplayWidgetBalanceAllowed, setIsDisplayWidgetBalanceAllowed] = useState(false); const [isQuickActionsEnabled, setIsQuickActionsEnabled] = useState(false); const [storageIsEncrypted, setStorageIsEncrypted] = useState(true); const [isPrivacyBlurEnabledTapped, setIsPrivacyBlurEnabledTapped] = useState(0); const styleHooks = StyleSheet.create({ widgetsHeader: { color: colors.foregroundColor, }, }); useEffect(() => { (async () => { try { setDoNotTrackSwitchValue(await isDoNotTrackEnabled()); setIsReadClipboardAllowed(await BlueClipboard().isReadClipboardAllowed()); setStorageIsEncrypted(await isStorageEncrypted()); setIsQuickActionsEnabled(await DeviceQuickActions.getEnabled()); setIsDisplayWidgetBalanceAllowed(await WidgetCommunication.isBalanceDisplayAllowed()); } catch (e) { console.log(e); } setIsLoading(false); })(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const onValueChange = async value => { setIsLoading(sections.CLIPBOARDREAD); try { await BlueClipboard().setReadClipboardAllowed(value); setIsReadClipboardAllowed(value); } catch (e) { console.log(e); } setIsLoading(false); }; const onDoNotTrackValueChange = async value => { setIsLoading(sections.ALL); try { setDoNotTrackSwitchValue(value); A.setOptOut(value); await setDoNotTrack(value); } catch (e) { console.log(e); } setIsLoading(false); }; const onQuickActionsValueChange = async value => { setIsLoading(sections.QUICKACTION); try { await DeviceQuickActions.setEnabled(value); setIsQuickActionsEnabled(value); } catch (e) { console.log(e); } setIsLoading(false); }; const onWidgetsTotalBalanceValueChange = async value => { setIsLoading(sections.WIDGETS); try { await WidgetCommunication.setBalanceDisplayAllowed(value); setIsDisplayWidgetBalanceAllowed(value); } catch (e) { console.log(e); } setIsLoading(false); }; const stylesWithThemeHook = StyleSheet.create({ root: { backgroundColor: colors.background, }, }); const openApplicationSettings = () => { openSettings(); }; const onDisablePrivacyTapped = () => { setIsPrivacyBlurEnabled(!(isPrivacyBlurEnabledTapped >= 10)); setIsPrivacyBlurEnabledTapped(prev => prev + 1); }; return ( {Platform.OS === 'android' ? : <>} {loc.settings.privacy_clipboard_explanation} {!storageIsEncrypted && ( <> {loc.settings.privacy_quickactions_explanation} )} {loc.settings.privacy_do_not_track_explanation} {Platform.OS === 'ios' && !storageIsEncrypted && ( <> {loc.settings.widgets} {loc.settings.total_balance_explanation} )} ); }; const styles = StyleSheet.create({ root: { flex: 1, }, widgetsHeader: { fontWeight: 'bold', fontSize: 30, marginLeft: 17, }, }); SettingsPrivacy.navigationOptions = navigationStyle({ headerLargeTitle: true }, opts => ({ ...opts, title: loc.settings.privacy })); export default SettingsPrivacy;