feat(keyboard): add clipboard voice command mode
Long-press mic runs ASR as an instruction over eligible clipboard text, with host-confirm recording UI, min-record gate, and light ASR prewarm. Bump CURRENT_PROJECT_VERSION to 53.
This commit is contained in:
@@ -160,6 +160,7 @@ public final class KeyboardViewController: UIInputViewController {
|
||||
KeyboardSetupBridge.markExtensionAppearance(hasFullAccess: hasFullAccess)
|
||||
state.debugHasFullAccess = hasFullAccess
|
||||
flowCoordinator.refreshSessionState()
|
||||
flowCoordinator.refreshClipboardEligibility()
|
||||
flowCoordinator.startSessionMonitor()
|
||||
configSync.syncOnboardingStateFromAppGroup()
|
||||
configSync.refreshConfigFromAppGroup()
|
||||
@@ -247,6 +248,7 @@ public final class KeyboardViewController: UIInputViewController {
|
||||
textInserter = KeyboardTextInserter(
|
||||
state: state,
|
||||
insertText: { [weak self] text in self?.textDocumentProxy.insertText(text) },
|
||||
deleteBackward: { [weak self] in self?.textDocumentProxy.deleteBackward() },
|
||||
contextBeforeInput: { [weak self] in self?.textDocumentProxy.documentContextBeforeInput },
|
||||
scheduleAutoClearError: { [weak self] in self?.scheduleAutoClearError() }
|
||||
)
|
||||
@@ -285,6 +287,15 @@ public final class KeyboardViewController: UIInputViewController {
|
||||
state.beginRecording = { [weak self] in self?.flowCoordinator.pressBegan() }
|
||||
state.endRecording = { [weak self] in self?.flowCoordinator.pressEnded() }
|
||||
state.tapMic = { [weak self] in self?.flowCoordinator.toggleRecording() }
|
||||
state.beginClipboardCommand = { [weak self] in
|
||||
self?.flowCoordinator.clipboardCommandPressBegan()
|
||||
}
|
||||
state.endClipboardCommand = { [weak self] in
|
||||
self?.flowCoordinator.clipboardCommandPressEnded()
|
||||
}
|
||||
state.refreshClipboardEligibility = { [weak self] in
|
||||
self?.flowCoordinator.refreshClipboardEligibility()
|
||||
}
|
||||
state.openSettings = { [weak self] in self?.openHostApp() }
|
||||
state.startFlowSession = { [weak self] in self?.flowCoordinator.beginFlowStart() }
|
||||
state.setMode = { [weak self] m in self?.configSync.persistMode(m) }
|
||||
|
||||
Reference in New Issue
Block a user