diff --git a/mobile/app.json b/mobile/app.json index 1e84ebf..90255e3 100644 --- a/mobile/app.json +++ b/mobile/app.json @@ -8,9 +8,19 @@ "userInterfaceStyle": "dark", "newArchEnabled": true, "platforms": ["ios", "android"], + "icon": "./assets/icon.png", + "splash": { + "image": "./assets/splash-icon.png", + "resizeMode": "contain", + "backgroundColor": "#09090b" + }, "android": { "package": "org.bincio.app", "usesCleartextTraffic": true, + "adaptiveIcon": { + "foregroundImage": "./assets/adaptive-icon.png", + "backgroundColor": "#09090b" + }, "permissions": [ "android.permission.READ_EXTERNAL_STORAGE", "android.permission.READ_MEDIA_VIDEO", @@ -24,6 +34,7 @@ "supportsTablet": true }, "plugins": [ + "expo-system-ui", "expo-router", "expo-sqlite", [ diff --git a/mobile/app/(tabs)/settings.tsx b/mobile/app/(tabs)/settings.tsx index f986250..448fd03 100644 --- a/mobile/app/(tabs)/settings.tsx +++ b/mobile/app/(tabs)/settings.tsx @@ -19,6 +19,8 @@ export default function SettingsScreen() { const [instanceUrl, setInstanceUrl] = useState(storedUrl); const [handle, setHandle] = useState(storedHandle); const [autoPath, setAutoPath] = useState(storedPath); + const [syncMode, setSyncMode] = useState(storedSyncMode); + const [syncUpload, setSyncUpload] = useState(storedSyncUpload); const [saved, setSaved] = useState(false); const [password, setPassword] = useState(''); @@ -181,17 +183,17 @@ export default function SettingsScreen() { setSetting(db, 'sync_mode', 'summaries')} + active={syncMode === 'summaries'} + onPress={() => { setSyncMode('summaries'); setSetting(db, 'sync_mode', 'summaries'); }} /> setSetting(db, 'sync_mode', 'full')} + active={syncMode === 'full'} + onPress={() => { setSyncMode('full'); setSetting(db, 'sync_mode', 'full'); }} /> - {storedSyncMode === 'full' + {syncMode === 'full' ? 'Downloads map route and elevation chart for every activity during sync. Uses more storage and takes longer.' : 'Syncs activity summaries only. Map and chart are fetched on demand when you open an activity.'} @@ -199,17 +201,17 @@ export default function SettingsScreen() { setSetting(db, 'sync_upload', 'false')} + active={!syncUpload} + onPress={() => { setSyncUpload(false); setSetting(db, 'sync_upload', 'false'); }} /> setSetting(db, 'sync_upload', 'true')} + active={syncUpload} + onPress={() => { setSyncUpload(true); setSetting(db, 'sync_upload', 'true'); }} /> - {storedSyncUpload + {syncUpload ? 'Local activities are uploaded to the instance during sync.' : 'Local activities stay on device only.'} diff --git a/mobile/assets/adaptive-icon.png b/mobile/assets/adaptive-icon.png new file mode 100644 index 0000000..e33e136 Binary files /dev/null and b/mobile/assets/adaptive-icon.png differ diff --git a/mobile/assets/icon.png b/mobile/assets/icon.png new file mode 100644 index 0000000..e76ce4d Binary files /dev/null and b/mobile/assets/icon.png differ diff --git a/mobile/assets/splash-icon.png b/mobile/assets/splash-icon.png new file mode 100644 index 0000000..052390f Binary files /dev/null and b/mobile/assets/splash-icon.png differ diff --git a/mobile/package-lock.json b/mobile/package-lock.json index 686590e..d8be60c 100644 --- a/mobile/package-lock.json +++ b/mobile/package-lock.json @@ -20,6 +20,7 @@ "expo-splash-screen": "~31.0.13", "expo-sqlite": "~16.0.10", "expo-status-bar": "~3.0.9", + "expo-system-ui": "~6.0.9", "expo-task-manager": "~14.0.9", "react": "19.1.0", "react-dom": "19.1.0", @@ -4993,6 +4994,26 @@ "react-native": "*" } }, + "node_modules/expo-system-ui": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-6.0.9.tgz", + "integrity": "sha512-eQTYGzw1V4RYiYHL9xDLYID3Wsec2aZS+ypEssmF64D38aDrqbDgz1a2MSlHLQp2jHXSs3FvojhZ9FVela1Zcg==", + "license": "MIT", + "dependencies": { + "@react-native/normalize-colors": "0.81.5", + "debug": "^4.3.2" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*", + "react-native-web": "*" + }, + "peerDependenciesMeta": { + "react-native-web": { + "optional": true + } + } + }, "node_modules/expo-task-manager": { "version": "14.0.9", "resolved": "https://registry.npmjs.org/expo-task-manager/-/expo-task-manager-14.0.9.tgz", diff --git a/mobile/package.json b/mobile/package.json index 3d51ef1..b60a2f1 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -10,26 +10,27 @@ "lint": "expo lint" }, "dependencies": { + "@maplibre/maplibre-react-native": "~11.0.0", "expo": "~54.0.33", - "expo-router": "~6.0.23", - "expo-sqlite": "~16.0.10", + "expo-background-fetch": "~14.0.9", + "expo-constants": "~18.0.13", "expo-document-picker": "~14.0.8", "expo-file-system": "~19.0.21", - "expo-background-fetch": "~14.0.9", - "expo-task-manager": "~14.0.9", - "expo-notifications": "~0.32.16", - "expo-constants": "~18.0.13", "expo-linking": "~8.0.11", + "expo-notifications": "~0.32.16", + "expo-router": "~6.0.23", "expo-splash-screen": "~31.0.13", + "expo-sqlite": "~16.0.10", "expo-status-bar": "~3.0.9", + "expo-system-ui": "~6.0.9", + "expo-task-manager": "~14.0.9", "react": "19.1.0", "react-dom": "19.1.0", "react-native": "0.81.5", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-svg": "~15.15.0", - "react-native-webview": "13.15.0", - "@maplibre/maplibre-react-native": "~11.0.0" + "react-native-webview": "13.15.0" }, "devDependencies": { "@babel/core": "^7.25.0",