xref: /MusicFree/src/pages/permissions/index.tsx (revision ab5f994a52bee1ac7c89f2ccf9b6ca60d362890a)
109528755S猫头猫import React, {useEffect, useRef, useState} from 'react';
209528755S猫头猫import {AppState, StyleSheet} from 'react-native';
309528755S猫头猫import rpx from '@/utils/rpx';
409528755S猫头猫import AppBar from '@/components/base/appBar';
509528755S猫头猫import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView';
609528755S猫头猫import globalStyle from '@/constants/globalStyle';
709528755S猫头猫import StatusBar from '@/components/base/statusBar';
809528755S猫头猫import ThemeText from '@/components/base/themeText';
909528755S猫头猫import ListItem from '@/components/base/listItem';
1009528755S猫头猫import ThemeSwitch from '@/components/base/switch';
1109528755S猫头猫import LyricUtil from '@/native/lyricUtil';
1209528755S猫头猫import NativeUtils from '@/native/utils';
1309528755S猫头猫
1409528755S猫头猫type IPermissionTypes = 'floatingWindow' | 'fileStorage';
1509528755S猫头猫
1609528755S猫头猫export default function Permissions() {
1709528755S猫头猫    const appState = useRef(AppState.currentState);
1809528755S猫头猫    const [permissions, setPermissions] = useState<
1909528755S猫头猫        Record<IPermissionTypes, boolean>
2009528755S猫头猫    >({
2109528755S猫头猫        floatingWindow: false,
2209528755S猫头猫        fileStorage: false,
2309528755S猫头猫        // background: false,
2409528755S猫头猫    });
2509528755S猫头猫
2609528755S猫头猫    async function checkPermission(type?: IPermissionTypes) {
2709528755S猫头猫        let newPermission = {
2809528755S猫头猫            ...permissions,
2909528755S猫头猫        };
3009528755S猫头猫        if (!type || type === 'floatingWindow') {
3109528755S猫头猫            const hasPermission = await LyricUtil.checkSystemAlertPermission();
3209528755S猫头猫            newPermission.floatingWindow = hasPermission;
3309528755S猫头猫        }
3409528755S猫头猫        if (!type || type === 'fileStorage') {
3509528755S猫头猫            const hasPermission = await NativeUtils.checkStoragePermission();
3609528755S猫头猫            console.log('HAS', hasPermission);
3709528755S猫头猫            newPermission.fileStorage = hasPermission;
3809528755S猫头猫        }
3909528755S猫头猫        // if (!type || type === 'background') {
4009528755S猫头猫
4109528755S猫头猫        // }
4209528755S猫头猫
4309528755S猫头猫        setPermissions(newPermission);
4409528755S猫头猫    }
4509528755S猫头猫
4609528755S猫头猫    useEffect(() => {
4709528755S猫头猫        checkPermission();
4809528755S猫头猫        const subscription = AppState.addEventListener(
4909528755S猫头猫            'change',
5009528755S猫头猫            nextAppState => {
5109528755S猫头猫                if (
5209528755S猫头猫                    appState.current.match(/inactive|background/) &&
5309528755S猫头猫                    nextAppState === 'active'
5409528755S猫头猫                ) {
5509528755S猫头猫                    checkPermission();
5609528755S猫头猫                }
5709528755S猫头猫
5809528755S猫头猫                appState.current = nextAppState;
5909528755S猫头猫            },
6009528755S猫头猫        );
6109528755S猫头猫
6209528755S猫头猫        return () => {
6309528755S猫头猫            subscription.remove();
6409528755S猫头猫        };
6509528755S猫头猫    }, []);
6609528755S猫头猫
6709528755S猫头猫    return (
6809528755S猫头猫        <VerticalSafeAreaView style={globalStyle.fwflex1}>
6909528755S猫头猫            <StatusBar />
7009528755S猫头猫            <AppBar>权限管理</AppBar>
7109528755S猫头猫            <ThemeText style={styles.description}>
7209528755S猫头猫                此处列出了本 APP
7309528755S猫头猫                需要的所有权限,你可以从这里开启或关闭某些权限。
7409528755S猫头猫            </ThemeText>
7509528755S猫头猫            <ListItem
765589cdf3S猫头猫                withHorizontalPadding
7709528755S猫头猫                heightType="big"
7809528755S猫头猫                onPress={() => {
7909528755S猫头猫                    LyricUtil.requestSystemAlertPermission();
8009528755S猫头猫                }}>
8109528755S猫头猫                <ListItem.Content
8209528755S猫头猫                    title="悬浮窗权限"
8309528755S猫头猫                    description="用以展示桌面歌词"
8409528755S猫头猫                />
8509528755S猫头猫                <ThemeSwitch value={permissions.floatingWindow} />
8609528755S猫头猫            </ListItem>
8709528755S猫头猫            <ListItem
885589cdf3S猫头猫                withHorizontalPadding
8909528755S猫头猫                heightType="big"
9009528755S猫头猫                onPress={() => {
9109528755S猫头猫                    NativeUtils.requestStoragePermission();
9209528755S猫头猫                }}>
9309528755S猫头猫                <ListItem.Content
9409528755S猫头猫                    title="文件读写权限"
9509528755S猫头猫                    description="用以下载歌曲、缓存数据"
9609528755S猫头猫                />
9709528755S猫头猫                <ThemeSwitch value={permissions.fileStorage} />
9809528755S猫头猫            </ListItem>
99*ab5f994aSmaotoumao            {/* <ListItem withHorizontalPadding heightType="big">
10009528755S猫头猫                <ListItem.Content
10109528755S猫头猫                    title="后台运行"
10209528755S猫头猫                    description="用以在后台播放音乐"></ListItem.Content>
10309528755S猫头猫                <ThemeSwitch value={permissions.background}></ThemeSwitch>
10409528755S猫头猫            </ListItem> */}
10509528755S猫头猫        </VerticalSafeAreaView>
10609528755S猫头猫    );
10709528755S猫头猫}
10809528755S猫头猫
10909528755S猫头猫const styles = StyleSheet.create({
11009528755S猫头猫    description: {
11109528755S猫头猫        width: '100%',
11209528755S猫头猫        paddingHorizontal: rpx(24),
11309528755S猫头猫        marginVertical: rpx(36),
11409528755S猫头猫    },
11509528755S猫头猫});
116