// // KBKeyboardLegacyLayoutProvider.m // CustomKeyboard // #import "KBKeyboardLegacyLayoutProvider.h" #import "KBKeyboardKeyFactory.h" #import "KBKey.h" @implementation KBKeyboardLegacyLayoutProvider - (NSArray *> *)keysForLayoutStyleIsNumbers:(BOOL)isNumbersLayout shiftOn:(BOOL)shiftOn symbolsMoreOn:(BOOL)symbolsMoreOn keyFactory:(KBKeyboardKeyFactory *)keyFactory { if (isNumbersLayout) { return [self buildKeysForNumbersLayoutWithSymbolsMoreOn:symbolsMoreOn]; } return [self buildKeysForLettersLayoutWithShiftOn:shiftOn keyFactory:keyFactory]; } #pragma mark - Letters Layout - (NSArray *> *)buildKeysForLettersLayoutWithShiftOn:(BOOL)shiftOn keyFactory:(KBKeyboardKeyFactory *)keyFactory { // 字母布局(QWERTY) NSArray *r1Letters = @[ @"q", @"w", @"e", @"r", @"t", @"y", @"u", @"i", @"o", @"p" ]; NSArray *r2Letters = @[ @"a", @"s", @"d", @"f", @"g", @"h", @"j", @"k", @"l" ]; NSArray *r3Letters = @[ @"z", @"x", @"c", @"v", @"b", @"n", @"m" ]; NSMutableArray *row1 = [NSMutableArray arrayWithCapacity:r1Letters.count]; for (NSString *s in r1Letters) { KBKey *key = [keyFactory letterKeyWithChar:s shiftOn:shiftOn]; if (key) { [row1 addObject:key]; } } NSMutableArray *row2 = [NSMutableArray arrayWithCapacity:r2Letters.count]; for (NSString *s in r2Letters) { KBKey *key = [keyFactory letterKeyWithChar:s shiftOn:shiftOn]; if (key) { [row2 addObject:key]; } } // 第三行:Shift + Z...M + Backspace NSMutableArray *row3 = [NSMutableArray array]; KBKey *shift = [KBKey keyWithIdentifier:@"shift" title:@"⇧" output:@"" type:KBKeyTypeShift]; // Shift 键也支持大小写两套皮肤图 shift.caseVariant = shiftOn ? KBKeyCaseVariantUpper : KBKeyCaseVariantLower; [row3 addObject:shift]; for (NSString *s in r3Letters) { KBKey *key = [keyFactory letterKeyWithChar:s shiftOn:shiftOn]; if (key) { [row3 addObject:key]; } } KBKey *backspace = [KBKey keyWithIdentifier:@"backspace" title:@"⌫" output:@"" type:KBKeyTypeBackspace]; [row3 addObject:backspace]; NSArray *row4 = [self bottomControlRowKeysForLettersLayout]; return @[row1.copy, row2.copy, row3.copy, row4]; } #pragma mark - Numbers / Symbols Layout - (NSArray *> *)buildKeysForNumbersLayoutWithSymbolsMoreOn:(BOOL)symbolsMoreOn { // 数字/符号布局:3 行主键 + 底部控制行 NSArray *r1 = nil; NSArray *r2 = nil; NSArray *r3 = nil; if (!symbolsMoreOn) { // 数字第一页(123) r1 = @[ [KBKey keyWithIdentifier:@"digit_1" title:@"1" output:@"1" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_2" title:@"2" output:@"2" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_3" title:@"3" output:@"3" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_4" title:@"4" output:@"4" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_5" title:@"5" output:@"5" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_6" title:@"6" output:@"6" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_7" title:@"7" output:@"7" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_8" title:@"8" output:@"8" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_9" title:@"9" output:@"9" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"digit_0" title:@"0" output:@"0" type:KBKeyTypeCharacter] ]; r2 = @[ [KBKey keyWithIdentifier:@"sym_minus" title:@"-" output:@"-" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_slash" title:@"/" output:@"/" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_colon" title:@":" output:@":" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_semicolon" title:@";" output:@";" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_paren_l" title:@"(" output:@"(" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_paren_r" title:@")" output:@")" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_money" title:@"¥" output:@"¥" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_amp" title:@"&" output:@"&" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_at" title:@"@" output:@"@" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_quote_double" title:@"\"" output:@"\"" type:KBKeyTypeCharacter] ]; r3 = [self symbolsCommonThirdRowWithToggleIsMore:NO]; } else { // 数字第二页(#+=):前两行替换为更多符号,左下角按钮文案改为“123” r1 = @[ [KBKey keyWithIdentifier:@"sym_bracket_l" title:@"[" output:@"[" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_bracket_r" title:@"]" output:@"]" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_brace_l" title:@"{" output:@"{" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_brace_r" title:@"}" output:@"}" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_hash" title:@"#" output:@"#" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_percent" title:@"%" output:@"%" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_caret" title:@"^" output:@"^" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_asterisk" title:@"*" output:@"*" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_plus" title:@"+" output:@"+" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_equal" title:@"=" output:@"=" type:KBKeyTypeCharacter] ]; r2 = @[ [KBKey keyWithIdentifier:@"sym_underscore" title:@"_" output:@"_" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_backslash" title:@"\\" output:@"\\" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_pipe" title:@"|" output:@"|" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_tilde" title:@"~" output:@"~" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_lt" title:@"<" output:@"<" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_gt" title:@">" output:@">" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_dollar" title:@"$" output:@"$" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_euro" title:@"€" output:@"€" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_pound" title:@"£" output:@"£" type:KBKeyTypeCharacter], [KBKey keyWithIdentifier:@"sym_bullet" title:@"•" output:@"•" type:KBKeyTypeCharacter] ]; r3 = [self symbolsCommonThirdRowWithToggleIsMore:YES]; } NSArray *r4 = [self bottomControlRowKeysForNumbersLayout]; return @[r1, r2, r3, r4]; } #pragma mark - Key Factories - (NSArray *)symbolsCommonThirdRowWithToggleIsMore:(BOOL)isMorePage { NSString *identifier = isMorePage ? @"symbols_toggle_123" : @"symbols_toggle_more"; NSString *title = isMorePage ? @"123" : @"#+="; KBKey *toggle = [KBKey keyWithIdentifier:identifier title:title output:@"" type:KBKeyTypeSymbolsToggle]; KBKey *comma = [KBKey keyWithIdentifier:@"sym_comma" title:@"," output:@"," type:KBKeyTypeCharacter]; KBKey *dot = [KBKey keyWithIdentifier:@"sym_dot" title:@"." output:@"." type:KBKeyTypeCharacter]; KBKey *q = [KBKey keyWithIdentifier:@"sym_question" title:@"?" output:@"?" type:KBKeyTypeCharacter]; KBKey *ex = [KBKey keyWithIdentifier:@"sym_exclam" title:@"!" output:@"!" type:KBKeyTypeCharacter]; KBKey *quote = [KBKey keyWithIdentifier:@"sym_quote_single" title:@"'" output:@"'" type:KBKeyTypeCharacter]; KBKey *back = [KBKey keyWithIdentifier:@"backspace" title:@"⌫" output:@"" type:KBKeyTypeBackspace]; return @[ toggle, comma, dot, q, ex, quote, back ]; } - (NSArray *)bottomControlRowKeysForLettersLayout { KBKey *mode123 = [KBKey keyWithIdentifier:@"mode_123" title:@"123" output:@"" type:KBKeyTypeModeChange]; KBKey *emoji = [KBKey keyWithIdentifier:KBKeyIdentifierEmojiPanel title:@"😊" output:@"" type:KBKeyTypeCustom]; KBKey *space = [KBKey keyWithIdentifier:@"space" title:@"space" output:@" " type:KBKeyTypeSpace]; KBKey *ret = [KBKey keyWithIdentifier:@"return" title:KBLocalized(@"Send") output:@"\n" type:KBKeyTypeReturn]; return @[ mode123, emoji, space, ret ]; } - (NSArray *)bottomControlRowKeysForNumbersLayout { KBKey *modeABC = [KBKey keyWithIdentifier:@"mode_abc" title:@"abc" output:@"" type:KBKeyTypeModeChange]; KBKey *emoji = [KBKey keyWithIdentifier:KBKeyIdentifierEmojiPanel title:@"😊" output:@"" type:KBKeyTypeCustom]; KBKey *space = [KBKey keyWithIdentifier:@"space" title:@"space" output:@" " type:KBKeyTypeSpace]; KBKey *ret = [KBKey keyWithIdentifier:@"return" title:KBLocalized(@"Send") output:@"\n" type:KBKeyTypeReturn]; return @[ modeABC, emoji, space, ret ]; } @end