9da32b81e9
Stabilize clipboard long-press prepare/resume across paste alerts and cold start, add an in-app release-notes sheet with remote bilingual HTML, localize typing input settings, and bump build to 55.
47 lines
1.7 KiB
Swift
47 lines
1.7 KiB
Swift
// ClipboardCommandEligibility.swift
|
|
// OSGKeyboard · Shared
|
|
//
|
|
// User-visible failure reasons when long-press clipboard command cannot start.
|
|
// (30s eligibility window and continuous-rewrite sessions were removed.)
|
|
|
|
import Foundation
|
|
|
|
/// Why a clipboard-command long-press did not start recording.
|
|
public enum ClipboardCommandFailure: Equatable, Sendable {
|
|
case pasteDenied
|
|
case secureField
|
|
case noFullAccess
|
|
/// Host never confirmed capture (double-start / mic not ready / timeout).
|
|
case prepareFailed
|
|
case material(ClipboardMaterialFilter.Rejection)
|
|
|
|
/// Localization key under the keyboard extension `Keyboard.strings` table.
|
|
public var localizationKey: String {
|
|
switch self {
|
|
case .pasteDenied:
|
|
return "keyboard.clipboard.reject.pasteDenied"
|
|
case .secureField:
|
|
return "keyboard.clipboard.reject.secureField"
|
|
case .noFullAccess:
|
|
return "keyboard.clipboard.reject.noFullAccess"
|
|
case .prepareFailed:
|
|
return "keyboard.clipboard.reject.prepareFailed"
|
|
case .material(let rejection):
|
|
switch rejection {
|
|
case .empty:
|
|
return "keyboard.clipboard.reject.empty"
|
|
case .phoneOrNumeric:
|
|
return "keyboard.clipboard.reject.phoneOrNumeric"
|
|
case .emojiOrSymbolOnly:
|
|
return "keyboard.clipboard.reject.emojiOrSymbolOnly"
|
|
case .verificationCode:
|
|
return "keyboard.clipboard.reject.verificationCode"
|
|
case .tooShort:
|
|
return "keyboard.clipboard.reject.tooShort"
|
|
case .repetitiveSpam:
|
|
return "keyboard.clipboard.reject.repetitiveSpam"
|
|
}
|
|
}
|
|
}
|
|
}
|