// // KBSkinManager.h // App & Keyboard Extension shared skin/theme manager. // // Stores a lightweight theme (colors, identifiers) to shared keychain so // both targets see the same current skin. Cross-process updates are delivered // via Darwin notification. Intended for immediate reflection in extension. // #import #import NS_ASSUME_NONNULL_BEGIN extern NSString * const KBSkinDidChangeNotification; // in-process extern NSString * const KBDarwinSkinChanged; // cross-process /// Simple theme model (colors only; assets can be added later via App Group) @interface KBSkinTheme : NSObject @property (nonatomic, copy) NSString *skinId; // e.g. "mint" @property (nonatomic, copy) NSString *name; // display name @property (nonatomic, strong) UIColor *keyboardBackground; @property (nonatomic, strong) UIColor *keyBackground; @property (nonatomic, strong) UIColor *keyTextColor; @property (nonatomic, strong) UIColor *keyHighlightBackground; // selected/highlighted @property (nonatomic, strong) UIColor *accentColor; // function view accents /// 可选:键盘背景图片的 PNG/JPEG 数据(若存在,优先显示图片) @property (nonatomic, strong, nullable) NSData *backgroundImageData; @end /// Shared skin manager (Keychain Sharing based) @interface KBSkinManager : NSObject + (instancetype)shared; @property (atomic, strong, readonly) KBSkinTheme *current; // never nil (fallback to default) /// Save theme from JSON dictionary (keys: id, name, background, key_bg, key_text, key_highlight, accent) - (BOOL)applyThemeFromJSON:(NSDictionary *)json; /// Save explicit theme - (BOOL)applyTheme:(KBSkinTheme *)theme; /// Reset to default theme - (void)resetToDefault; /// 直接应用图片皮肤(使用 JPEG/PNG 数据)。建议大小 < 512KB。 - (BOOL)applyImageSkinWithData:(NSData *)imageData skinId:(NSString *)skinId name:(NSString *)name; /// 当前背景图片(若存在) - (nullable UIImage *)currentBackgroundImage; /// Parse a hex color string like "#RRGGBB"/"#RRGGBBAA" + (UIColor *)colorFromHexString:(NSString *)hex defaultColor:(UIColor *)fallback; @end NS_ASSUME_NONNULL_END