1a27adc20S猫头猫import React from 'react'; 2a27adc20S猫头猫import {StyleSheet, View} from 'react-native'; 3a27adc20S猫头猫import rpx from '@/utils/rpx'; 4a27adc20S猫头猫import globalStyle from '@/constants/globalStyle'; 5a27adc20S猫头猫import Image from '@/components/base/image'; 6a27adc20S猫头猫import {ImgAsset} from '@/constants/assetsConst'; 7a27adc20S猫头猫import {ScrollView, TouchableOpacity} from 'react-native-gesture-handler'; 8a27adc20S猫头猫import {launchImageLibrary} from 'react-native-image-picker'; 9a27adc20S猫头猫import pathConst from '@/constants/pathConst'; 10a27adc20S猫头猫import {copyFile} from 'react-native-fs'; 11a27adc20S猫头猫import ImageColors from 'react-native-image-colors'; 12a27adc20S猫头猫import ThemeText from '@/components/base/themeText'; 13a27adc20S猫头猫import Slider from '@react-native-community/slider'; 14a27adc20S猫头猫import Theme from '@/core/theme'; 15a27adc20S猫头猫import Color from 'color'; 16a27adc20S猫头猫import {showPanel} from '@/components/panels/usePanel'; 17a27adc20S猫头猫 18a27adc20S猫头猫export default function Body() { 19a27adc20S猫头猫 const theme = Theme.useTheme(); 20a27adc20S猫头猫 const backgroundInfo = Theme.useBackground(); 21a27adc20S猫头猫 22a27adc20S猫头猫 async function onImageClick() { 23a27adc20S猫头猫 try { 24a27adc20S猫头猫 const result = await launchImageLibrary({ 25a27adc20S猫头猫 mediaType: 'photo', 26a27adc20S猫头猫 }); 27a27adc20S猫头猫 const uri = result.assets?.[0].uri; 28a27adc20S猫头猫 if (!uri) { 29a27adc20S猫头猫 return; 30a27adc20S猫头猫 } 31a27adc20S猫头猫 32a27adc20S猫头猫 const bgPath = `${pathConst.dataPath}background${uri.substring( 33a27adc20S猫头猫 uri.lastIndexOf('.'), 34a27adc20S猫头猫 )}`; 35a27adc20S猫头猫 await copyFile(uri, bgPath); 36a27adc20S猫头猫 37a27adc20S猫头猫 const colorsResult = await ImageColors.getColors(uri, { 38a27adc20S猫头猫 fallback: '#ffffff', 39a27adc20S猫头猫 }); 40a27adc20S猫头猫 const colors = { 41a27adc20S猫头猫 primary: 42a27adc20S猫头猫 colorsResult.platform === 'android' 43a27adc20S猫头猫 ? colorsResult.dominant 44a27adc20S猫头猫 : colorsResult.platform === 'ios' 45a27adc20S猫头猫 ? colorsResult.primary 46a27adc20S猫头猫 : colorsResult.vibrant, 47a27adc20S猫头猫 average: 48a27adc20S猫头猫 colorsResult.platform === 'android' 49a27adc20S猫头猫 ? colorsResult.average 50a27adc20S猫头猫 : colorsResult.platform === 'ios' 51a27adc20S猫头猫 ? colorsResult.detail 52a27adc20S猫头猫 : colorsResult.dominant, 53a27adc20S猫头猫 vibrant: 54a27adc20S猫头猫 colorsResult.platform === 'android' 55a27adc20S猫头猫 ? colorsResult.vibrant 56a27adc20S猫头猫 : colorsResult.platform === 'ios' 57a27adc20S猫头猫 ? colorsResult.secondary 58a27adc20S猫头猫 : colorsResult.vibrant, 59a27adc20S猫头猫 }; 60b4a87dd6S猫头猫 Theme.setTheme('custom', { 61b4a87dd6S猫头猫 colors: { 62b4a87dd6S猫头猫 appBar: colors.primary, 63*ab55f125S猫头猫 primary: Color(colors.primary).lighten(2).toString(), 64*ab55f125S猫头猫 musicBar: colors.primary, 65b4a87dd6S猫头猫 }, 66b4a87dd6S猫头猫 background: { 67b4a87dd6S猫头猫 url: `file://${bgPath}#${Date.now()}`, 68b4a87dd6S猫头猫 }, 69b4a87dd6S猫头猫 }); 70a27adc20S猫头猫 // Config.set('setting.theme.colors', { 71a27adc20S猫头猫 // primary: primaryColor, 72a27adc20S猫头猫 // textHighlight: textHighlight, 73a27adc20S猫头猫 // accent: textHighlight, 74a27adc20S猫头猫 // }); 75a27adc20S猫头猫 } catch (e) { 76a27adc20S猫头猫 console.log(e); 77a27adc20S猫头猫 } 78a27adc20S猫头猫 } 79a27adc20S猫头猫 80a27adc20S猫头猫 return ( 81a27adc20S猫头猫 <ScrollView style={globalStyle.fwflex1}> 82a27adc20S猫头猫 <TouchableOpacity onPress={onImageClick}> 83a27adc20S猫头猫 <Image 84a27adc20S猫头猫 style={styles.image} 85a27adc20S猫头猫 uri={backgroundInfo?.url} 86a27adc20S猫头猫 emptySrc={ImgAsset.addBackground} 87a27adc20S猫头猫 /> 88a27adc20S猫头猫 </TouchableOpacity> 89a27adc20S猫头猫 90a27adc20S猫头猫 <View style={styles.sliderWrapper}> 91a27adc20S猫头猫 <ThemeText>模糊度</ThemeText> 92a27adc20S猫头猫 <Slider 93a27adc20S猫头猫 style={styles.slider} 94b4a87dd6S猫头猫 minimumTrackTintColor={theme.colors.primary} 95b4a87dd6S猫头猫 maximumTrackTintColor={theme.colors.text ?? '#999999'} 96b4a87dd6S猫头猫 thumbTintColor={theme.colors.primary} 97a27adc20S猫头猫 minimumValue={0} 98b4a87dd6S猫头猫 step={1} 99a27adc20S猫头猫 maximumValue={30} 100a27adc20S猫头猫 onSlidingComplete={val => { 101a27adc20S猫头猫 Theme.setBackground({ 102a27adc20S猫头猫 blur: val, 103a27adc20S猫头猫 }); 104a27adc20S猫头猫 }} 105a27adc20S猫头猫 value={backgroundInfo?.blur ?? 20} 106a27adc20S猫头猫 /> 107a27adc20S猫头猫 </View> 108a27adc20S猫头猫 <View style={styles.sliderWrapper}> 109a27adc20S猫头猫 <ThemeText>透明度</ThemeText> 110a27adc20S猫头猫 <Slider 111a27adc20S猫头猫 style={styles.slider} 112b4a87dd6S猫头猫 minimumTrackTintColor={theme.colors.primary} 113b4a87dd6S猫头猫 maximumTrackTintColor={theme.colors.text ?? '#999999'} 114b4a87dd6S猫头猫 thumbTintColor={theme.colors.primary} 115a27adc20S猫头猫 minimumValue={0.3} 116b4a87dd6S猫头猫 step={0.01} 117a27adc20S猫头猫 maximumValue={1} 118a27adc20S猫头猫 onSlidingComplete={val => { 119a27adc20S猫头猫 Theme.setBackground({ 120a27adc20S猫头猫 opacity: val, 121a27adc20S猫头猫 }); 122a27adc20S猫头猫 }} 123a27adc20S猫头猫 value={backgroundInfo?.opacity ?? 0.7} 124a27adc20S猫头猫 /> 125a27adc20S猫头猫 </View> 126a27adc20S猫头猫 <View style={styles.colorsContainer}> 127a27adc20S猫头猫 {Theme.configableColorKey.map(key => ( 128a27adc20S猫头猫 <View key={key} style={styles.colorItem}> 129a27adc20S猫头猫 <ThemeText>{Theme.colorDesc[key]}</ThemeText> 130a27adc20S猫头猫 <TouchableOpacity 131a27adc20S猫头猫 onPress={() => { 132a27adc20S猫头猫 showPanel('ColorPicker', { 133a27adc20S猫头猫 // @ts-ignore 134a27adc20S猫头猫 defaultColor: theme.colors[key], 135b4a87dd6S猫头猫 onSelected(color) { 136b4a87dd6S猫头猫 Theme.setColors({ 137b4a87dd6S猫头猫 [key]: color.hexa().toString(), 138b4a87dd6S猫头猫 }); 139b4a87dd6S猫头猫 }, 140a27adc20S猫头猫 }); 141a27adc20S猫头猫 }} 142a27adc20S猫头猫 style={styles.colorItemBlockContainer}> 143a27adc20S猫头猫 <View 144a27adc20S猫头猫 style={[ 145a27adc20S猫头猫 { 146a27adc20S猫头猫 /** @ts-ignore */ 147a27adc20S猫头猫 backgroundColor: theme.colors[key], 148a27adc20S猫头猫 }, 149a27adc20S猫头猫 styles.colorBlock, 150a27adc20S猫头猫 ]} 151a27adc20S猫头猫 /> 152a27adc20S猫头猫 <ThemeText 153a27adc20S猫头猫 fontSize="subTitle" 154a27adc20S猫头猫 style={styles.colorText}> 155a27adc20S猫头猫 { 156a27adc20S猫头猫 /** @ts-ignore */ 157a27adc20S猫头猫 Color(theme.colors[key]).hexa().toString() 158a27adc20S猫头猫 } 159a27adc20S猫头猫 </ThemeText> 160a27adc20S猫头猫 </TouchableOpacity> 161a27adc20S猫头猫 </View> 162a27adc20S猫头猫 ))} 163a27adc20S猫头猫 </View> 164a27adc20S猫头猫 </ScrollView> 165a27adc20S猫头猫 ); 166a27adc20S猫头猫} 167a27adc20S猫头猫 168a27adc20S猫头猫const styles = StyleSheet.create({ 169a27adc20S猫头猫 container: { 170a27adc20S猫头猫 width: '100%', 171a27adc20S猫头猫 flex: 1, 172a27adc20S猫头猫 }, 173a27adc20S猫头猫 image: { 174a27adc20S猫头猫 marginTop: rpx(36), 175a27adc20S猫头猫 borderRadius: rpx(12), 176a27adc20S猫头猫 width: rpx(460), 177a27adc20S猫头猫 height: rpx(690), 178a27adc20S猫头猫 alignSelf: 'center', 179a27adc20S猫头猫 }, 180a27adc20S猫头猫 sliderWrapper: { 181a27adc20S猫头猫 marginTop: rpx(48), 182a27adc20S猫头猫 width: '100%', 183a27adc20S猫头猫 paddingHorizontal: rpx(24), 184a27adc20S猫头猫 flexDirection: 'row', 185a27adc20S猫头猫 justifyContent: 'space-between', 186a27adc20S猫头猫 alignItems: 'center', 187a27adc20S猫头猫 }, 188a27adc20S猫头猫 slider: { 189a27adc20S猫头猫 flex: 1, 190a27adc20S猫头猫 height: rpx(40), 191a27adc20S猫头猫 }, 192a27adc20S猫头猫 colorsContainer: { 193a27adc20S猫头猫 width: '100%', 194a27adc20S猫头猫 flex: 1, 195a27adc20S猫头猫 flexDirection: 'row', 196a27adc20S猫头猫 flexWrap: 'wrap', 197a27adc20S猫头猫 marginTop: rpx(48), 198a27adc20S猫头猫 paddingHorizontal: rpx(24), 199a27adc20S猫头猫 justifyContent: 'space-between', 200a27adc20S猫头猫 }, 201a27adc20S猫头猫 colorItem: { 202a27adc20S猫头猫 flex: 1, 203a27adc20S猫头猫 flexBasis: '40%', 204a27adc20S猫头猫 marginBottom: rpx(36), 205a27adc20S猫头猫 }, 206a27adc20S猫头猫 colorBlock: { 207a27adc20S猫头猫 width: rpx(76), 208a27adc20S猫头猫 height: rpx(50), 209a27adc20S猫头猫 borderWidth: 1, 210a27adc20S猫头猫 borderStyle: 'solid', 211a27adc20S猫头猫 borderColor: '#ccc', 212a27adc20S猫头猫 }, 213a27adc20S猫头猫 colorItemBlockContainer: { 214a27adc20S猫头猫 marginTop: rpx(18), 215a27adc20S猫头猫 flexDirection: 'row', 216a27adc20S猫头猫 alignItems: 'center', 217a27adc20S猫头猫 }, 218a27adc20S猫头猫 colorText: { 219a27adc20S猫头猫 marginLeft: rpx(8), 220a27adc20S猫头猫 }, 221a27adc20S猫头猫}); 222