import { File } from 'expo-file-system'; import { ImageManipulator, SaveFormat } from 'expo-image-manipulator'; import * as ImagePicker from 'expo-image-picker'; import { router } from 'expo-router'; import { useState } from 'react'; import { Alert, Linking, Platform, StyleSheet, View } from 'react-native'; import useSWR from 'swr'; import { SERVICE_LABELS, STREAMING_SERVICES, timeAgo, type ConnectionDTO, type MeDTO, type NowPlayingProvider, type StreamingService, type NotificationType, NOTIFICATION_PREF_LABELS, NOTIFICATION_TYPES, } from '@musicshare/shared'; import { Avatar } from '@/components/Avatar'; import { RelinkReminder } from '@/components/RelinkReminder'; import { FeaturedPicker } from '@/components/FeaturedPicker'; import { Screen } from '@/components/Screen'; import { ServiceName } from '@/components/ServiceName'; import { SharingControls } from '@/components/SharingControls'; import { Body, Button, Card, Chip, Field, Heading, ListRow, Row, Title } from '@/components/ui'; import { api } from '@/lib/api'; import { WEB_URL } from '@/lib/config'; import { showError } from '@/lib/errors'; import { AppleMusicPermissionError, appleMusicAvailable, connectAppleMusic } from '@/lib/appleMusic'; import { SignInError, openSignupPage, openSpotifyLinkPage, signInWithService } from '@/lib/connect'; import { openReaderSettings, useReader } from '@/lib/nowPlayingReader'; import { NTFY_URL, disablePush, enablePush, pushAvailable, usePushStatus } from '@/lib/push'; import { useSession } from '@/lib/session'; import { checkForUpdate, currentVersion, installUpdate, updaterAvailable, useUpdateState } from '@/lib/updates'; import { colors, radius, space } from '@/lib/theme'; export default function SettingsScreen() { return ( Settings ); } function ProfileSection() { const { me, setMe } = useSession(); const [displayName, setDisplayName] = useState(me?.displayName ?? ''); const [bio, setBio] = useState(me?.bio ?? ''); const [busy, setBusy] = useState(false); const save = async () => { setBusy(true); try { setMe(await api.updateMe({ displayName: displayName.trim() || null, bio: bio.trim() || null })); } catch (err) { showError(err); } setBusy(false); }; return ( Profile