fix: improve voice and chat controls

This commit is contained in:
Edison Jwa
2026-05-25 18:26:56 +09:00
parent d03ea937e6
commit 487aff4e7c
13 changed files with 351 additions and 147 deletions
@@ -358,6 +358,7 @@ Future<void> showVoiceDetailsSheet(
required String pttBoundInputClass,
required bool isTouchOnly,
required rust.BridgeAudioProcessingConfig initialAudioConfig,
bool onnxRuntimeAvailable = true,
required ValueChanged<rust.BridgeTransmitMode> onModeChanged,
required ValueChanged<int> onReleaseTailChanged,
required ValueChanged<rust.BridgeAudioProcessingConfig> onAudioConfigChanged,
@@ -388,6 +389,7 @@ Future<void> showVoiceDetailsSheet(
pttBoundInputClass: pttBoundInputClass,
isTouchOnly: isTouchOnly,
initialAudioConfig: initialAudioConfig,
onnxRuntimeAvailable: onnxRuntimeAvailable,
onModeChanged: onModeChanged,
onReleaseTailChanged: onReleaseTailChanged,
onAudioConfigChanged: onAudioConfigChanged,
@@ -411,6 +413,7 @@ class _VoiceSheetBody extends StatefulWidget {
required this.pttBoundInputClass,
required this.isTouchOnly,
required this.initialAudioConfig,
required this.onnxRuntimeAvailable,
required this.onModeChanged,
required this.onReleaseTailChanged,
required this.onAudioConfigChanged,
@@ -428,6 +431,7 @@ class _VoiceSheetBody extends StatefulWidget {
final String pttBoundInputClass;
final bool isTouchOnly;
final rust.BridgeAudioProcessingConfig initialAudioConfig;
final bool onnxRuntimeAvailable;
final ValueChanged<rust.BridgeTransmitMode> onModeChanged;
final ValueChanged<int> onReleaseTailChanged;
final ValueChanged<rust.BridgeAudioProcessingConfig> onAudioConfigChanged;
@@ -462,6 +466,10 @@ class _VoiceSheetBodyState extends State<_VoiceSheetBody> {
_audioProcessing = AudioProcessingConfigState.fromConfig(
widget.initialAudioConfig,
);
_audioProcessing.vadBackend = normalizedVadBackend(
_audioProcessing.vadBackend,
onnxRuntimeAvailable: widget.onnxRuntimeAvailable,
);
// Poll audio stats at 250 ms so TX/RX counters and the level meter
// update in real time while the sheet is open, independent of the parent.
@@ -777,19 +785,27 @@ class _VoiceSheetBodyState extends State<_VoiceSheetBody> {
const SizedBox(height: 2),
SegmentedButton<rust.BridgeVadBackend>(
style: voiceSegmentedButtonStyle(theme),
segments: _isDesktopSileroVadHost
? desktopVadBackendSegments
: vadBackendSegments,
segments: vadBackendSegmentsForAvailability(
desktop: _isDesktopSileroVadHost,
onnxRuntimeAvailable: widget.onnxRuntimeAvailable,
),
selected: {_audioProcessing.vadBackend},
onSelectionChanged: (s) {
setState(() => _audioProcessing.vadBackend = s.first);
setState(
() => _audioProcessing.vadBackend = normalizedVadBackend(
s.first,
onnxRuntimeAvailable: widget.onnxRuntimeAvailable,
),
);
_notifyAudioConfig();
},
),
if (_isDesktopSileroVadHost) ...[
const SizedBox(height: 4),
Text(
'Silero needs ONNX Runtime. WebRTC works without it.',
widget.onnxRuntimeAvailable
? 'Silero needs ONNX Runtime. WebRTC works without it.'
: 'Silero is unavailable because ONNX Runtime was not found. WebRTC is selected.',
style: theme.textTheme.bodySmall?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),