重构
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
//
|
||||
// KBKeyboardLegacyLayoutProvider.m
|
||||
// CustomKeyboard
|
||||
//
|
||||
|
||||
#import "KBKeyboardLegacyLayoutProvider.h"
|
||||
#import "KBKeyboardKeyFactory.h"
|
||||
#import "KBKey.h"
|
||||
|
||||
@implementation KBKeyboardLegacyLayoutProvider
|
||||
|
||||
- (NSArray<NSArray<KBKey *> *> *)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<NSArray<KBKey *> *> *)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<NSArray<KBKey *> *> *)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<KBKey *> *)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<KBKey *> *)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<KBKey *> *)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
|
||||
Reference in New Issue
Block a user