Files
keyboard/CustomKeyboard/Manager/KBKeyboardLayoutResolver.m

107 lines
4.0 KiB
Mathematica
Raw Normal View History

2026-03-02 09:19:06 +08:00
//
// KBKeyboardLayoutResolver.m
// CustomKeyboard
//
#import "KBKeyboardLayoutResolver.h"
#import "KBInputProfileManager.h"
#import "KBConfig.h"
#import "KBLocalizationManager.h"
2026-03-02 09:19:06 +08:00
@implementation KBKeyboardLayoutResolver
+ (instancetype)sharedResolver {
static KBKeyboardLayoutResolver *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
/// App kb_input_profiles.json code
- (NSString *)kb_defaultKeyboardLanguageCodeForAppLanguageCode:(NSString *)appLanguageCode {
NSString *lc = (appLanguageCode ?: @"").lowercaseString;
if ([lc hasPrefix:@"es"]) { return @"es"; }
if ([lc hasPrefix:@"pt"]) { return @"pt"; }
if ([lc hasPrefix:@"id"]) { return @"id"; }
if ([lc hasPrefix:@"zh-hant"]) { return @"zh-Hant-Pinyin"; }
return @"en";
}
- (BOOL)kb_didUserSelectKeyboardProfileInAppGroup:(NSUserDefaults *)appGroup {
return [appGroup boolForKey:AppGroup_DidUserSelectKeyboardProfile];
}
- (nullable KBInputProfileLayout *)kb_defaultLayoutForCurrentAppLanguage {
NSString *appLang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish;
NSString *kbLang = [self kb_defaultKeyboardLanguageCodeForAppLanguageCode:appLang];
KBInputProfile *profile = [[KBInputProfileManager sharedManager] profileForLanguageCode:kbLang];
if (!profile) {
profile = [[KBInputProfileManager sharedManager] profileForLanguageCode:@"en"];
}
return profile.layouts.firstObject;
}
2026-03-02 09:19:06 +08:00
- (NSString *)layoutJsonIdForProfileId:(NSString *)profileId {
if (profileId.length == 0) {
return @"letters";
}
NSString *layoutJsonId = [[KBInputProfileManager sharedManager] layoutJsonIdForProfileId:profileId];
if (layoutJsonId.length > 0) {
return layoutJsonId;
}
// 退
NSLog(@"[KBKeyboardLayoutResolver] No layoutJsonId found for profileId: %@, using default 'letters'", profileId);
return @"letters";
}
- (NSString *)suggestionEngineForProfileId:(NSString *)profileId {
if (profileId.length == 0) {
return @"latin";
}
NSString *engine = [[KBInputProfileManager sharedManager] suggestionEngineForProfileId:profileId];
if (engine.length > 0) {
return engine;
}
// 退
NSLog(@"[KBKeyboardLayoutResolver] No suggestionEngine found for profileId: %@, using default 'latin'", profileId);
return @"latin";
}
- (nullable NSString *)currentProfileId {
NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
NSString *profileId = [appGroup stringForKey:AppGroup_SelectedKeyboardProfileId];
if ([self kb_didUserSelectKeyboardProfileInAppGroup:appGroup]) {
return profileId;
}
KBInputProfileLayout *layout = [self kb_defaultLayoutForCurrentAppLanguage];
return layout.profileId.length > 0 ? layout.profileId : profileId;
2026-03-02 09:19:06 +08:00
}
- (nullable NSString *)currentLanguageCode {
NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
NSString *languageCode = [appGroup stringForKey:AppGroup_SelectedKeyboardLanguageCode];
if ([self kb_didUserSelectKeyboardProfileInAppGroup:appGroup]) {
return languageCode;
}
NSString *appLang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish;
return [self kb_defaultKeyboardLanguageCodeForAppLanguageCode:appLang];
2026-03-02 09:19:06 +08:00
}
- (nullable NSString *)currentLayoutVariant {
NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
NSString *layoutVariant = [appGroup stringForKey:AppGroup_SelectedKeyboardLayoutVariant];
if ([self kb_didUserSelectKeyboardProfileInAppGroup:appGroup]) {
return layoutVariant;
}
KBInputProfileLayout *layout = [self kb_defaultLayoutForCurrentAppLanguage];
return layout.variant.length > 0 ? layout.variant : layoutVariant;
2026-03-02 09:19:06 +08:00
}
@end