const React = require('react'); const Component = React.Component; const { TextInput, TouchableOpacity, Linking, View, Switch, Slider, StyleSheet, Text, Button, ScrollView } = require('react-native'); const { connect } = require('react-redux'); const { ScreenHeader } = require('lib/components/screen-header.js'); const { _ } = require('lib/locale.js'); const { BaseScreenComponent } = require('lib/components/base-screen.js'); const { Dropdown } = require('lib/components/Dropdown.js'); const { themeStyle } = require('lib/components/global-style.js'); const { time } = require('lib/time-utils.js'); const Setting = require('lib/models/Setting.js'); const shared = require('lib/components/shared/encryption-config-shared.js'); class EncryptionConfigScreenComponent extends BaseScreenComponent { static navigationOptions(options) { return { header: null }; } constructor() { super(); shared.constructor(this); this.styles_ = {}; } componentDidMount() { this.isMounted_ = true; } componentWillUnmount() { this.isMounted_ = false; } initState(props) { return shared.initState(this, props); } async refreshStats() { return shared.refreshStats(this); } componentWillMount() { this.initState(this.props); } componentWillReceiveProps(nextProps) { this.initState(nextProps); } async checkPasswords() { return shared.checkPasswords(this); } styles() { const themeId = this.props.theme; const theme = themeStyle(themeId); if (this.styles_[themeId]) return this.styles_[themeId]; this.styles_ = {}; let styles = { titleText: { flex: 1, fontWeight: 'bold', flexDirection: 'column', fontSize: theme.fontSize, paddingTop: 5, paddingBottom: 5, }, normalText: { flex: 1, fontSize: theme.fontSize, }, container: { flex: 1, padding: theme.margin, }, } this.styles_[themeId] = StyleSheet.create(styles); return this.styles_[themeId]; } renderMasterKey(num, mk) { const theme = themeStyle(this.props.theme); const onSaveClick = () => { return shared.onSavePasswordClick(this, mk); } const onPasswordChange = (text) => { return shared.onPasswordChange(this, mk, text); } const password = this.state.passwords[mk.id] ? this.state.passwords[mk.id] : ''; const passwordOk = this.state.passwordChecks[mk.id] === true ? '✔' : '❌'; const active = this.props.activeMasterKeyId === mk.id ? '✔' : ''; return ( {_('Master Key %d', num)} {_('Created: %s', time.formatMsToLocal(mk.created_time))} {_('Password:')} onPasswordChange(text)} style={{flex:1, marginRight: 10}}> {passwordOk} ); } render() { const masterKeys = this.state.masterKeys; const decryptedItemsInfo = this.props.encryptionEnabled ? {shared.decryptedStatText(this)} : null; const mkComps = []; for (let i = 0; i < masterKeys.length; i++) { const mk = masterKeys[i]; mkComps.push(this.renderMasterKey(i+1, mk)); } return ( {_('Status')} {_('Encryption is: %s', this.props.encryptionEnabled ? _('Enabled') : _('Disabled'))} {decryptedItemsInfo} {mkComps} ); } } const EncryptionConfigScreen = connect( (state) => { return { theme: state.settings.theme, masterKeys: state.masterKeys, passwords: state.settings['encryption.passwordCache'], encryptionEnabled: state.settings['encryption.enabled'], activeMasterKeyId: state.settings['encryption.activeMasterKeyId'], }; } )(EncryptionConfigScreenComponent) module.exports = { EncryptionConfigScreen };