From b5f1bf6d2cfe140d94b7aee5d87755216e5a3bf0 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 10 Mar 2026 16:47:35 +0100 Subject: [PATCH] version 0.0.04 --- CHANGELOG.md | 5 +++++ android/package.json | 3 ++- android/src/services/rvs.ts | 18 ++++++++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cbd5fc..7d7097e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,11 @@ Alle Änderungen am Projekt. Format: [Keep a Changelog](https://keepachangelog.c - `build.sh` schreibt `org.gradle.java.home` dynamisch in `gradle.properties` — verhindert dass Gradle kaputte JVM-Pfade findet (`/usr/lib/jvm/openjdk-17` ohne bin/java) - `minSdkVersion` 21 → 23 — `react-native-camera-kit` braucht mindestens API 23 +**Android App — Credentials Persistenz** +- Verbindungsdaten (Host, Port, Token) werden nach QR-Scan in AsyncStorage gespeichert +- Beim App-Start automatisch geladen und verbunden — einmal scannen, nie wieder +- Neue Dependency: `@react-native-async-storage/async-storage` + **Docker & Infrastruktur** - OpenClaw Image fix: `openclaw/openclaw:latest` → `ghcr.io/openclaw/openclaw:latest` - `libportaudio2` in Bridge Dockerfile hinzugefügt — `sounddevice` braucht PortAudio diff --git a/android/package.json b/android/package.json index 311f3cf..1b83033 100644 --- a/android/package.json +++ b/android/package.json @@ -21,7 +21,8 @@ "@react-native-community/geolocation": "^3.2.1", "react-native-image-picker": "^7.1.0", "react-native-permissions": "^4.1.4", - "react-native-camera-kit": "^13.0.0" + "react-native-camera-kit": "^13.0.0", + "@react-native-async-storage/async-storage": "^1.21.0" }, "devDependencies": { "typescript": "^5.3.3", diff --git a/android/src/services/rvs.ts b/android/src/services/rvs.ts index 9a2dd7e..8b7c7f4 100644 --- a/android/src/services/rvs.ts +++ b/android/src/services/rvs.ts @@ -6,6 +6,8 @@ * typisierte Nachrichten. */ +import AsyncStorage from '@react-native-async-storage/async-storage'; + // --- Typen --- export type ConnectionState = 'connecting' | 'connected' | 'disconnected'; @@ -232,12 +234,13 @@ class RVSConnection { this.messageListeners.forEach(cb => cb(message)); } - // --- Persistenz (AsyncStorage Wrapper) --- + // --- Persistenz --- + + private static readonly STORAGE_KEY = 'rvs_config'; private async saveConfig(config: ConnectionConfig): Promise { try { - // In Produktion: AsyncStorage verwenden - // await AsyncStorage.setItem('rvs_config', JSON.stringify(config)); + await AsyncStorage.setItem(RVSConnection.STORAGE_KEY, JSON.stringify(config)); console.log('[RVS] Konfiguration gespeichert'); } catch (err) { console.error('[RVS] Fehler beim Speichern:', err); @@ -246,9 +249,12 @@ class RVSConnection { async loadConfig(): Promise { try { - // In Produktion: AsyncStorage verwenden - // const data = await AsyncStorage.getItem('rvs_config'); - // if (data) { this.config = JSON.parse(data); return this.config; } + const data = await AsyncStorage.getItem(RVSConnection.STORAGE_KEY); + if (data) { + this.config = JSON.parse(data); + console.log('[RVS] Konfiguration geladen'); + return this.config; + } return null; } catch (err) { console.error('[RVS] Fehler beim Laden:', err);