Revision | a7237ea297393ddb1fac6cca311e6417cc6febda (tree) |
---|---|
Time | 2017-06-30 12:04:46 |
Author | Ang Iongchun <ang@iong...> |
Commiter | Ang Iongchun |
flow: Merged <hotfix> 'fix-initial-keyboard' to <master> ('default').
@@ -421,11 +421,12 @@ | ||
421 | 421 | } |
422 | 422 | |
423 | 423 | protected void initViewState() { |
424 | - // default text mode and subtype is TL | |
425 | - viewState = new TKViewState().setString(InputTitle, getInputTitleDisplay(SUBTYPE_TL)) | |
426 | - .setInteger(MainKeyboard, KBD_TL) | |
427 | - .setInteger(TextKeyboard, KBD_TL) | |
428 | - .setInteger(CurrentKeyboard, KBD_TL); | |
424 | + viewState = new TKViewState().setInteger(MainKeyboard, KBD_NONE) | |
425 | + .setInteger(TextKeyboard, KBD_NONE) | |
426 | + .setInteger(CurrentKeyboard, KBD_NONE) | |
427 | + .setBoolean(MultiLine, false) | |
428 | + .setInteger(AsciiPeriodAlt, KEYCODE_COMMA) | |
429 | + .setBoolean(NumSym1Primes, false); | |
429 | 430 | } |
430 | 431 | |
431 | 432 | protected void fineViewState() { |
@@ -494,6 +495,7 @@ | ||
494 | 495 | // keyboards and keys |
495 | 496 | |
496 | 497 | // for TKViewState.MainKeyboard, TextKeyboard, CurrentKeyboard |
498 | + public static final int KBD_NONE = -1; | |
497 | 499 | public static final int KBD_TL = 0; |
498 | 500 | public static final int KBD_POJ = 1; |
499 | 501 | public static final int KBD_ASCII = 2; |
@@ -1616,7 +1618,13 @@ | ||
1616 | 1618 | |
1617 | 1619 | protected void switchInputType(InputConnection ic, EditorInfo info) { |
1618 | 1620 | if (info.inputType == InputType.TYPE_NULL) { |
1619 | - viewState = viewState.setString(InputTypeDisplay, "(null)"); | |
1621 | + // use ASCII keyboard without any text processing | |
1622 | + inputState = inputState.setBoolean(CapState, info.initialCapsMode != 0); | |
1623 | + viewState = viewState.setInteger(TextKeyboard, KBD_ASCII) | |
1624 | + .setInteger(CurrentKeyboard, KBD_ASCII) | |
1625 | + .setBoolean(ShiftState, inputState.getBoolean(CapState)) | |
1626 | + .setBoolean(NumSym1Primes, false) | |
1627 | + .setString(InputTypeDisplay, "(null)"); | |
1620 | 1628 | return; |
1621 | 1629 | } |
1622 | 1630 | boolean fullScreen = isFullscreenMode(); |
@@ -1669,9 +1677,11 @@ | ||
1669 | 1677 | } |
1670 | 1678 | } |
1671 | 1679 | |
1680 | + inputState = inputState.setBoolean(CapState, false); | |
1672 | 1681 | viewState = viewState.setInteger(CurrentKeyboard, KBD_NUMSYM1) |
1673 | 1682 | .setBoolean(ShiftState, false) |
1674 | - .setBoolean(NumSym1Primes, false); | |
1683 | + .setBoolean(NumSym1Primes, false) | |
1684 | + .setInteger(TextKeyboard, KBD_ASCII); | |
1675 | 1685 | break; |
1676 | 1686 | case InputType.TYPE_CLASS_DATETIME: |
1677 | 1687 | sb.append("dt"); |
@@ -1696,9 +1706,11 @@ | ||
1696 | 1706 | sb.append(')'); |
1697 | 1707 | } |
1698 | 1708 | |
1709 | + inputState = inputState.setBoolean(CapState, false); | |
1699 | 1710 | viewState = viewState.setInteger(CurrentKeyboard, KBD_NUMSYM1) |
1700 | 1711 | .setBoolean(ShiftState, false) |
1701 | - .setBoolean(NumSym1Primes, true); | |
1712 | + .setBoolean(NumSym1Primes, true) | |
1713 | + .setInteger(TextKeyboard, KBD_ASCII); | |
1702 | 1714 | break; |
1703 | 1715 | case InputType.TYPE_CLASS_NUMBER: |
1704 | 1716 | sb.append("number"); |
@@ -1739,9 +1751,11 @@ | ||
1739 | 1751 | sb.append(')'); |
1740 | 1752 | } |
1741 | 1753 | |
1754 | + inputState = inputState.setBoolean(CapState, false); | |
1742 | 1755 | viewState = viewState.setInteger(CurrentKeyboard, KBD_NUMSYM1) |
1743 | 1756 | .setBoolean(ShiftState, false) |
1744 | - .setBoolean(NumSym1Primes, true); | |
1757 | + .setBoolean(NumSym1Primes, true) | |
1758 | + .setInteger(TextKeyboard, KBD_ASCII); | |
1745 | 1759 | break; |
1746 | 1760 | case InputType.TYPE_CLASS_TEXT: |
1747 | 1761 | sb.append("text"); |
@@ -2196,6 +2210,11 @@ | ||
2196 | 2210 | viewState = viewState.setInteger(ExpSelectionEnd, expEnd); |
2197 | 2211 | } |
2198 | 2212 | |
2213 | + updateKeyboardView(); | |
2214 | + viewState = viewState.resetChanged(); | |
2215 | + } | |
2216 | + | |
2217 | + private void updateKeyboardView() { | |
2199 | 2218 | // keyboard |
2200 | 2219 | if (viewState.isChanged(InputTitle)) |
2201 | 2220 | inputTitle.setText(viewState.getString(InputTitle)); |
@@ -2269,35 +2288,36 @@ | ||
2269 | 2288 | } |
2270 | 2289 | |
2271 | 2290 | // action key |
2272 | - if (viewState.getInteger(ActionKeyType) == KEY_TYPE_LABEL) { | |
2273 | - if (currChanged || viewState.isAnyChanged(ActionKeyType, ActionKeyLabel)) { | |
2274 | - String label = viewState.getString(ActionKeyLabel); | |
2275 | - Keyboard.Key key = kbdKeys[KEY_ACTION][kbdIdx]; | |
2276 | - key.label = label; | |
2277 | - key.icon = null; | |
2278 | - if (!allKeysChanged) | |
2279 | - kbdView.invalidateKey(keyIdxActions[kbdIdx]); | |
2280 | - } | |
2281 | - } else { | |
2282 | - if (currChanged || viewState.isAnyChanged(ActionKeyType, ActionKeyIconID)) { | |
2283 | - int iconID = viewState.getInteger(ActionKeyIconID); | |
2284 | - Drawable icon = getResources().getDrawable(iconID); | |
2285 | - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |
2286 | - // TODO: theme | |
2287 | - icon.setTint(Color.WHITE); | |
2291 | + if (viewState.contains(ActionKeyType)) { | |
2292 | + if (viewState.getInteger(ActionKeyType) == KEY_TYPE_LABEL) { | |
2293 | + if (currChanged || viewState.isAnyChanged(ActionKeyType, ActionKeyLabel)) { | |
2294 | + String label = viewState.getString(ActionKeyLabel); | |
2295 | + Keyboard.Key key = kbdKeys[KEY_ACTION][kbdIdx]; | |
2296 | + key.label = label; | |
2297 | + key.icon = null; | |
2298 | + if (!allKeysChanged) | |
2299 | + kbdView.invalidateKey(keyIdxActions[kbdIdx]); | |
2288 | 2300 | } |
2289 | - log("key icon: ", icon); | |
2290 | - Keyboard.Key key = kbdKeys[KEY_ACTION][kbdIdx]; | |
2291 | - key.label = null; | |
2292 | - key.icon = icon; | |
2293 | - if (!allKeysChanged) | |
2294 | - kbdView.invalidateKey(keyIdxActions[kbdIdx]); | |
2301 | + } else { | |
2302 | + if (currChanged || viewState.isAnyChanged(ActionKeyType, ActionKeyIconID)) { | |
2303 | + int iconID = viewState.getInteger(ActionKeyIconID); | |
2304 | + Drawable icon = getResources().getDrawable(iconID); | |
2305 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |
2306 | + // TODO: theme | |
2307 | + icon.setTint(Color.WHITE); | |
2308 | + } | |
2309 | + log("key icon: ", icon); | |
2310 | + Keyboard.Key key = kbdKeys[KEY_ACTION][kbdIdx]; | |
2311 | + key.label = null; | |
2312 | + key.icon = icon; | |
2313 | + if (!allKeysChanged) | |
2314 | + kbdView.invalidateKey(keyIdxActions[kbdIdx]); | |
2315 | + } | |
2295 | 2316 | } |
2296 | 2317 | } |
2297 | 2318 | |
2298 | 2319 | if (allKeysChanged) |
2299 | 2320 | kbdView.invalidateAllKeys(); |
2300 | - viewState = viewState.resetChanged(); | |
2301 | 2321 | } |
2302 | 2322 | |
2303 | 2323 | @Override |
@@ -2321,6 +2341,7 @@ | ||
2321 | 2341 | if (ic == null) { // FIXME: why null? |
2322 | 2342 | log("InputConnection IS NULL!"); |
2323 | 2343 | switchInputType(null, info); |
2344 | + updateKeyboardView(); | |
2324 | 2345 | } else { |
2325 | 2346 | ic.beginBatchEdit(); |
2326 | 2347 | switchInputType(ic, info); |