diff --git a/android/android/app/build.gradle b/android/android/app/build.gradle
index 2e4aeb3..fece03e 100644
--- a/android/android/app/build.gradle
+++ b/android/android/app/build.gradle
@@ -79,8 +79,8 @@ android {
applicationId "com.ariacockpit"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 108
- versionName "0.0.1.8"
+ versionCode 109
+ versionName "0.0.1.9"
// Fallback fuer Libraries mit Product Flavors
missingDimensionStrategy 'react-native-camera', 'general'
}
diff --git a/android/package.json b/android/package.json
index 67f71d0..d590ee0 100644
--- a/android/package.json
+++ b/android/package.json
@@ -1,6 +1,6 @@
{
"name": "aria-cockpit",
- "version": "0.0.1.8",
+ "version": "0.0.1.9",
"private": true,
"scripts": {
"android": "react-native run-android",
diff --git a/android/src/screens/SettingsScreen.tsx b/android/src/screens/SettingsScreen.tsx
index c3b4458..2388ffb 100644
--- a/android/src/screens/SettingsScreen.tsx
+++ b/android/src/screens/SettingsScreen.tsx
@@ -71,6 +71,9 @@ const SettingsScreen: React.FC = () => {
const [storagePath, setStoragePath] = useState(DEFAULT_STORAGE_PATH);
const [autoDownload, setAutoDownload] = useState(true);
const [storageSize, setStorageSize] = useState('...');
+ const [ttsEnabled, setTtsEnabled] = useState(true);
+ const [defaultVoice, setDefaultVoice] = useState('ramona');
+ const [highlightVoice, setHighlightVoice] = useState('thorsten');
const [editingPath, setEditingPath] = useState(false);
const [tempPath, setTempPath] = useState('');
@@ -91,6 +94,15 @@ const SettingsScreen: React.FC = () => {
AsyncStorage.getItem('aria_auto_download').then(saved => {
if (saved !== null) setAutoDownload(saved === 'true');
});
+ AsyncStorage.getItem('aria_tts_enabled').then(saved => {
+ if (saved !== null) setTtsEnabled(saved === 'true');
+ });
+ AsyncStorage.getItem('aria_default_voice').then(saved => {
+ if (saved) setDefaultVoice(saved);
+ });
+ AsyncStorage.getItem('aria_highlight_voice').then(saved => {
+ if (saved) setHighlightVoice(saved);
+ });
}, []);
// Speichergroesse berechnen
@@ -442,6 +454,83 @@ const SettingsScreen: React.FC = () => {
+ {/* === Sprachausgabe === */}
+ Sprachausgabe
+
+ {/* TTS An/Aus */}
+
+
+ Sprachausgabe
+ ARIA antwortet per Sprache (TTS)
+
+ {
+ setTtsEnabled(val);
+ AsyncStorage.setItem('aria_tts_enabled', String(val));
+ rvs.send('config' as any, { ttsEnabled: val });
+ }}
+ trackColor={{ false: '#2A2A3E', true: '#0096FF' }}
+ thumbColor={ttsEnabled ? '#FFFFFF' : '#666680'}
+ />
+
+
+ {/* Standard-Stimme */}
+
+ Standard-Stimme
+ Fuer normale Antworten und Gespraeche
+
+ { setDefaultVoice('ramona'); AsyncStorage.setItem('aria_default_voice', 'ramona'); }}
+ >
+ {'\uD83D\uDE4E\u200D\u2640\uFE0F'}
+ Ramona
+ Weiblich, warm
+
+ { setDefaultVoice('thorsten'); AsyncStorage.setItem('aria_default_voice', 'thorsten'); }}
+ >
+ {'\uD83E\uDDD4'}
+ Thorsten
+ Maennlich, tief
+
+
+
+
+ {/* Highlight-Stimme */}
+
+ Highlight-Stimme
+ Fuer besondere Ereignisse (Deploy, Alarm, Erfolg)
+
+ { setHighlightVoice('thorsten'); AsyncStorage.setItem('aria_highlight_voice', 'thorsten'); }}
+ >
+ {'\uD83E\uDDD4'}
+ Thorsten
+
+ { setHighlightVoice('ramona'); AsyncStorage.setItem('aria_highlight_voice', 'ramona'); }}
+ >
+ {'\uD83D\uDE4E\u200D\u2640\uFE0F'}
+ Ramona
+
+
+
+
+ {/* Highlight-Trigger Info */}
+
+ {'\u26A1'} Highlight-Trigger
+
+ Die Highlight-Stimme wird automatisch bei diesen Woertern verwendet:{'\n'}
+ deploy, erfolgreich, alarm, so soll es sein, kritisch, server down, sicherheitswarnung, ticket geloest, aufgabe abgeschlossen
+
+
+
+
{/* === Speicher === */}
Anhang-Speicher
@@ -601,7 +690,7 @@ const SettingsScreen: React.FC = () => {
{'\u00DC'}ber
ARIA Cockpit
- Version 0.0.1.8
+ Version 0.0.1.9
Stefans Kommandozentrale f{'\u00FC'}r ARIA.{'\n'}
Gebaut mit React Native + TypeScript.
@@ -744,6 +833,38 @@ const styles = StyleSheet.create({
marginTop: 2,
},
+ // Stimmen
+ voiceBtn: {
+ flex: 1,
+ padding: 12,
+ borderRadius: 10,
+ backgroundColor: '#1E1E2E',
+ alignItems: 'center',
+ borderWidth: 2,
+ borderColor: 'transparent',
+ },
+ voiceBtnActive: {
+ borderColor: '#0096FF',
+ backgroundColor: '#0D1A2E',
+ },
+ voiceBtnIcon: {
+ fontSize: 28,
+ marginBottom: 4,
+ },
+ voiceBtnText: {
+ color: '#8888AA',
+ fontSize: 14,
+ fontWeight: '600',
+ },
+ voiceBtnTextActive: {
+ color: '#FFFFFF',
+ },
+ voiceBtnHint: {
+ color: '#555570',
+ fontSize: 11,
+ marginTop: 2,
+ },
+
// Speicher
storagePathText: {
color: '#0096FF',