xref: /MusicFree/src/pages/permissions/index.tsx (revision 095287552b9baf2f2ceeb9397c563c292a4f7934)
1*09528755S猫头猫import React, {useEffect, useRef, useState} from 'react';
2*09528755S猫头猫import {AppState, StyleSheet} from 'react-native';
3*09528755S猫头猫import rpx from '@/utils/rpx';
4*09528755S猫头猫import AppBar from '@/components/base/appBar';
5*09528755S猫头猫import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView';
6*09528755S猫头猫import globalStyle from '@/constants/globalStyle';
7*09528755S猫头猫import StatusBar from '@/components/base/statusBar';
8*09528755S猫头猫import ThemeText from '@/components/base/themeText';
9*09528755S猫头猫import ListItem from '@/components/base/listItem';
10*09528755S猫头猫import ThemeSwitch from '@/components/base/switch';
11*09528755S猫头猫import LyricUtil from '@/native/lyricUtil';
12*09528755S猫头猫import NativeUtils from '@/native/utils';
13*09528755S猫头猫
14*09528755S猫头猫type IPermissionTypes = 'floatingWindow' | 'fileStorage';
15*09528755S猫头猫
16*09528755S猫头猫export default function Permissions() {
17*09528755S猫头猫    const appState = useRef(AppState.currentState);
18*09528755S猫头猫    const [permissions, setPermissions] = useState<
19*09528755S猫头猫        Record<IPermissionTypes, boolean>
20*09528755S猫头猫    >({
21*09528755S猫头猫        floatingWindow: false,
22*09528755S猫头猫        fileStorage: false,
23*09528755S猫头猫        // background: false,
24*09528755S猫头猫    });
25*09528755S猫头猫
26*09528755S猫头猫    async function checkPermission(type?: IPermissionTypes) {
27*09528755S猫头猫        let newPermission = {
28*09528755S猫头猫            ...permissions,
29*09528755S猫头猫        };
30*09528755S猫头猫        if (!type || type === 'floatingWindow') {
31*09528755S猫头猫            const hasPermission = await LyricUtil.checkSystemAlertPermission();
32*09528755S猫头猫            newPermission.floatingWindow = hasPermission;
33*09528755S猫头猫        }
34*09528755S猫头猫        if (!type || type === 'fileStorage') {
35*09528755S猫头猫            const hasPermission = await NativeUtils.checkStoragePermission();
36*09528755S猫头猫            console.log('HAS', hasPermission);
37*09528755S猫头猫            newPermission.fileStorage = hasPermission;
38*09528755S猫头猫        }
39*09528755S猫头猫        // if (!type || type === 'background') {
40*09528755S猫头猫
41*09528755S猫头猫        // }
42*09528755S猫头猫
43*09528755S猫头猫        setPermissions(newPermission);
44*09528755S猫头猫    }
45*09528755S猫头猫
46*09528755S猫头猫    useEffect(() => {
47*09528755S猫头猫        checkPermission();
48*09528755S猫头猫        const subscription = AppState.addEventListener(
49*09528755S猫头猫            'change',
50*09528755S猫头猫            nextAppState => {
51*09528755S猫头猫                if (
52*09528755S猫头猫                    appState.current.match(/inactive|background/) &&
53*09528755S猫头猫                    nextAppState === 'active'
54*09528755S猫头猫                ) {
55*09528755S猫头猫                    checkPermission();
56*09528755S猫头猫                }
57*09528755S猫头猫
58*09528755S猫头猫                appState.current = nextAppState;
59*09528755S猫头猫            },
60*09528755S猫头猫        );
61*09528755S猫头猫
62*09528755S猫头猫        return () => {
63*09528755S猫头猫            subscription.remove();
64*09528755S猫头猫        };
65*09528755S猫头猫    }, []);
66*09528755S猫头猫
67*09528755S猫头猫    return (
68*09528755S猫头猫        <VerticalSafeAreaView style={globalStyle.fwflex1}>
69*09528755S猫头猫            <StatusBar />
70*09528755S猫头猫            <AppBar>权限管理</AppBar>
71*09528755S猫头猫            <ThemeText style={styles.description}>
72*09528755S猫头猫                此处列出了本 APP
73*09528755S猫头猫                需要的所有权限,你可以从这里开启或关闭某些权限。
74*09528755S猫头猫            </ThemeText>
75*09528755S猫头猫            <ListItem
76*09528755S猫头猫                withHorizonalPadding
77*09528755S猫头猫                heightType="big"
78*09528755S猫头猫                onPress={() => {
79*09528755S猫头猫                    LyricUtil.requestSystemAlertPermission();
80*09528755S猫头猫                }}>
81*09528755S猫头猫                <ListItem.Content
82*09528755S猫头猫                    title="悬浮窗权限"
83*09528755S猫头猫                    description="用以展示桌面歌词"
84*09528755S猫头猫                />
85*09528755S猫头猫                <ThemeSwitch value={permissions.floatingWindow} />
86*09528755S猫头猫            </ListItem>
87*09528755S猫头猫            <ListItem
88*09528755S猫头猫                withHorizonalPadding
89*09528755S猫头猫                heightType="big"
90*09528755S猫头猫                onPress={() => {
91*09528755S猫头猫                    NativeUtils.requestStoragePermission();
92*09528755S猫头猫                }}>
93*09528755S猫头猫                <ListItem.Content
94*09528755S猫头猫                    title="文件读写权限"
95*09528755S猫头猫                    description="用以下载歌曲、缓存数据"
96*09528755S猫头猫                />
97*09528755S猫头猫                <ThemeSwitch value={permissions.fileStorage} />
98*09528755S猫头猫            </ListItem>
99*09528755S猫头猫            {/* <ListItem withHorizonalPadding heightType="big">
100*09528755S猫头猫                <ListItem.Content
101*09528755S猫头猫                    title="后台运行"
102*09528755S猫头猫                    description="用以在后台播放音乐"></ListItem.Content>
103*09528755S猫头猫                <ThemeSwitch value={permissions.background}></ThemeSwitch>
104*09528755S猫头猫            </ListItem> */}
105*09528755S猫头猫        </VerticalSafeAreaView>
106*09528755S猫头猫    );
107*09528755S猫头猫}
108*09528755S猫头猫
109*09528755S猫头猫const styles = StyleSheet.create({
110*09528755S猫头猫    description: {
111*09528755S猫头猫        width: '100%',
112*09528755S猫头猫        paddingHorizontal: rpx(24),
113*09528755S猫头猫        marginVertical: rpx(36),
114*09528755S猫头猫    },
115*09528755S猫头猫});
116