Files
OSGKeyboard/OSGKeyboardShared/Models/MicVoiceAvailability.swift
T
Rocky 31f5937a7f feat(keyboard): improve typing, voice flow, and polish reliability
Reduce extension memory pressure and delivery races while adding richer candidates, tactile feedback, and safer two-level creative polishing.
2026-08-05 21:39:31 +08:00

40 lines
1.2 KiB
Swift

// MicVoiceAvailability.swift
// OSGKeyboard · Shared
//
// Single source of truth for keyboard mic color, hint text, and tap behavior.
import Foundation
/// Whether the keyboard mic can start a Flow utterance right now.
public enum MicVoiceAvailability: Equatable, Sendable {
/// Green — tap records immediately without opening the host app.
case ready
/// Orange — voice input blocked; see `Reason` for hint copy.
case unavailable(Reason)
/// Red — user is actively recording.
case recording
/// White — waiting for ASR / cloud polish after stop.
case processing
public enum Reason: Equatable, Sendable {
case missingAPIKey
case hostNotReady
case noFullAccess
case appGroupUnavailable
/// User tapped mic; host app jump in progress, awaiting ready contract.
case preparingSession
/// Host-app first-run setup not finished — voice gated until complete.
case onboardingIncomplete
}
public var isReady: Bool {
if case .ready = self { return true }
return false
}
public var isUnavailable: Bool {
if case .unavailable = self { return true }
return false
}
}