Files
react-native/packages/rn-tester/js/examples/PermissionsAndroid/PermissionsExample.js
T
David Angulo 910a750fbc Rename POST_NOTIFICATION to POST_NOTIFICATIONS (#35533)
Summary:
After adding `<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>` on my `AndroidManifest.xml`, I expected to use `PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS` but `POST_NOTIFICATIONS` is `undefined` and is named `POST_NOTIFICATION` instead.

Every other Android permission is 1:1 in spelling except this one where it lacks `S`.

Not sure if this is a welcome change since this can be breaking. Or maybe we can include both with and without `S` to not be a breaking change. Or just keep it as is and close this PR.

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[Android] [Changed] - Rename `POST_NOTIFICATION` to `POST_NOTIFICATIONS`

Pull Request resolved: https://github.com/facebook/react-native/pull/35533

Test Plan: `PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS` should not be `undefined`.

Reviewed By: cortinico

Differential Revision: D41705866

Pulled By: philIip

fbshipit-source-id: a0328b174f0196421565f0cd2b2f1eb509428553
2022-12-09 12:56:07 -08:00

156 lines
4.4 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict-local
*/
'use strict';
import * as React from 'react';
import {PermissionsAndroid, StyleSheet, Text, View} from 'react-native';
import RNTOption from '../../components/RNTOption';
import RNTesterButton from '../../components/RNTesterButton';
function PermissionsExample() {
const [permission, setPermission] = React.useState(
PermissionsAndroid.PERMISSIONS.CAMERA,
);
const [hasPermission, setHasPermission] = React.useState('Not Checked');
const requestPermission = async () => {
let result;
try {
result = await PermissionsAndroid.request(permission, {
title: 'Permission Explanation',
message:
'The app needs the following permission ' +
permission +
' because of reasons. Please approve.',
});
setHasPermission(result + ' for ' + permission);
} catch (e) {
throw e;
}
};
const checkPermission = async () => {
let result;
try {
result = await PermissionsAndroid.check(permission);
} catch (e) {
throw e;
}
setHasPermission(`${result ? 'Granted' : 'Revoked'} for ${permission}`);
};
return (
<View style={styles.container}>
<View style={styles.block}>
<Text style={styles.title}>Select Permission</Text>
<View style={styles.row}>
<RNTOption
label={PermissionsAndroid.PERMISSIONS.CAMERA}
key={PermissionsAndroid.PERMISSIONS.CAMERA}
onPress={() => setPermission(PermissionsAndroid.PERMISSIONS.CAMERA)}
selected={permission === PermissionsAndroid.PERMISSIONS.CAMERA}
style={styles.option}
/>
<RNTOption
label={PermissionsAndroid.PERMISSIONS.READ_CALENDAR}
key={PermissionsAndroid.PERMISSIONS.READ_CALENDAR}
onPress={() =>
setPermission(PermissionsAndroid.PERMISSIONS.READ_CALENDAR)
}
selected={
permission === PermissionsAndroid.PERMISSIONS.READ_CALENDAR
}
style={styles.option}
/>
<RNTOption
label={PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION}
key={PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION}
onPress={() =>
setPermission(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)
}
selected={
permission === PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION
}
style={styles.option}
/>
<RNTOption
label={PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS}
key={PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS}
onPress={() =>
setPermission(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS)
}
selected={
permission === PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS
}
style={styles.option}
/>
</View>
</View>
<RNTesterButton onPress={checkPermission}>
<View>
<Text style={[styles.touchable, styles.text]}>Check Permission</Text>
</View>
</RNTesterButton>
<RNTesterButton onPress={requestPermission}>
<View>
<Text style={[styles.touchable, styles.text]}>
Request Permission
</Text>
</View>
</RNTesterButton>
<Text style={styles.text}>Permission Status: {hasPermission}</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'white',
},
block: {
borderColor: 'rgba(0,0,0, 0.1)',
borderBottomWidth: 1,
padding: 6,
},
row: {
flexDirection: 'row',
flexWrap: 'wrap',
},
title: {
fontWeight: 'bold',
},
text: {
fontSize: 20,
},
touchable: {
color: '#007AFF',
},
option: {
margin: 6,
},
});
exports.displayName = (undefined: ?string);
exports.framework = 'React';
exports.title = 'PermissionsAndroid';
exports.category = 'Android';
exports.description = 'Permissions example for API 23+.';
exports.examples = [
{
title: 'Permissions Example',
description:
'Short example of how to use the runtime permissions API introduced in Android M.',
render: (): React.Node => <PermissionsExample />,
},
];