Improve the auto capitalisation

- Detect when the input box is cleared
- Avoid looking up keys on the keyboard every time the shift state needs
  to change.
This commit is contained in:
Jules Aguillon 2022-09-24 22:36:06 +02:00
parent c778b4e8a2
commit 3081af5190
2 changed files with 22 additions and 17 deletions

View File

@ -108,6 +108,13 @@ final class Autocapitalisation
{ {
if (new_cursor == _cursor) // Just typing if (new_cursor == _cursor) // Just typing
return; return;
if (new_cursor == 0)
{
// Detect whether the input box has been cleared
CharSequence t = _ic.getTextAfterCursor(1, 0);
if (t != null && t.equals(""))
_should_update_caps_mode = true;
}
_cursor = new_cursor; _cursor = new_cursor;
_should_enable_shift = false; _should_enable_shift = false;
callback(true); callback(true);

View File

@ -19,6 +19,8 @@ public class Keyboard2View extends View
implements View.OnTouchListener, Pointers.IPointerEventHandler implements View.OnTouchListener, Pointers.IPointerEventHandler
{ {
private KeyboardData _keyboard; private KeyboardData _keyboard;
private KeyValue _shift_kv;
private KeyboardData.Key _shift_key;
private Pointers _pointers; private Pointers _pointers;
@ -79,6 +81,13 @@ public class Keyboard2View extends View
public void setKeyboard(KeyboardData kw) public void setKeyboard(KeyboardData kw)
{ {
_keyboard = _config.modify_layout(kw); _keyboard = _config.modify_layout(kw);
_shift_kv = KeyValue.getKeyByName("shift");
_shift_key = _keyboard.findKeyWithValue(_shift_kv);
if (_shift_key == null)
{
_shift_kv = _shift_kv.withFlags(_shift_kv.getFlags() | KeyValue.FLAG_LOCK);
_shift_key = _keyboard.findKeyWithValue(_shift_kv);
}
reset(); reset();
} }
@ -93,24 +102,13 @@ public class Keyboard2View extends View
/** Called by auto-capitalisation. */ /** Called by auto-capitalisation. */
public void set_shift_state(boolean state) public void set_shift_state(boolean state)
{ {
if (_keyboard == null) if (_keyboard == null || _shift_key == null)
return; return;
KeyValue shift = KeyValue.getKeyByName("shift"); if (state)
KeyboardData.Key key = _keyboard.findKeyWithValue(shift); _pointers.add_fake_pointer(_shift_kv, _shift_key);
if (key == null) else
{ _pointers.remove_fake_pointer(_shift_kv, _shift_key);
// Lookup again for the lockable shift key, which is a different value. invalidate();
shift = shift.withFlags(shift.getFlags() | KeyValue.FLAG_LOCK);
key = _keyboard.findKeyWithValue(shift);
}
if (key != null)
{
if (state)
_pointers.add_fake_pointer(shift, key);
else
_pointers.remove_fake_pointer(shift, key);
invalidate();
}
} }
public KeyValue modifyKey(KeyValue k, Pointers.Modifiers mods) public KeyValue modifyKey(KeyValue k, Pointers.Modifiers mods)