WellNuo/app/(tabs)/voice.tsx
Sergei f94121b848 Update voice call, equipment tracking, and cleanup
- Update WellNuoLite submodule with Julia AI race condition fix
- Add ultravoxService for voice call handling
- Update voice.tsx with improved call flow
- Update equipment tracking in beneficiary details
- Clean up old data files
- Add react-native-base64 type definitions
- Add debug tools

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-22 09:34:01 -08:00

89 lines
2.5 KiB
TypeScript

/**
* Voice AI Screen - Expo Go Stub
* This screen requires native modules that are not available in Expo Go.
* A development build is required for the full voice functionality.
*/
import React from 'react';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import { Ionicons } from '@expo/vector-icons';
import { SafeAreaView } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { AppColors, FontSizes, FontWeights, Spacing, BorderRadius } from '@/constants/theme';
export default function VoiceAIScreen() {
const router = useRouter();
return (
<SafeAreaView style={styles.container} edges={['top']}>
<View style={styles.content}>
<View style={styles.iconContainer}>
<Ionicons name="mic-off" size={64} color={AppColors.textMuted} />
</View>
<Text style={styles.title}>Voice AI Not Available</Text>
<Text style={styles.description}>
Voice calls require a development build.{'\n'}
Expo Go does not support native audio modules.
</Text>
<TouchableOpacity
style={styles.button}
onPress={() => router.push('/(tabs)/chat' as any)}
>
<Ionicons name="chatbubble" size={20} color={AppColors.white} />
<Text style={styles.buttonText}>Use Text Chat Instead</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: AppColors.background,
},
content: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: Spacing.xl,
},
iconContainer: {
width: 120,
height: 120,
borderRadius: 60,
backgroundColor: AppColors.surfaceSecondary,
justifyContent: 'center',
alignItems: 'center',
marginBottom: Spacing.xl,
},
title: {
fontSize: FontSizes.xl,
fontWeight: FontWeights.bold,
color: AppColors.textPrimary,
marginBottom: Spacing.sm,
textAlign: 'center',
},
description: {
fontSize: FontSizes.base,
color: AppColors.textMuted,
textAlign: 'center',
lineHeight: 22,
marginBottom: Spacing.xl,
},
button: {
flexDirection: 'row',
alignItems: 'center',
backgroundColor: AppColors.primary,
paddingHorizontal: Spacing.xl,
paddingVertical: Spacing.md,
borderRadius: BorderRadius.lg,
gap: Spacing.sm,
},
buttonText: {
fontSize: FontSizes.base,
fontWeight: FontWeights.semibold,
color: AppColors.white,
},
});