feat: TypeWhisper Flow sessions, Phase 4 UX, and GitHub Pages privacy site

Migrate keyboard dictation to continuous Flow sessions with auto-start,
tap-to-toggle recording, 60s countdown, five-step onboarding, and App Group
IPC. Add docs/ GitHub Pages site with en/zh privacy policy for App Store compliance.
This commit is contained in:
Rocky
2026-06-19 18:05:50 +08:00
parent 6148d05093
commit 7f059dbd45
48 changed files with 3815 additions and 1065 deletions
@@ -29,8 +29,7 @@
// the ASR to never yield `.final` and asserts the timeout fires.
import XCTest
@testable import OSGKeyboard
import AVFoundation
@testable import OSGKeyboardShared
@MainActor
final class PreviewASRControllerStateTests: XCTestCase {
@@ -41,7 +40,7 @@ final class PreviewASRControllerStateTests: XCTestCase {
/// is the regression test for the original bug if it ever
/// fails, the disc is stuck again.
func testStopDoesNotCancelConsumerTask() {
let controller = PreviewASRController()
let controller = LiveDictationController()
let consumerTask = Task<Void, Never> {}
controller.asrTask = consumerTask
@@ -58,7 +57,7 @@ final class PreviewASRControllerStateTests: XCTestCase {
/// misbehave no double-cancel, no extra state transitions.
/// This is the contract `.onDisappear` relies on.
func testStopIsIdempotent() {
let controller = PreviewASRController()
let controller = LiveDictationController()
let consumerTask = Task<Void, Never> {}
controller.asrTask = consumerTask