@@ -39,7 +39,7 @@ public class Event {
39
39
private int code ;
40
40
private int mask = 0 ;
41
41
private String text ;
42
- private String label ;
42
+ private String label , shiftLabel ;
43
43
private String preview ;
44
44
private List <?> states ;
45
45
private String command ;
@@ -100,6 +100,20 @@ public Event(Keyboard keyboard, @NonNull String s) {
100
100
text = s ;
101
101
label = labelPattern .matcher (s ).replaceAll ("" );
102
102
}
103
+
104
+ shiftLabel = label ;
105
+ if (Keycode .Companion .isStdKey (code )) { // Android keycode区域
106
+ if (Key .getKcm ().isPrintingKey (code )) {
107
+ int mMask = KeyEvent .META_SHIFT_ON | mask ;
108
+ KeyEvent event = new KeyEvent (0 , 0 , KeyEvent .ACTION_DOWN , code , 0 , mMask );
109
+ int k = event .getUnicodeChar (mMask );
110
+ Timber .d (
111
+ "shiftLabel = " + shiftLabel + " keycode=" + code + ", mask=" + mMask + ", k=" + k );
112
+ if (k > 0 ) {
113
+ shiftLabel = "" + ((char ) (k ));
114
+ }
115
+ }
116
+ }
103
117
}
104
118
105
119
public Event (String s ) {
@@ -179,6 +193,8 @@ else if (s.length() == 1
179
193
180
194
public String getLabel () {
181
195
if (!TextUtils .isEmpty (toggle )) return (String ) states .get (Rime .getOption (toggle ) ? 1 : 0 );
196
+ if ((mKeyboard .getModifer () | mask & KeyEvent .META_SHIFT_ON ) != 0 )
197
+ return adjustCase (shiftLabel );
182
198
return adjustCase (label );
183
199
}
184
200
@@ -217,13 +233,22 @@ private void parseLabel() {
217
233
}
218
234
}
219
235
220
- public static String getDisplayLabel (int keyCode ) {
236
+ public String getDisplayLabel (int keyCode ) {
221
237
String s = "" ;
222
- if (Keycode .Companion .isStdKey (keyCode )) { // 字母數字
238
+ if (Keycode .Companion .isStdKey (keyCode )) {
239
+ // Android keycode区域
223
240
if (Key .getKcm ().isPrintingKey (keyCode )) {
224
- char c = Key .getKcm ().getDisplayLabel (keyCode );
225
- if (Character .isUpperCase (c )) c = Character .toLowerCase (c );
226
- s = String .valueOf (c );
241
+ KeyEvent event = new KeyEvent (0 , 0 , KeyEvent .ACTION_DOWN , keyCode , 0 , mask );
242
+ int k = event .getUnicodeChar (mask );
243
+
244
+ Timber .d ("getDisplayLabel() keycode=" + keyCode + ", mask=" + mask + ", k=" + k );
245
+ if (k > 0 ) {
246
+ s += ((char ) (k ));
247
+ } else {
248
+ char c = Key .getKcm ().getDisplayLabel (keyCode );
249
+ if (Character .isUpperCase (c )) c = Character .toLowerCase (c );
250
+ s = String .valueOf (c );
251
+ }
227
252
} else {
228
253
s = Keycode .keyNameOf (keyCode );
229
254
}
@@ -237,10 +262,8 @@ public static int getClickCode(String s) {
237
262
int keyCode = -1 ;
238
263
if (TextUtils .isEmpty (s )) { // 空鍵
239
264
keyCode = 0 ;
240
- } else if (Keycode .fromString (s ) != Keycode .VoidSymbol ) { // 字母數字
265
+ } else if (Keycode .fromString (s ) != Keycode .VoidSymbol ) {
241
266
keyCode = Keycode .keyCodeOf (s );
242
- } else if (symbolAliases .containsKey (s )) {
243
- keyCode = symbolAliases .get (s );
244
267
}
245
268
return keyCode ;
246
269
}
@@ -285,27 +308,4 @@ public boolean isAlt() {
285
308
put ("SYM" , KeyEvent .META_SYM_ON );
286
309
}
287
310
};
288
-
289
- private static final Map <String , Integer > symbolAliases =
290
- new HashMap <String , Integer >() {
291
- {
292
- put ("#" , KeyEvent .KEYCODE_POUND );
293
- put ("'" , KeyEvent .KEYCODE_APOSTROPHE );
294
- put ("(" , KeyEvent .KEYCODE_NUMPAD_LEFT_PAREN );
295
- put (")" , KeyEvent .KEYCODE_NUMPAD_RIGHT_PAREN );
296
- put ("*" , KeyEvent .KEYCODE_STAR );
297
- put ("+" , KeyEvent .KEYCODE_PLUS );
298
- put ("," , KeyEvent .KEYCODE_COMMA );
299
- put ("-" , KeyEvent .KEYCODE_MINUS );
300
- put ("." , KeyEvent .KEYCODE_PERIOD );
301
- put ("/" , KeyEvent .KEYCODE_SLASH );
302
- put (";" , KeyEvent .KEYCODE_SEMICOLON );
303
- put ("=" , KeyEvent .KEYCODE_EQUALS );
304
- put ("@" , KeyEvent .KEYCODE_AT );
305
- put ("\\ " , KeyEvent .KEYCODE_BACKSLASH );
306
- put ("[" , KeyEvent .KEYCODE_LEFT_BRACKET );
307
- put ("`" , KeyEvent .KEYCODE_GRAVE );
308
- put ("]" , KeyEvent .KEYCODE_RIGHT_BRACKET );
309
- }
310
- };
311
311
}
0 commit comments