@@ -2,6 +2,8 @@ package com.osfans.trime.ime.enums
2
2
3
3
import android.text.TextUtils
4
4
import android.view.KeyEvent
5
+ import com.osfans.trime.ime.keyboard.Key
6
+ import timber.log.Timber
5
7
6
8
enum class Keycode {
7
9
// 与原trime.yaml主题android_key/name小节相比,差异如下:
@@ -144,6 +146,52 @@ enum class Keycode {
144
146
return keycode < A .ordinal && keycode > 0
145
147
}
146
148
149
+ fun toStdKeyEvent (keycode : Int , mask : Int = 0): IntArray {
150
+ var event = IntArray (2 )
151
+ if (keycode < 0 || keycode > values().size)
152
+ return event
153
+ if (keycode < A .ordinal) {
154
+ event[0 ] = keycode
155
+ event[1 ] = mask
156
+ } else {
157
+ if (keycode <= Z .ordinal)
158
+ event[0 ] = keycode - A .ordinal + a.ordinal
159
+ else if (keycode == exclam.ordinal)
160
+ event[0 ] = _1 .ordinal
161
+ else if (keycode == dollar.ordinal)
162
+ event[0 ] = _4 .ordinal
163
+ else if (keycode == percent.ordinal)
164
+ event[0 ] = _5 .ordinal
165
+ else if (keycode == asciicircum.ordinal)
166
+ event[0 ] = _6 .ordinal
167
+ else if (keycode == ampersand.ordinal)
168
+ event[0 ] = _7 .ordinal
169
+ else if (keycode == quotedbl.ordinal)
170
+ event[0 ] = apostrophe.ordinal
171
+ else if (keycode == colon.ordinal)
172
+ event[0 ] = semicolon.ordinal
173
+ else if (keycode == less.ordinal)
174
+ event[0 ] = comma.ordinal
175
+ else if (keycode == greater.ordinal)
176
+ event[0 ] = period.ordinal
177
+ else if (keycode == question.ordinal)
178
+ event[0 ] = slash.ordinal
179
+ else if (keycode == underscore.ordinal)
180
+ event[0 ] = minus.ordinal
181
+ else if (keycode == braceleft.ordinal)
182
+ event[0 ] = bracketleft.ordinal
183
+ else if (keycode == braceright.ordinal)
184
+ event[0 ] = bracketright.ordinal
185
+ else if (keycode == asciitilde.ordinal)
186
+ event[0 ] = grave.ordinal
187
+ else if (keycode == bar.ordinal)
188
+ event[0 ] = backslash.ordinal
189
+
190
+ event[1 ] = mask or KeyEvent .META_SHIFT_ON
191
+ }
192
+ return event
193
+ }
194
+
147
195
fun hasSymbolLabel (keycode : Int ): Boolean {
148
196
if (keycode < 0 || keycode > values().size)
149
197
return false
@@ -154,6 +202,30 @@ enum class Keycode {
154
202
return reverseMap[keycode] ? : " "
155
203
}
156
204
205
+ fun getDisplayLabel (keyCode : Int , mask : Int ): String? {
206
+ var s: String? = " "
207
+ if (isStdKey(keyCode)) {
208
+ // Android keycode区域
209
+ if (Key .getKcm().isPrintingKey(keyCode)) {
210
+ val event = KeyEvent (0 , 0 , KeyEvent .ACTION_DOWN , keyCode, 0 , mask)
211
+ val k = event.getUnicodeChar(mask)
212
+ Timber .d(" getDisplayLabel() keycode=$keyCode , mask=$mask , k=$k " )
213
+ if (k > 0 ) {
214
+ s + = k.toChar()
215
+ } else {
216
+ var c = Key .getKcm().getDisplayLabel(keyCode)
217
+ if (Character .isUpperCase(c)) c = c.lowercaseChar()
218
+ s = c.toString()
219
+ }
220
+ } else {
221
+ s = keyNameOf(keyCode)
222
+ }
223
+ } else if (hasSymbolLabel(keyCode)) { // 可見符號
224
+ s = getSymbolLabell(valueOf(keyCode))
225
+ }
226
+ return s
227
+ }
228
+
157
229
private val masks = hashMapOf(
158
230
" Shift" to KeyEvent .META_SHIFT_ON ,
159
231
" Control" to KeyEvent .META_CTRL_ON ,
0 commit comments