| 
				
			 | 
			
			
				@@ -12,16 +12,18 @@ import { 
			 | 
		
	
		
			
			| 
				12
			 | 
			
				12
			 | 
			
			
				 } from 'react-native'; 
			 | 
		
	
		
			
			| 
				13
			 | 
			
				13
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				14
			 | 
			
				14
			 | 
			
			
				 import RNPermissions, { 
			 | 
		
	
		
			
			| 
				15
			 | 
			
				
			 | 
			
			
				-  Permission, 
			 | 
		
	
		
			
			| 
				16
			 | 
			
				15
			 | 
			
			
				   PermissionStatus, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				16
			 | 
			
			
				+  Permission, 
			 | 
		
	
		
			
			| 
				17
			 | 
			
				17
			 | 
			
			
				   NotificationsResponse, 
			 | 
		
	
		
			
			| 
				18
			 | 
			
				18
			 | 
			
			
				 } from 'react-native-permissions'; 
			 | 
		
	
		
			
			| 
				19
			 | 
			
				19
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				20
			 | 
			
				
			 | 
			
			
				-const {PERMISSIONS} = RNPermissions; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				20
			 | 
			
			
				+const {PERMISSIONS, RESULTS} = RNPermissions; 
			 | 
		
	
		
			
			| 
				21
			 | 
			
				21
			 | 
			
			
				 // eslint-disable-next-line @typescript-eslint/no-unused-vars 
			 | 
		
	
		
			
			| 
				22
			 | 
			
				22
			 | 
			
			
				 const {SIRI, ...PERMISSIONS_IOS} = PERMISSIONS.IOS; // remove siri (certificate required) 
			 | 
		
	
		
			
			| 
				23
			 | 
			
				23
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				24
			 | 
			
				
			 | 
			
			
				-const PLATFORM_PERMISSIONS = Platform.select({ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				+const PLATFORM_PERMISSIONS = Platform.select< 
			 | 
		
	
		
			
			| 
				
			 | 
			
				25
			 | 
			
			
				+  typeof PERMISSIONS_IOS | typeof PERMISSIONS.ANDROID | {} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				26
			 | 
			
			
				+>({ 
			 | 
		
	
		
			
			| 
				25
			 | 
			
				27
			 | 
			
			
				   ios: PERMISSIONS_IOS, 
			 | 
		
	
		
			
			| 
				26
			 | 
			
				28
			 | 
			
			
				   android: PERMISSIONS.ANDROID, 
			 | 
		
	
		
			
			| 
				27
			 | 
			
				29
			 | 
			
			
				   default: {}, 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -88,6 +90,17 @@ export default class App extends React.Component<{}, State> { 
			 | 
		
	
		
			
			| 
				88
			 | 
			
				90
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				89
			 | 
			
				91
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				90
			 | 
			
				92
			 | 
			
			
				   render() { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				93
			 | 
			
			
				+    const {notifications} = this.state; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				94
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				95
			 | 
			
			
				+    const { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				96
			 | 
			
			
				+      alert, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				97
			 | 
			
			
				+      badge, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				98
			 | 
			
			
				+      sound, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				99
			 | 
			
			
				+      lockScreen, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				100
			 | 
			
			
				+      carPlay, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				101
			 | 
			
			
				+      critical, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				102
			 | 
			
			
				+    } = notifications.settings; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				103
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				91
			 | 
			
				104
			 | 
			
			
				     return ( 
			 | 
		
	
		
			
			| 
				92
			 | 
			
				105
			 | 
			
			
				       <View style={{flex: 1, backgroundColor: theme.colors.background}}> 
			 | 
		
	
		
			
			| 
				93
			 | 
			
				106
			 | 
			
			
				         <StatusBar 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -122,12 +135,8 @@ export default class App extends React.Component<{}, State> { 
			 | 
		
	
		
			
			| 
				122
			 | 
			
				135
			 | 
			
			
				                 name={item} 
			 | 
		
	
		
			
			| 
				123
			 | 
			
				136
			 | 
			
			
				                 onPress={() => { 
			 | 
		
	
		
			
			| 
				124
			 | 
			
				137
			 | 
			
			
				                   RNPermissions.request(value) 
			 | 
		
	
		
			
			| 
				125
			 | 
			
				
			 | 
			
			
				-                    .then(result => { 
			 | 
		
	
		
			
			| 
				126
			 | 
			
				
			 | 
			
			
				-                      const statuses = [...this.state.statuses]; 
			 | 
		
	
		
			
			| 
				127
			 | 
			
				
			 | 
			
			
				-                      statuses[index] = result; 
			 | 
		
	
		
			
			| 
				128
			 | 
			
				
			 | 
			
			
				-                      this.setState({statuses}); 
			 | 
		
	
		
			
			| 
				129
			 | 
			
				
			 | 
			
			
				-                    }) 
			 | 
		
	
		
			
			| 
				130
			 | 
			
				
			 | 
			
			
				-                    .then(() => this.check()); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				138
			 | 
			
			
				+                    .then(() => this.check()) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				139
			 | 
			
			
				+                    .catch(err => console.error(err)); 
			 | 
		
	
		
			
			| 
				131
			 | 
			
				140
			 | 
			
			
				                 }} 
			 | 
		
	
		
			
			| 
				132
			 | 
			
				141
			 | 
			
			
				               /> 
			 | 
		
	
		
			
			| 
				133
			 | 
			
				142
			 | 
			
			
				             ); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -141,23 +150,70 @@ export default class App extends React.Component<{}, State> { 
			 | 
		
	
		
			
			| 
				141
			 | 
			
				150
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				142
			 | 
			
				151
			 | 
			
			
				         <TouchableRipple 
			 | 
		
	
		
			
			| 
				143
			 | 
			
				152
			 | 
			
			
				           onPress={() => { 
			 | 
		
	
		
			
			| 
				144
			 | 
			
				
			 | 
			
			
				-            RNPermissions.requestNotifications(['alert', 'badge', 'sound']); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				153
			 | 
			
			
				+            RNPermissions.requestNotifications(['alert', 'badge', 'sound']) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				154
			 | 
			
			
				+              .then(() => this.check()) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				155
			 | 
			
			
				+              .catch(err => console.error(err)); 
			 | 
		
	
		
			
			| 
				145
			 | 
			
				156
			 | 
			
			
				           }}> 
			 | 
		
	
		
			
			| 
				146
			 | 
			
				157
			 | 
			
			
				           <List.Item 
			 | 
		
	
		
			
			| 
				147
			 | 
			
				158
			 | 
			
			
				             right={() => ( 
			 | 
		
	
		
			
			| 
				148
			 | 
			
				159
			 | 
			
			
				               <List.Icon 
			 | 
		
	
		
			
			| 
				149
			 | 
			
				
			 | 
			
			
				-                color={colors[this.state.notifications.status]} 
			 | 
		
	
		
			
			| 
				150
			 | 
			
				
			 | 
			
			
				-                icon={icons[this.state.notifications.status]} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				160
			 | 
			
			
				+                color={colors[notifications.status]} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				161
			 | 
			
			
				+                icon={icons[notifications.status]} 
			 | 
		
	
		
			
			| 
				151
			 | 
			
				162
			 | 
			
			
				               /> 
			 | 
		
	
		
			
			| 
				152
			 | 
			
				163
			 | 
			
			
				             )} 
			 | 
		
	
		
			
			| 
				153
			 | 
			
				164
			 | 
			
			
				             title="NOTIFICATIONS" 
			 | 
		
	
		
			
			| 
				154
			 | 
			
				
			 | 
			
			
				-            description={this.state.notifications.status} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				165
			 | 
			
			
				+            description={notifications.status} 
			 | 
		
	
		
			
			| 
				155
			 | 
			
				166
			 | 
			
			
				           /> 
			 | 
		
	
		
			
			| 
				156
			 | 
			
				167
			 | 
			
			
				         </TouchableRipple> 
			 | 
		
	
		
			
			| 
				157
			 | 
			
				168
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				158
			 | 
			
				169
			 | 
			
			
				         <Text style={{margin: 15, marginTop: 0, color: '#777'}}> 
			 | 
		
	
		
			
			| 
				159
			 | 
			
				
			 | 
			
			
				-          {'settings = ' + 
			 | 
		
	
		
			
			| 
				160
			 | 
			
				
			 | 
			
			
				-            JSON.stringify(this.state.notifications.settings, null, 2)} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				170
			 | 
			
			
				+          {`alert: ${ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				171
			 | 
			
			
				+            alert 
			 | 
		
	
		
			
			| 
				
			 | 
			
				172
			 | 
			
			
				+              ? RESULTS.GRANTED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				173
			 | 
			
			
				+              : alert === false 
			 | 
		
	
		
			
			| 
				
			 | 
			
				174
			 | 
			
			
				+              ? RESULTS.DENIED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				175
			 | 
			
			
				+              : RESULTS.UNAVAILABLE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				176
			 | 
			
			
				+          }\n`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				177
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				178
			 | 
			
			
				+          {`badge: ${ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				179
			 | 
			
			
				+            badge 
			 | 
		
	
		
			
			| 
				
			 | 
			
				180
			 | 
			
			
				+              ? RESULTS.GRANTED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				181
			 | 
			
			
				+              : badge === false 
			 | 
		
	
		
			
			| 
				
			 | 
			
				182
			 | 
			
			
				+              ? RESULTS.DENIED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				183
			 | 
			
			
				+              : RESULTS.UNAVAILABLE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				184
			 | 
			
			
				+          }\n`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				185
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				186
			 | 
			
			
				+          {`sound: ${ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				187
			 | 
			
			
				+            sound 
			 | 
		
	
		
			
			| 
				
			 | 
			
				188
			 | 
			
			
				+              ? RESULTS.GRANTED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				189
			 | 
			
			
				+              : sound === false 
			 | 
		
	
		
			
			| 
				
			 | 
			
				190
			 | 
			
			
				+              ? RESULTS.DENIED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				191
			 | 
			
			
				+              : RESULTS.UNAVAILABLE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				192
			 | 
			
			
				+          }\n`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				193
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				194
			 | 
			
			
				+          {`lockScreen: ${ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				195
			 | 
			
			
				+            lockScreen 
			 | 
		
	
		
			
			| 
				
			 | 
			
				196
			 | 
			
			
				+              ? RESULTS.GRANTED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				197
			 | 
			
			
				+              : lockScreen === false 
			 | 
		
	
		
			
			| 
				
			 | 
			
				198
			 | 
			
			
				+              ? RESULTS.DENIED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				199
			 | 
			
			
				+              : RESULTS.UNAVAILABLE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				200
			 | 
			
			
				+          }\n`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				201
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				202
			 | 
			
			
				+          {`carPlay: ${ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				203
			 | 
			
			
				+            carPlay 
			 | 
		
	
		
			
			| 
				
			 | 
			
				204
			 | 
			
			
				+              ? RESULTS.GRANTED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				205
			 | 
			
			
				+              : carPlay === false 
			 | 
		
	
		
			
			| 
				
			 | 
			
				206
			 | 
			
			
				+              ? RESULTS.DENIED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				207
			 | 
			
			
				+              : RESULTS.UNAVAILABLE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				208
			 | 
			
			
				+          }\n`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				209
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				210
			 | 
			
			
				+          {`critical: ${ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				211
			 | 
			
			
				+            critical 
			 | 
		
	
		
			
			| 
				
			 | 
			
				212
			 | 
			
			
				+              ? RESULTS.GRANTED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				213
			 | 
			
			
				+              : critical === false 
			 | 
		
	
		
			
			| 
				
			 | 
			
				214
			 | 
			
			
				+              ? RESULTS.DENIED 
			 | 
		
	
		
			
			| 
				
			 | 
			
				215
			 | 
			
			
				+              : RESULTS.UNAVAILABLE 
			 | 
		
	
		
			
			| 
				
			 | 
			
				216
			 | 
			
			
				+          }\n`} 
			 | 
		
	
		
			
			| 
				161
			 | 
			
				217
			 | 
			
			
				         </Text> 
			 | 
		
	
		
			
			| 
				162
			 | 
			
				218
			 | 
			
			
				       </View> 
			 | 
		
	
		
			
			| 
				163
			 | 
			
				219
			 | 
			
			
				     ); 
			 |