import React from 'react'; import {FlatList, Platform, StatusBar, Text, View} from 'react-native'; import {Appbar, List, TouchableRipple} from 'react-native-paper'; import RNPermissions, { NotificationsResponse, Permission, PERMISSIONS, PermissionStatus, RESULTS, } from 'react-native-permissions'; import theme from './theme'; // eslint-disable-next-line @typescript-eslint/no-unused-vars const {SIRI, ...PERMISSIONS_IOS} = PERMISSIONS.IOS; // remove siri (certificate required) const PLATFORM_PERMISSIONS = Platform.select< typeof PERMISSIONS_IOS | typeof PERMISSIONS.ANDROID | {} >({ ios: PERMISSIONS_IOS, android: PERMISSIONS.ANDROID, default: {}, }); const PERMISSIONS_VALUES: Permission[] = Object.values(PLATFORM_PERMISSIONS); const colors: {[key: string]: string} = { unavailable: '#cfd8dc', denied: '#ff9800', granted: '#43a047', blocked: '#e53935', }; const icons: {[key: string]: string} = { unavailable: 'circle', denied: 'alert-circle', granted: 'check-circle', blocked: 'close-circle', }; const PermissionRow = ({ name, status, onPress, }: { name: string; status: string; onPress: () => void; }) => ( { onPress(); }}> } title={name} description={status} /> ); interface State { statuses: PermissionStatus[]; notifications: NotificationsResponse; } function getSettingString(setting: boolean | undefined) { return setting ? RESULTS.GRANTED : setting === false ? RESULTS.DENIED : RESULTS.UNAVAILABLE; } export default class App extends React.Component<{}, State> { state: State = { statuses: [], notifications: {status: 'unavailable', settings: {}}, }; check = () => Promise.all(PERMISSIONS_VALUES.map(_ => RNPermissions.check(_))) .then(statuses => this.setState({statuses})) .then(() => RNPermissions.checkNotifications()) .then(notifications => this.setState({notifications})) .catch(error => console.warn(error)); refresh = () => { this.setState({statuses: []}, this.check); }; componentDidMount() { this.check(); } render() { const {notifications} = this.state; const {settings} = notifications; return ( { RNPermissions.openSettings(); }} /> item} data={Object.keys(PLATFORM_PERMISSIONS)} renderItem={({item, index}) => { const value = PERMISSIONS_VALUES[index]; const status = this.state.statuses[index]; return ( { RNPermissions.request(value) .then(() => this.check()) .catch(err => console.error(err)); }} /> ); }} /> { RNPermissions.requestNotifications(['alert', 'badge', 'sound']) .then(() => this.check()) .catch(err => console.error(err)); }}> ( )} title="NOTIFICATIONS" description={notifications.status} /> {`alert: ${getSettingString(settings.alert)}\n`} {`badge: ${getSettingString(settings.badge)}\n`} {`sound: ${getSettingString(settings.sound)}\n`} {`lockScreen: ${getSettingString(settings.lockScreen)}\n`} {`notificationCenter: ${getSettingString( settings.notificationCenter, )}\n`} {`carPlay: ${getSettingString(settings.carPlay)}\n`} {`criticalAlert: ${getSettingString(settings.criticalAlert)}\n`} ); } }