源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import Foundation
|
||||
import React
|
||||
|
||||
@objc(TuttiMobilePreferences)
|
||||
final class MobilePreferencesModule: NSObject {
|
||||
private let defaults = UserDefaults.standard
|
||||
|
||||
@objc
|
||||
static func requiresMainQueueSetup() -> Bool {
|
||||
false
|
||||
}
|
||||
|
||||
@objc
|
||||
func loadThemePreference() -> String {
|
||||
Self.normalizeThemePreference(
|
||||
defaults.string(forKey: Self.themePreferenceKey)
|
||||
)
|
||||
}
|
||||
|
||||
@objc(saveThemePreference:resolver:rejecter:)
|
||||
func saveThemePreference(
|
||||
_ preference: String,
|
||||
resolver resolve: RCTPromiseResolveBlock,
|
||||
rejecter reject: RCTPromiseRejectBlock
|
||||
) {
|
||||
guard Self.supportedThemePreferences.contains(preference) else {
|
||||
reject(
|
||||
"INVALID_THEME_PREFERENCE",
|
||||
"Unsupported Mobile theme preference",
|
||||
nil
|
||||
)
|
||||
return
|
||||
}
|
||||
defaults.set(preference, forKey: Self.themePreferenceKey)
|
||||
guard defaults.string(forKey: Self.themePreferenceKey) == preference else {
|
||||
reject(
|
||||
"THEME_PREFERENCE_WRITE_FAILED",
|
||||
"Unable to save Mobile theme preference",
|
||||
nil
|
||||
)
|
||||
return
|
||||
}
|
||||
resolve(nil)
|
||||
}
|
||||
|
||||
private static let supportedThemePreferences: Set<String> = [
|
||||
"system", "light", "dark",
|
||||
]
|
||||
private static let themePreferenceKey = "themePreference"
|
||||
|
||||
private static func normalizeThemePreference(_ value: String?) -> String {
|
||||
guard let value, supportedThemePreferences.contains(value) else {
|
||||
return "system"
|
||||
}
|
||||
return value
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user