diff --git a/packages/mobile-voice/app.json b/packages/mobile-voice/app.json index e588d54002..1cbc511af1 100644 --- a/packages/mobile-voice/app.json +++ b/packages/mobile-voice/app.json @@ -8,7 +8,7 @@ "scheme": "mobilevoice", "userInterfaceStyle": "automatic", "ios": { - "icon": "./assets/expo.icon", + "icon": "./assets/images/icon.png", "bundleIdentifier": "com.anomalyco.mobilevoice", "infoPlist": { "NSMicrophoneUsageDescription": "This app needs microphone access for live speech-to-text dictation.", diff --git a/packages/mobile-voice/assets/android-icon-background.png b/packages/mobile-voice/assets/android-icon-background.png index 5ffefc5bb5..912c71d0f3 100644 Binary files a/packages/mobile-voice/assets/android-icon-background.png and b/packages/mobile-voice/assets/android-icon-background.png differ diff --git a/packages/mobile-voice/assets/android-icon-foreground.png b/packages/mobile-voice/assets/android-icon-foreground.png index 3a9e5016dc..912c71d0f3 100644 Binary files a/packages/mobile-voice/assets/android-icon-foreground.png and b/packages/mobile-voice/assets/android-icon-foreground.png differ diff --git a/packages/mobile-voice/assets/android-icon-monochrome.png b/packages/mobile-voice/assets/android-icon-monochrome.png index 77484ebdbc..912c71d0f3 100644 Binary files a/packages/mobile-voice/assets/android-icon-monochrome.png and b/packages/mobile-voice/assets/android-icon-monochrome.png differ diff --git a/packages/mobile-voice/assets/icon.png b/packages/mobile-voice/assets/icon.png index 7165a53c74..17a179d70f 100644 Binary files a/packages/mobile-voice/assets/icon.png and b/packages/mobile-voice/assets/icon.png differ diff --git a/packages/mobile-voice/assets/images/android-icon-background.png b/packages/mobile-voice/assets/images/android-icon-background.png index 5ffefc5bb5..912c71d0f3 100644 Binary files a/packages/mobile-voice/assets/images/android-icon-background.png and b/packages/mobile-voice/assets/images/android-icon-background.png differ diff --git a/packages/mobile-voice/assets/images/android-icon-foreground.png b/packages/mobile-voice/assets/images/android-icon-foreground.png index 3a9e5016dc..912c71d0f3 100644 Binary files a/packages/mobile-voice/assets/images/android-icon-foreground.png and b/packages/mobile-voice/assets/images/android-icon-foreground.png differ diff --git a/packages/mobile-voice/assets/images/android-icon-monochrome.png b/packages/mobile-voice/assets/images/android-icon-monochrome.png index 77484ebdbc..912c71d0f3 100644 Binary files a/packages/mobile-voice/assets/images/android-icon-monochrome.png and b/packages/mobile-voice/assets/images/android-icon-monochrome.png differ diff --git a/packages/mobile-voice/assets/images/favicon.png b/packages/mobile-voice/assets/images/favicon.png index 408bd74661..9b828a1706 100644 Binary files a/packages/mobile-voice/assets/images/favicon.png and b/packages/mobile-voice/assets/images/favicon.png differ diff --git a/packages/mobile-voice/assets/images/icon.png b/packages/mobile-voice/assets/images/icon.png index 67c777a454..17a179d70f 100644 Binary files a/packages/mobile-voice/assets/images/icon.png and b/packages/mobile-voice/assets/images/icon.png differ diff --git a/packages/mobile-voice/src/app/index.tsx b/packages/mobile-voice/src/app/index.tsx index 12fdc269b9..cac8f8db46 100644 --- a/packages/mobile-voice/src/app/index.tsx +++ b/packages/mobile-voice/src/app/index.tsx @@ -5,7 +5,6 @@ import { View, Pressable, ScrollView, - TextInput, Modal, Alert, LayoutChangeEvent, @@ -120,6 +119,11 @@ type Scan = { data: string } +type Cam = { + CameraView: (typeof import("expo-camera"))["CameraView"] + requestCameraPermissionsAsync: (typeof import("expo-camera"))["Camera"]["requestCameraPermissionsAsync"] +} + function parsePair(input: string): Pair | undefined { try { const data = JSON.parse(input) @@ -158,14 +162,7 @@ function pickHost(list: string[]): string | undefined { } export default function DictationScreen() { - const [camera, setCamera] = useState<{ - CameraView: React.ComponentType<{ - style?: unknown - barcodeScannerSettings?: { barcodeTypes?: string[] } - onBarcodeScanned?: (event: Scan) => void - }> - requestCameraPermissionsAsync: () => Promise<{ granted: boolean | undefined }> - } | null>(null) + const [camera, setCamera] = useState(null) const [modelReset, setModelReset] = useState(false) const model = useSpeechToText({ model: WHISPER_BASE_EN, @@ -184,10 +181,6 @@ export default function DictationScreen() { const [appState, setAppState] = useState(AppState.currentState) const [dropdownMode, setDropdownMode] = useState("none") const [dropdownRenderMode, setDropdownRenderMode] = useState>("server") - const [isAddingServer, setIsAddingServer] = useState(false) - const [serverDraftURL, setServerDraftURL] = useState("http://127.0.0.1:4096") - const [serverDraftRelayURL, setServerDraftRelayURL] = useState(DEFAULT_RELAY_URL) - const [serverDraftRelaySecret, setServerDraftRelaySecret] = useState("") const [scanOpen, setScanOpen] = useState(false) const [camGranted, setCamGranted] = useState(false) const [servers, setServers] = useState([ @@ -974,7 +967,7 @@ export default function DictationScreen() { const menuRows = effectiveDropdownMode === "server" ? Math.max(servers.length, 1) : Math.max(activeServer?.sessions.length ?? 0, 1) const expandedRowsHeight = Math.min(menuRows, DROPDOWN_VISIBLE_ROWS) * 42 - const addServerExtraHeight = effectiveDropdownMode === "server" ? (isAddingServer ? 188 : 38) : 8 + const addServerExtraHeight = effectiveDropdownMode === "server" ? 38 : 8 const expandedHeaderHeight = 51 + 12 + expandedRowsHeight + addServerExtraHeight const animatedHeaderStyle = useAnimatedStyle(() => ({ @@ -1135,7 +1128,6 @@ export default function DictationScreen() { const toggleServerMenu = useCallback(() => { Haptics.selectionAsync().catch(() => {}) - setIsAddingServer(false) setDropdownMode((prev) => { const next = prev === "server" ? "none" : "server" if (next === "server") { @@ -1195,18 +1187,6 @@ export default function DictationScreen() { [activeServerId, devicePushToken], ) - const handleStartAddServer = useCallback(() => { - setIsAddingServer(true) - setServerDraftRelayURL(DEFAULT_RELAY_URL) - setServerDraftRelaySecret("") - }, []) - - const handleCancelAddServer = useCallback(() => { - setIsAddingServer(false) - setServerDraftRelayURL(DEFAULT_RELAY_URL) - setServerDraftRelaySecret("") - }, []) - const addServer = useCallback( (serverURL: string, relayURL: string, relaySecretRaw: string) => { const raw = serverURL.trim() @@ -1242,8 +1222,6 @@ export default function DictationScreen() { if (existing) { setActiveServerId(existing.id) setActiveSessionId(null) - setIsAddingServer(false) - setServerDraftRelaySecret("") setDropdownMode("none") refreshServerStatusAndSessions(existing.id) return true @@ -1264,8 +1242,6 @@ export default function DictationScreen() { ]) setActiveServerId(id) setActiveSessionId(null) - setIsAddingServer(false) - setServerDraftRelaySecret("") setDropdownMode("none") refreshServerStatusAndSessions(id) return true @@ -1273,10 +1249,6 @@ export default function DictationScreen() { [refreshServerStatusAndSessions], ) - const handleConfirmAddServer = useCallback(() => { - addServer(serverDraftURL, serverDraftRelayURL, serverDraftRelaySecret) - }, [addServer, serverDraftRelaySecret, serverDraftRelayURL, serverDraftURL]) - const handleStartScan = useCallback(async () => { scanLockRef.current = false const current = @@ -1550,55 +1522,9 @@ export default function DictationScreen() { {effectiveDropdownMode === "server" ? ( - isAddingServer ? ( - - void handleStartScan()} style={styles.scanButton}> - Scan server QR - - - - - - - Cancel - - - Add - - - - ) : ( - - + Add server - - ) + void handleStartScan()} style={styles.addServerButton}> + Add server by scanning QR code + ) : null} @@ -1878,52 +1804,6 @@ const styles = StyleSheet.create({ fontSize: 16, fontWeight: "600", }, - addServerComposer: { - marginTop: 8, - paddingHorizontal: 4, - gap: 8, - }, - scanButton: { - height: 38, - borderRadius: 10, - borderWidth: 1, - borderColor: "#2F4D84", - backgroundColor: "#142544", - alignItems: "center", - justifyContent: "center", - }, - scanButtonText: { - color: "#A8C7FF", - fontSize: 14, - fontWeight: "700", - letterSpacing: 0.2, - }, - addServerInput: { - height: 38, - borderRadius: 10, - borderWidth: 1, - borderColor: "#2A2A33", - backgroundColor: "#151515", - color: "#D6DAE4", - paddingHorizontal: 12, - fontSize: 14, - }, - addServerActions: { - flexDirection: "row", - justifyContent: "flex-end", - gap: 16, - paddingHorizontal: 4, - }, - addServerCancelText: { - color: "#8C93A3", - fontSize: 14, - fontWeight: "600", - }, - addServerConfirmText: { - color: "#FF6A78", - fontSize: 14, - fontWeight: "700", - }, statusLeft: { flexDirection: "row", alignItems: "center",