/* global alert */ import React, { Component } from 'react'; import { View } from 'react-native'; import { FormValidationMessage } from 'react-native-elements'; import { BlueLoading, BlueSpacing20, BlueButton, SafeBlueArea, BlueCard, BlueText, BlueNavigationStyle } from '../../BlueComponents'; import PropTypes from 'prop-types'; /** @type {AppStorage} */ let BlueApp = require('../../BlueApp'); let prompt = require('../../prompt'); let loc = require('../../loc'); export default class EncryptStorage extends Component { static navigationOptions = () => ({ ...BlueNavigationStyle(), title: loc.settings.encrypt_storage, }); constructor(props) { super(props); this.state = { isLoading: true, language: loc.getLanguage(), }; } async componentDidMount() { this.setState({ isLoading: false, storageIsEncrypted: await BlueApp.storageIsEncrypted(), }); } render() { if (this.state.isLoading) { return ; } return ( {(() => { if (this.state.storageIsEncrypted) { return ( {loc.settings.storage_encrypted} this.props.navigation.navigate('PlausibleDeniability')} title={loc.settings.plausible_deniability} /> ); } else { return ( {loc.settings.storage_not_encrypted} { this.setState({ isLoading: true }); let p1 = await prompt(loc.settings.password, loc.settings.password_explain).catch(() => { this.setState({ isLoading: false }); p1 = undefined; }); if (!p1) { this.setState({ isLoading: false }); return; } let p2 = await prompt(loc.settings.password, loc.settings.retype_password).catch(() => { this.setState({ isLoading: false }); }); if (p1 === p2) { await BlueApp.encryptStorage(p1); this.setState({ isLoading: false, storageIsEncrypted: await BlueApp.storageIsEncrypted(), }); } else { this.setState({ isLoading: false }); alert(loc.settings.passwords_do_not_match); } }} title={loc.settings.encrypt_storage} /> ); } })()} ); } } EncryptStorage.propTypes = { navigation: PropTypes.shape({ navigate: PropTypes.func, goBack: PropTypes.func, }), };