/** * @format */ import React, { Component, Fragment } from 'react'; import { StyleSheet, Text, View, DeviceEventEmitter, Button, Dimensions, Platform, Alert, } from 'react-native'; import RNSettings from 'react-native-settings'; const Screen = { width: Dimensions.get('window').width, height: Dimensions.get('window').height, }; export default class example extends Component { state = { locationOn: false, airplaneOn: false, captioningOn: false }; componentDidMount() { const settings = [ { key: RNSettings.LOCATION_SETTING, state: 'locationOn', supported: true, }, { key: RNSettings.AIRPLANE_MODE_SETTING, state: 'airplaneOn', supported: Platform.OS === 'android', }, { key: RNSettings.CAPTIONING_SETTINGS, state: 'captioningOn', supported: Platform.OS === 'android', }, ]; settings .filter(setting => setting.supported) .forEach(setting => RNSettings.getSetting(setting.key).then(result => { if (result[setting.key] === RNSettings.ENABLED) { this.setState({ [setting.state]: true }); } else { this.setState({ [setting.state]: false }); } }), ); if (Platform.OS === 'android') { // Register to gps provider change event DeviceEventEmitter.addListener( RNSettings.GPS_PROVIDER_EVENT, this.handleGPSProviderEvent, ); // Register to airplane mode change event DeviceEventEmitter.addListener( RNSettings.AIRPLANE_MODE_EVENT, this.handleAirplaneModeEvent, ); // Register to captioning change event DeviceEventEmitter.addListener( RNSettings.CAPTIONING_EVENT, this.handleCaptioningEvent, ); } } handleGPSProviderEvent = e => { if (e[RNSettings.LOCATION_SETTING] === RNSettings.ENABLED) { this.setState({ locationOn: true }); } else { this.setState({ locationOn: false }); } }; handleAirplaneModeEvent = e => { if (e[RNSettings.AIRPLANE_MODE_SETTING] === RNSettings.ENABLED) { this.setState({ airplaneOn: true }); } else { this.setState({ airplaneOn: false }); } }; handleCaptioningEvent = e => { if (e[RNSettings.CAPTIONING_SETTINGS] === RNSettings.ENABLED) { this.setState({ captioningOn: true }); } else { this.setState({ captioningOn: false }); } }; openLocationSetting = () => { if (Platform.OS === 'ios') { Alert.alert( 'Not supported!', 'Not supported on IOS just yet. Stay tuned ~_~', ); return; } RNSettings.openSetting(RNSettings.ACTION_LOCATION_SOURCE_SETTINGS).then( result => { if (result === RNSettings.ENABLED) { this.setState({ locationOn: true }); } else { this.setState({ locationOn: false }); } }, ); }; openAirplaneSetting = () => { if (Platform.OS === 'ios') { Alert.alert( 'Not supported!', 'Not supported on IOS just yet. Stay tuned ~_~', ); return; } RNSettings.openSetting(RNSettings.ACTION_AIRPLANE_MODE_SETTINGS).then( result => { if (result === RNSettings.ENABLED) { this.setState({ airplaneOn: true }); } else { this.setState({ airplaneOn: false }); } }, ); }; openCaptioningSetting = () => { if (Platform.OS === 'ios') { Alert.alert( 'Not supported!', 'Not supported on IOS just yet. Stay tuned ~_~', ); return; } RNSettings.openSetting(RNSettings.ACTION_CAPTIONING_SETTINGS).then( result => { if (result === RNSettings.ENABLED) { this.setState({ captioningOn: true }); } else { this.setState({ captioningOn: false }); } }, ); }; render() { const asterisk = Platform.OS === 'ios' ? ( {' '} * Not supported yet on iOS. ) : ( ); const { locationOn, airplaneOn, captioningOn } = this.state; return ( react-native-settings {asterisk} ); } } const SettingRow = ({ name, onAvailable, onPressAvailable, onPress, on }) => { let status = ; if (onAvailable) { status = on ? ( ON ) : ( OFF ); } else { status = N/A*; } return ( {name}: {status}