mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-14 05:52:47 +00:00
More cursor keys (#933)
This commit is contained in:
parent
e57e2e8de5
commit
bcf2a52d6a
23 changed files with 164 additions and 19 deletions
|
@ -1171,13 +1171,15 @@ public class Key implements Comparable<Key> {
|
|||
if (mCode <= Constants.CODE_SPACE && mCode != KeyCode.MULTIPLE_CODE_POINTS && mIconName == null)
|
||||
actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW;
|
||||
switch (mCode) {
|
||||
case KeyCode.DELETE, KeyCode.ARROW_LEFT, KeyCode.ARROW_RIGHT, KeyCode.ARROW_UP, KeyCode.ARROW_DOWN:
|
||||
case KeyCode.DELETE, KeyCode.ARROW_LEFT, KeyCode.ARROW_RIGHT, KeyCode.ARROW_UP, KeyCode.ARROW_DOWN,
|
||||
KeyCode.WORD_LEFT, KeyCode.WORD_RIGHT, KeyCode.PAGE_UP, KeyCode.PAGE_DOWN:
|
||||
// repeating is disabled if a key is configured with pop-ups
|
||||
if (mPopupKeys == null)
|
||||
actionFlags |= ACTION_FLAGS_IS_REPEATABLE;
|
||||
// fallthrough
|
||||
case KeyCode.SHIFT, Constants.CODE_ENTER, KeyCode.SHIFT_ENTER, KeyCode.ALPHA, Constants.CODE_SPACE, KeyCode.NUMPAD,
|
||||
KeyCode.SYMBOL, KeyCode.SYMBOL_ALPHA, KeyCode.LANGUAGE_SWITCH, KeyCode.EMOJI, KeyCode.CLIPBOARD:
|
||||
KeyCode.SYMBOL, KeyCode.SYMBOL_ALPHA, KeyCode.LANGUAGE_SWITCH, KeyCode.EMOJI, KeyCode.CLIPBOARD,
|
||||
KeyCode.MOVE_START_OF_LINE, KeyCode.MOVE_END_OF_LINE, KeyCode.MOVE_START_OF_PAGE, KeyCode.MOVE_END_OF_PAGE:
|
||||
actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW; // no preview even if icon!
|
||||
}
|
||||
if (mCode == KeyCode.SETTINGS || mCode == KeyCode.LANGUAGE_SWITCH)
|
||||
|
|
|
@ -139,6 +139,8 @@ object KeyCode {
|
|||
const val META = -10012
|
||||
const val META_LOCK = -10013 // to be consistent with the CTRL/ALT/FN LOCK codes, not sure whether this will be used
|
||||
const val TAB = -10014
|
||||
const val WORD_LEFT = -10015
|
||||
const val WORD_RIGHT = -10016
|
||||
const val ESCAPE = -10017
|
||||
const val INSERT = -10018
|
||||
const val SLEEP = -10019
|
||||
|
@ -163,6 +165,8 @@ object KeyCode {
|
|||
const val F11 = -10038
|
||||
const val F12 = -10039
|
||||
const val BACK = -10040
|
||||
const val SELECT_LEFT = -10041
|
||||
const val SELECT_RIGHT = -10042
|
||||
|
||||
/** to make sure a FlorisBoard code works when reading a JSON layout */
|
||||
fun Int.checkAndConvertCode(): Int = if (this > 0) this else when (this) {
|
||||
|
@ -171,13 +175,14 @@ object KeyCode {
|
|||
VOICE_INPUT, LANGUAGE_SWITCH, SETTINGS, DELETE, ALPHA, SYMBOL, EMOJI, CLIPBOARD, CLIPBOARD_CUT,
|
||||
UNDO, REDO, ARROW_DOWN, ARROW_UP, ARROW_RIGHT, ARROW_LEFT, CLIPBOARD_COPY, CLIPBOARD_SELECT_ALL,
|
||||
CLIPBOARD_SELECT_WORD, TOGGLE_INCOGNITO_MODE, TOGGLE_AUTOCORRECT, MOVE_START_OF_LINE, MOVE_END_OF_LINE,
|
||||
SHIFT, CAPS_LOCK, MULTIPLE_CODE_POINTS, UNSPECIFIED, CTRL, ALT, FN, CLIPBOARD_CLEAR_HISTORY,
|
||||
MOVE_START_OF_PAGE, MOVE_END_OF_PAGE, SHIFT, CAPS_LOCK, MULTIPLE_CODE_POINTS, UNSPECIFIED, CTRL, ALT,
|
||||
FN, CLIPBOARD_CLEAR_HISTORY,
|
||||
|
||||
// heliboard only
|
||||
SYMBOL_ALPHA, START_ONE_HANDED_MODE, STOP_ONE_HANDED_MODE, SWITCH_ONE_HANDED_MODE, SHIFT_ENTER,
|
||||
ACTION_NEXT, ACTION_PREVIOUS, NOT_SPECIFIED, CLIPBOARD_COPY_ALL, PAGE_UP, PAGE_DOWN, META, TAB,
|
||||
ESCAPE, INSERT, SLEEP, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_PLAY_PAUSE, MEDIA_NEXT, MEDIA_PREVIOUS,
|
||||
VOL_UP, VOL_DOWN, MUTE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BACK
|
||||
ACTION_NEXT, ACTION_PREVIOUS, NOT_SPECIFIED, CLIPBOARD_COPY_ALL, WORD_LEFT, WORD_RIGHT, PAGE_UP,
|
||||
PAGE_DOWN, META, TAB, ESCAPE, INSERT, SLEEP, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_PLAY_PAUSE, MEDIA_NEXT,
|
||||
MEDIA_PREVIOUS, VOL_UP, VOL_DOWN, MUTE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BACK
|
||||
-> this
|
||||
|
||||
// conversion
|
||||
|
|
|
@ -1733,11 +1733,11 @@ public class LatinIME extends InputMethodService implements
|
|||
if (repeatCount > 0) {
|
||||
// No need to feedback when repeat delete/cursor keys will have no effect.
|
||||
switch (code) {
|
||||
case KeyCode.DELETE, KeyCode.ARROW_LEFT, KeyCode.ARROW_UP:
|
||||
case KeyCode.DELETE, KeyCode.ARROW_LEFT, KeyCode.ARROW_UP, KeyCode.WORD_LEFT, KeyCode.PAGE_UP:
|
||||
if (!mInputLogic.mConnection.canDeleteCharacters())
|
||||
return;
|
||||
break;
|
||||
case KeyCode.ARROW_RIGHT, KeyCode.ARROW_DOWN:
|
||||
case KeyCode.ARROW_RIGHT, KeyCode.ARROW_DOWN, KeyCode.WORD_RIGHT, KeyCode.PAGE_DOWN:
|
||||
if (!mInputLogic.mConnection.canForwardDeleteCharacters())
|
||||
return;
|
||||
break;
|
||||
|
|
|
@ -749,6 +749,18 @@ public final class InputLogic {
|
|||
inputTransaction.setDidAffectContents();
|
||||
}
|
||||
break;
|
||||
case KeyCode.WORD_LEFT:
|
||||
sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.META_CTRL_ON);
|
||||
break;
|
||||
case KeyCode.WORD_RIGHT:
|
||||
sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.META_CTRL_ON);
|
||||
break;
|
||||
case KeyCode.MOVE_START_OF_PAGE:
|
||||
sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_MOVE_HOME, KeyEvent.META_CTRL_ON);
|
||||
break;
|
||||
case KeyCode.MOVE_END_OF_PAGE:
|
||||
sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_MOVE_END, KeyEvent.META_CTRL_ON);
|
||||
break;
|
||||
case KeyCode.UNDO:
|
||||
sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_Z, KeyEvent.META_CTRL_ON);
|
||||
break;
|
||||
|
|
|
@ -46,12 +46,18 @@ fun getCodeForToolbarKey(key: ToolbarKey) = when (key) {
|
|||
RIGHT -> KeyCode.ARROW_RIGHT
|
||||
UP -> KeyCode.ARROW_UP
|
||||
DOWN -> KeyCode.ARROW_DOWN
|
||||
WORD_LEFT -> KeyCode.WORD_LEFT
|
||||
WORD_RIGHT -> KeyCode.WORD_RIGHT
|
||||
PAGE_UP -> KeyCode.PAGE_UP
|
||||
PAGE_DOWN -> KeyCode.PAGE_DOWN
|
||||
UNDO -> KeyCode.UNDO
|
||||
REDO -> KeyCode.REDO
|
||||
INCOGNITO -> KeyCode.TOGGLE_INCOGNITO_MODE
|
||||
AUTOCORRECT -> KeyCode.TOGGLE_AUTOCORRECT
|
||||
FULL_LEFT -> KeyCode.MOVE_START_OF_LINE
|
||||
FULL_RIGHT -> KeyCode.MOVE_END_OF_LINE
|
||||
PAGE_START -> KeyCode.MOVE_START_OF_PAGE
|
||||
PAGE_END -> KeyCode.MOVE_END_OF_PAGE
|
||||
SELECT_WORD -> KeyCode.CLIPBOARD_SELECT_WORD
|
||||
CLEAR_CLIPBOARD -> KeyCode.CLIPBOARD_CLEAR_HISTORY
|
||||
CLOSE_HISTORY -> KeyCode.ALPHA
|
||||
|
@ -59,10 +65,14 @@ fun getCodeForToolbarKey(key: ToolbarKey) = when (key) {
|
|||
}
|
||||
|
||||
fun getCodeForToolbarKeyLongClick(key: ToolbarKey) = when (key) {
|
||||
RIGHT -> KeyCode.MOVE_END_OF_LINE
|
||||
LEFT -> KeyCode.MOVE_START_OF_LINE
|
||||
LEFT -> KeyCode.WORD_LEFT
|
||||
RIGHT -> KeyCode.WORD_RIGHT
|
||||
UP -> KeyCode.PAGE_UP
|
||||
DOWN -> KeyCode.PAGE_DOWN
|
||||
WORD_LEFT -> KeyCode.MOVE_START_OF_LINE
|
||||
WORD_RIGHT -> KeyCode.MOVE_END_OF_LINE
|
||||
PAGE_UP -> KeyCode.MOVE_START_OF_PAGE
|
||||
PAGE_DOWN -> KeyCode.MOVE_END_OF_PAGE
|
||||
UNDO -> KeyCode.REDO
|
||||
REDO -> KeyCode.UNDO
|
||||
COPY -> KeyCode.CLIPBOARD_COPY_ALL
|
||||
|
@ -83,6 +93,10 @@ fun getStyleableIconId(key: ToolbarKey) = when (key) {
|
|||
RIGHT -> R.styleable.Keyboard_iconArrowRight
|
||||
UP -> R.styleable.Keyboard_iconArrowUp
|
||||
DOWN -> R.styleable.Keyboard_iconArrowDown
|
||||
WORD_LEFT -> R.styleable.Keyboard_iconWordLeft
|
||||
WORD_RIGHT -> R.styleable.Keyboard_iconWordRight
|
||||
PAGE_UP -> R.styleable.Keyboard_iconPageUp
|
||||
PAGE_DOWN -> R.styleable.Keyboard_iconPageDown
|
||||
UNDO -> R.styleable.Keyboard_iconUndo
|
||||
REDO -> R.styleable.Keyboard_iconRedo
|
||||
INCOGNITO -> R.styleable.Keyboard_iconIncognitoKey
|
||||
|
@ -90,6 +104,8 @@ fun getStyleableIconId(key: ToolbarKey) = when (key) {
|
|||
CLEAR_CLIPBOARD -> R.styleable.Keyboard_iconClearClipboardKey
|
||||
FULL_LEFT -> R.styleable.Keyboard_iconFullLeft
|
||||
FULL_RIGHT -> R.styleable.Keyboard_iconFullRight
|
||||
PAGE_START -> R.styleable.Keyboard_iconPageStart
|
||||
PAGE_END -> R.styleable.Keyboard_iconPageEnd
|
||||
SELECT_WORD -> R.styleable.Keyboard_iconSelectWord
|
||||
CLOSE_HISTORY -> R.styleable.Keyboard_iconClose
|
||||
EMOJI -> R.styleable.Keyboard_iconEmojiNormalKey
|
||||
|
@ -106,17 +122,17 @@ fun getToolbarIconByName(name: String, context: Context): Drawable? {
|
|||
|
||||
// names need to be aligned with resources strings (using lowercase of key.name)
|
||||
enum class ToolbarKey {
|
||||
VOICE, CLIPBOARD, UNDO, REDO, SETTINGS, SELECT_ALL, SELECT_WORD, COPY, CUT, ONE_HANDED, LEFT, RIGHT, UP, DOWN,
|
||||
FULL_LEFT, FULL_RIGHT, INCOGNITO, AUTOCORRECT, CLEAR_CLIPBOARD, CLOSE_HISTORY, EMOJI
|
||||
VOICE, CLIPBOARD, UNDO, REDO, SETTINGS, SELECT_ALL, SELECT_WORD, COPY, CUT, ONE_HANDED, INCOGNITO,
|
||||
AUTOCORRECT, CLEAR_CLIPBOARD, CLOSE_HISTORY, EMOJI, LEFT, RIGHT, UP, DOWN, WORD_LEFT, WORD_RIGHT,
|
||||
PAGE_UP, PAGE_DOWN, FULL_LEFT, FULL_RIGHT, PAGE_START, PAGE_END
|
||||
}
|
||||
|
||||
val toolbarKeyStrings = entries.associateWithTo(EnumMap(ToolbarKey::class.java)) { it.toString().lowercase(Locale.US) }
|
||||
|
||||
val defaultToolbarPref = entries.filterNot { it == CLOSE_HISTORY }.joinToString(";") {
|
||||
when (it) {
|
||||
INCOGNITO, AUTOCORRECT, UP, DOWN, ONE_HANDED, FULL_LEFT, FULL_RIGHT, CUT, CLEAR_CLIPBOARD, EMOJI -> "${it.name},false"
|
||||
else -> "${it.name},true"
|
||||
}
|
||||
val defaultToolbarPref by lazy {
|
||||
val default = listOf(VOICE, CLIPBOARD, UNDO, REDO, SETTINGS, SELECT_ALL, SELECT_WORD, COPY, LEFT, RIGHT)
|
||||
val others = entries.filterNot { it in default || it == CLOSE_HISTORY }
|
||||
default.joinToString(";") { "${it.name},true" } + ";" + others.joinToString(";") { "${it.name},false" }
|
||||
}
|
||||
|
||||
val defaultPinnedToolbarPref = entries.filterNot { it == CLOSE_HISTORY }.joinToString(";") {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue