A local Expo module listens to system media sessions (the only way Android exposes other apps' playback, gated by notification access; we never read notifications). It filters to known music apps, debounces and deduplicates changes, sends a heartbeat while playing, and delivers reports through WorkManager so they survive the app being closed. - One-screen onboarding that doubles as Google Play's prominent disclosure, opening straight to the app's toggle in Android settings - Only media notifications are pre-ticked on that settings screen - Device registration is single-flight (several screens react to the same permission change) and self-heals if the server revokes a token - Sign-out revokes the phone's token; resuming sharing re-sends the current track immediately - Pause controls in Settings and on the feed - Fix invisible tab icons and labels on Android - Keep Metro out of build output so it doesn't exhaust file watchers Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MzFywujuH9TiuXbr9vjoX8
50 lines
1.4 KiB
JSON
50 lines
1.4 KiB
JSON
{
|
|
"name": "@musicshare/mobile",
|
|
"main": "expo-router/entry",
|
|
"version": "1.0.0",
|
|
"dependencies": {
|
|
"@expo/ui": "~57.0.21",
|
|
"@musicshare/shared": "*",
|
|
"expo": "~57.0.26",
|
|
"expo-constants": "~57.0.20",
|
|
"expo-device": "~57.0.2",
|
|
"expo-font": "~57.0.4",
|
|
"expo-glass-effect": "~57.0.4",
|
|
"expo-image": "~57.0.5",
|
|
"expo-linking": "~57.0.11",
|
|
"expo-router": "~57.0.24",
|
|
"expo-secure-store": "~57.0.4",
|
|
"expo-splash-screen": "~57.0.9",
|
|
"expo-status-bar": "~57.0.1",
|
|
"expo-symbols": "~57.0.3",
|
|
"expo-system-ui": "~57.0.4",
|
|
"expo-web-browser": "~57.0.3",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"react-native": "0.86.3",
|
|
"react-native-gesture-handler": "~2.32.0",
|
|
"react-native-reanimated": "4.5.1",
|
|
"react-native-safe-area-context": "~5.7.0",
|
|
"react-native-screens": "~4.26.0",
|
|
"react-native-web": "~0.21.0",
|
|
"react-native-worklets": "0.10.1",
|
|
"swr": "^2.5.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/react": "~19.2.2",
|
|
"@typescript-eslint/parser": "^8.71.0",
|
|
"eslint": "^9.0.0",
|
|
"eslint-config-expo": "~57.0.2",
|
|
"eslint-import-resolver-typescript": "^3.10.1",
|
|
"typescript": "~6.0.3"
|
|
},
|
|
"scripts": {
|
|
"start": "expo start",
|
|
"android": "expo run:android",
|
|
"ios": "expo run:ios",
|
|
"typecheck": "tsc --noEmit",
|
|
"lint": "expo lint"
|
|
},
|
|
"private": true
|
|
}
|