| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 | 
							- // @flow
 - 
 - import React from 'react';
 - import {
 -     Alert,
 -     SafeAreaView,
 -     ScrollView,
 -     Switch,
 -     TextInput,
 -     View
 - } from 'react-native';
 - import { connect } from 'react-redux';
 - 
 - import { translate } from '../../../base/i18n';
 - import { BackButton, Header, Modal } from '../../../base/react';
 - 
 - import {
 -     AbstractSettingsView,
 -     _mapStateToProps
 - } from '../AbstractSettingsView';
 - import { setSettingsViewVisible } from '../../actions';
 - import FormRow from './FormRow';
 - import FormSectionHeader from './FormSectionHeader';
 - import { normalizeUserInputURL } from '../../functions';
 - import styles from './styles';
 - import { HeaderLabel } from '../../../base/react/components/native';
 - 
 - /**
 -  * The native container rendering the app settings page.
 -  *
 -  * @extends AbstractSettingsView
 -  */
 - class SettingsView extends AbstractSettingsView {
 -     _urlField: Object;
 - 
 -     /**
 -      * Initializes a new {@code SettingsView} instance.
 -      *
 -      * @inheritdoc
 -      */
 -     constructor(props) {
 -         super(props);
 - 
 -         // Bind event handlers so they are only bound once per instance.
 -         this._onBlurServerURL = this._onBlurServerURL.bind(this);
 -         this._onRequestClose = this._onRequestClose.bind(this);
 -         this._setURLFieldReference = this._setURLFieldReference.bind(this);
 -         this._showURLAlert = this._showURLAlert.bind(this);
 -     }
 - 
 -     /**
 -      * Implements React's {@link Component#render()}, renders the settings page.
 -      *
 -      * @inheritdoc
 -      * @returns {ReactElement}
 -      */
 -     render() {
 -         return (
 -             <Modal
 -                 onRequestClose = { this._onRequestClose }
 -                 presentationStyle = 'overFullScreen'
 -                 visible = { this.props._visible }>
 -                 <View style = { Header.pageStyle }>
 -                     { this._renderHeader() }
 -                     { this._renderBody() }
 -                 </View>
 -             </Modal>
 -         );
 -     }
 - 
 -     _onBlurServerURL: () => void;
 - 
 -     /**
 -      * Handler the server URL lose focus event. Here we validate the server URL
 -      * and update it to the normalized version, or show an error if incorrect.
 -      *
 -      * @private
 -      * @returns {void}
 -      */
 -     _onBlurServerURL() {
 -         this._processServerURL(false /* hideOnSuccess */);
 -     }
 - 
 -     _onChangeDisplayName: (string) => void;
 - 
 -     _onChangeEmail: (string) => void;
 - 
 -     _onChangeServerURL: (string) => void;
 - 
 -     _onRequestClose: () => void;
 - 
 -     /**
 -      * Handles the back button. Also invokes normalizeUserInputURL to validate
 -      * the URL entered by the user.
 -      *
 -      * @returns {void}
 -      */
 -     _onRequestClose() {
 -         this._processServerURL(true /* hideOnSuccess */);
 -     }
 - 
 -     _onStartAudioMutedChange: (boolean) => void;
 - 
 -     _onStartVideoMutedChange: (boolean) => void;
 - 
 -     /**
 -      * Processes the server URL. It normalizes it and an error alert is
 -      * displayed in case it's incorrect.
 -      *
 -      * @param {boolean} hideOnSuccess - True if the dialog should be hidden if
 -      * normalization / validation succeeds, false otherwise.
 -      * @private
 -      * @returns {void}
 -      */
 -     _processServerURL(hideOnSuccess: boolean) {
 -         const { serverURL } = this.props._settings;
 -         const normalizedURL = normalizeUserInputURL(serverURL);
 - 
 -         if (normalizedURL === null) {
 -             this._showURLAlert();
 -         } else {
 -             this._onChangeServerURL(normalizedURL);
 -             if (hideOnSuccess) {
 -                 this.props.dispatch(setSettingsViewVisible(false));
 -             }
 -         }
 -     }
 - 
 -     /**
 -      * Renders the body (under the header) of {@code SettingsView}.
 -      *
 -      * @private
 -      * @returns {React$Element}
 -      */
 -     _renderBody() {
 -         const { _settings } = this.props;
 - 
 -         return (
 -             <SafeAreaView style = { styles.settingsForm }>
 -                 <ScrollView>
 -                     <FormSectionHeader
 -                         label = 'settingsView.profileSection' />
 -                     <FormRow
 -                         fieldSeparator = { true }
 -                         label = 'settingsView.displayName'>
 -                         <TextInput
 -                             autoCorrect = { false }
 -                             onChangeText = { this._onChangeDisplayName }
 -                             placeholder = 'John Doe'
 -                             value = { _settings.displayName } />
 -                     </FormRow>
 -                     <FormRow label = 'settingsView.email'>
 -                         <TextInput
 -                             autoCapitalize = 'none'
 -                             autoCorrect = { false }
 -                             keyboardType = { 'email-address' }
 -                             onChangeText = { this._onChangeEmail }
 -                             placeholder = 'email@example.com'
 -                             value = { _settings.email } />
 -                     </FormRow>
 -                     <FormSectionHeader
 -                         label = 'settingsView.conferenceSection' />
 -                     <FormRow
 -                         fieldSeparator = { true }
 -                         label = 'settingsView.serverURL'>
 -                         <TextInput
 -                             autoCapitalize = 'none'
 -                             autoCorrect = { false }
 -                             onBlur = { this._onBlurServerURL }
 -                             onChangeText = { this._onChangeServerURL }
 -                             placeholder = { this.props._serverURL }
 -                             value = { _settings.serverURL } />
 -                     </FormRow>
 -                     <FormRow
 -                         fieldSeparator = { true }
 -                         label = 'settingsView.startWithAudioMuted'>
 -                         <Switch
 -                             onValueChange = { this._onStartAudioMutedChange }
 -                             value = { _settings.startWithAudioMuted } />
 -                     </FormRow>
 -                     <FormRow label = 'settingsView.startWithVideoMuted'>
 -                         <Switch
 -                             onValueChange = { this._onStartVideoMutedChange }
 -                             value = { _settings.startWithVideoMuted } />
 -                     </FormRow>
 -                 </ScrollView>
 -             </SafeAreaView>
 -         );
 -     }
 - 
 -     /**
 -      * Renders the header of {@code SettingsView}.
 -      *
 -      * @private
 -      * @returns {React$Element}
 -      */
 -     _renderHeader() {
 -         return (
 -             <Header>
 -                 <BackButton onPress = { this._onRequestClose } />
 -                 <HeaderLabel labelKey = 'settingsView.header' />
 -             </Header>
 -         );
 -     }
 - 
 -     _setURLFieldReference: (React$ElementRef<*> | null) => void;
 - 
 -     /**
 -      *  Stores a reference to the URL field for later use.
 -      *
 -      * @param {Object} component - The field component.
 -      * @protected
 -      * @returns {void}
 -      */
 -     _setURLFieldReference(component) {
 -         this._urlField = component;
 -     }
 - 
 -     _showURLAlert: () => void;
 - 
 -     /**
 -      * Shows an alert telling the user that the URL he/she entered was invalid.
 -      *
 -      * @returns {void}
 -      */
 -     _showURLAlert() {
 -         const { t } = this.props;
 - 
 -         Alert.alert(
 -             t('settingsView.alertTitle'),
 -             t('settingsView.alertURLText'),
 -             [
 -                 {
 -                     onPress: () => this._urlField.focus(),
 -                     text: t('settingsView.alertOk')
 -                 }
 -             ]
 -         );
 -     }
 - }
 - 
 - export default translate(connect(_mapStateToProps)(SettingsView));
 
 
  |