More cursor keys (#933)

This commit is contained in:
Devy Ballard 2024-07-03 14:42:33 -06:00 committed by GitHub
parent e57e2e8de5
commit bcf2a52d6a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 164 additions and 19 deletions

View file

@ -70,7 +70,7 @@ Does not use internet permission, and thus is 100% offline.
## Hidden Functionality ## Hidden Functionality
Features that may go unnoticed, and further potentially useful information Features that may go unnoticed, and further potentially useful information
* Long-pressing toolbar keys results in additional functionality: clipboard -> paste, move left/right -> move full left/right, move up/down -> page up/down, copy -> copy all, select word -> select all, undo <-> redo * Long-pressing toolbar keys results in additional functionality: clipboard -> paste, move left/right -> word left/right, move up/down -> page up/down, word left/right -> line start/end, page up/down -> page start/end, copy -> copy all, select word -> select all, undo <-> redo
* Long-press the Comma-key to access Clipboard View, Emoji View, One-handed Mode, Settings, or Switch Language: * Long-press the Comma-key to access Clipboard View, Emoji View, One-handed Mode, Settings, or Switch Language:
* Emoji View and Language Switch will disappear if you have the corresponding key enabled; * Emoji View and Language Switch will disappear if you have the corresponding key enabled;
* For some layouts it\'s not the Comma-key, but the key at the same position (e.g. it\'s `q` for Dvorak layout). * For some layouts it\'s not the Comma-key, but the key at the same position (e.g. it\'s `q` for Dvorak layout).

View file

@ -1171,13 +1171,15 @@ public class Key implements Comparable<Key> {
if (mCode <= Constants.CODE_SPACE && mCode != KeyCode.MULTIPLE_CODE_POINTS && mIconName == null) if (mCode <= Constants.CODE_SPACE && mCode != KeyCode.MULTIPLE_CODE_POINTS && mIconName == null)
actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW; actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW;
switch (mCode) { 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 // repeating is disabled if a key is configured with pop-ups
if (mPopupKeys == null) if (mPopupKeys == null)
actionFlags |= ACTION_FLAGS_IS_REPEATABLE; actionFlags |= ACTION_FLAGS_IS_REPEATABLE;
// fallthrough // fallthrough
case KeyCode.SHIFT, Constants.CODE_ENTER, KeyCode.SHIFT_ENTER, KeyCode.ALPHA, Constants.CODE_SPACE, KeyCode.NUMPAD, 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! actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW; // no preview even if icon!
} }
if (mCode == KeyCode.SETTINGS || mCode == KeyCode.LANGUAGE_SWITCH) if (mCode == KeyCode.SETTINGS || mCode == KeyCode.LANGUAGE_SWITCH)

View file

@ -139,6 +139,8 @@ object KeyCode {
const val META = -10012 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 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 TAB = -10014
const val WORD_LEFT = -10015
const val WORD_RIGHT = -10016
const val ESCAPE = -10017 const val ESCAPE = -10017
const val INSERT = -10018 const val INSERT = -10018
const val SLEEP = -10019 const val SLEEP = -10019
@ -163,6 +165,8 @@ object KeyCode {
const val F11 = -10038 const val F11 = -10038
const val F12 = -10039 const val F12 = -10039
const val BACK = -10040 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 */ /** to make sure a FlorisBoard code works when reading a JSON layout */
fun Int.checkAndConvertCode(): Int = if (this > 0) this else when (this) { 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, 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, 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, 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 // heliboard only
SYMBOL_ALPHA, START_ONE_HANDED_MODE, STOP_ONE_HANDED_MODE, SWITCH_ONE_HANDED_MODE, SHIFT_ENTER, 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, ACTION_NEXT, ACTION_PREVIOUS, NOT_SPECIFIED, CLIPBOARD_COPY_ALL, WORD_LEFT, WORD_RIGHT, PAGE_UP,
ESCAPE, INSERT, SLEEP, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_PLAY_PAUSE, MEDIA_NEXT, MEDIA_PREVIOUS, PAGE_DOWN, META, TAB, ESCAPE, INSERT, SLEEP, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_PLAY_PAUSE, MEDIA_NEXT,
VOL_UP, VOL_DOWN, MUTE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BACK MEDIA_PREVIOUS, VOL_UP, VOL_DOWN, MUTE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BACK
-> this -> this
// conversion // conversion

View file

@ -1733,11 +1733,11 @@ public class LatinIME extends InputMethodService implements
if (repeatCount > 0) { if (repeatCount > 0) {
// No need to feedback when repeat delete/cursor keys will have no effect. // No need to feedback when repeat delete/cursor keys will have no effect.
switch (code) { 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()) if (!mInputLogic.mConnection.canDeleteCharacters())
return; return;
break; 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()) if (!mInputLogic.mConnection.canForwardDeleteCharacters())
return; return;
break; break;

View file

@ -749,6 +749,18 @@ public final class InputLogic {
inputTransaction.setDidAffectContents(); inputTransaction.setDidAffectContents();
} }
break; 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: case KeyCode.UNDO:
sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_Z, KeyEvent.META_CTRL_ON); sendDownUpKeyEventWithMetaState(KeyEvent.KEYCODE_Z, KeyEvent.META_CTRL_ON);
break; break;

View file

@ -46,12 +46,18 @@ fun getCodeForToolbarKey(key: ToolbarKey) = when (key) {
RIGHT -> KeyCode.ARROW_RIGHT RIGHT -> KeyCode.ARROW_RIGHT
UP -> KeyCode.ARROW_UP UP -> KeyCode.ARROW_UP
DOWN -> KeyCode.ARROW_DOWN 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 UNDO -> KeyCode.UNDO
REDO -> KeyCode.REDO REDO -> KeyCode.REDO
INCOGNITO -> KeyCode.TOGGLE_INCOGNITO_MODE INCOGNITO -> KeyCode.TOGGLE_INCOGNITO_MODE
AUTOCORRECT -> KeyCode.TOGGLE_AUTOCORRECT AUTOCORRECT -> KeyCode.TOGGLE_AUTOCORRECT
FULL_LEFT -> KeyCode.MOVE_START_OF_LINE FULL_LEFT -> KeyCode.MOVE_START_OF_LINE
FULL_RIGHT -> KeyCode.MOVE_END_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 SELECT_WORD -> KeyCode.CLIPBOARD_SELECT_WORD
CLEAR_CLIPBOARD -> KeyCode.CLIPBOARD_CLEAR_HISTORY CLEAR_CLIPBOARD -> KeyCode.CLIPBOARD_CLEAR_HISTORY
CLOSE_HISTORY -> KeyCode.ALPHA CLOSE_HISTORY -> KeyCode.ALPHA
@ -59,10 +65,14 @@ fun getCodeForToolbarKey(key: ToolbarKey) = when (key) {
} }
fun getCodeForToolbarKeyLongClick(key: ToolbarKey) = when (key) { fun getCodeForToolbarKeyLongClick(key: ToolbarKey) = when (key) {
RIGHT -> KeyCode.MOVE_END_OF_LINE LEFT -> KeyCode.WORD_LEFT
LEFT -> KeyCode.MOVE_START_OF_LINE RIGHT -> KeyCode.WORD_RIGHT
UP -> KeyCode.PAGE_UP UP -> KeyCode.PAGE_UP
DOWN -> KeyCode.PAGE_DOWN 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 UNDO -> KeyCode.REDO
REDO -> KeyCode.UNDO REDO -> KeyCode.UNDO
COPY -> KeyCode.CLIPBOARD_COPY_ALL COPY -> KeyCode.CLIPBOARD_COPY_ALL
@ -83,6 +93,10 @@ fun getStyleableIconId(key: ToolbarKey) = when (key) {
RIGHT -> R.styleable.Keyboard_iconArrowRight RIGHT -> R.styleable.Keyboard_iconArrowRight
UP -> R.styleable.Keyboard_iconArrowUp UP -> R.styleable.Keyboard_iconArrowUp
DOWN -> R.styleable.Keyboard_iconArrowDown 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 UNDO -> R.styleable.Keyboard_iconUndo
REDO -> R.styleable.Keyboard_iconRedo REDO -> R.styleable.Keyboard_iconRedo
INCOGNITO -> R.styleable.Keyboard_iconIncognitoKey INCOGNITO -> R.styleable.Keyboard_iconIncognitoKey
@ -90,6 +104,8 @@ fun getStyleableIconId(key: ToolbarKey) = when (key) {
CLEAR_CLIPBOARD -> R.styleable.Keyboard_iconClearClipboardKey CLEAR_CLIPBOARD -> R.styleable.Keyboard_iconClearClipboardKey
FULL_LEFT -> R.styleable.Keyboard_iconFullLeft FULL_LEFT -> R.styleable.Keyboard_iconFullLeft
FULL_RIGHT -> R.styleable.Keyboard_iconFullRight FULL_RIGHT -> R.styleable.Keyboard_iconFullRight
PAGE_START -> R.styleable.Keyboard_iconPageStart
PAGE_END -> R.styleable.Keyboard_iconPageEnd
SELECT_WORD -> R.styleable.Keyboard_iconSelectWord SELECT_WORD -> R.styleable.Keyboard_iconSelectWord
CLOSE_HISTORY -> R.styleable.Keyboard_iconClose CLOSE_HISTORY -> R.styleable.Keyboard_iconClose
EMOJI -> R.styleable.Keyboard_iconEmojiNormalKey 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) // names need to be aligned with resources strings (using lowercase of key.name)
enum class ToolbarKey { enum class ToolbarKey {
VOICE, CLIPBOARD, UNDO, REDO, SETTINGS, SELECT_ALL, SELECT_WORD, COPY, CUT, ONE_HANDED, LEFT, RIGHT, UP, DOWN, VOICE, CLIPBOARD, UNDO, REDO, SETTINGS, SELECT_ALL, SELECT_WORD, COPY, CUT, ONE_HANDED, INCOGNITO,
FULL_LEFT, FULL_RIGHT, INCOGNITO, AUTOCORRECT, CLEAR_CLIPBOARD, CLOSE_HISTORY, EMOJI 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 toolbarKeyStrings = entries.associateWithTo(EnumMap(ToolbarKey::class.java)) { it.toString().lowercase(Locale.US) }
val defaultToolbarPref = entries.filterNot { it == CLOSE_HISTORY }.joinToString(";") { val defaultToolbarPref by lazy {
when (it) { val default = listOf(VOICE, CLIPBOARD, UNDO, REDO, SETTINGS, SELECT_ALL, SELECT_WORD, COPY, LEFT, RIGHT)
INCOGNITO, AUTOCORRECT, UP, DOWN, ONE_HANDED, FULL_LEFT, FULL_RIGHT, CUT, CLEAR_CLIPBOARD, EMOJI -> "${it.name},false" val others = entries.filterNot { it in default || it == CLOSE_HISTORY }
else -> "${it.name},true" default.joinToString(";") { "${it.name},true" } + ";" + others.joinToString(";") { "${it.name},false" }
}
} }
val defaultPinnedToolbarPref = entries.filterNot { it == CLOSE_HISTORY }.joinToString(";") { val defaultPinnedToolbarPref = entries.filterNot { it == CLOSE_HISTORY }.joinToString(";") {

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="270"
android:drawable="@drawable/ic_word_left">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="270"
android:drawable="@drawable/ic_word_left_rounded">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:drawable="@drawable/ic_to_end">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:drawable="@drawable/ic_to_end_rounded">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="270"
android:drawable="@drawable/ic_to_end">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="270"
android:drawable="@drawable/ic_to_end_rounded">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:drawable="@drawable/ic_word_left">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:drawable="@drawable/ic_word_left_rounded">
</rotate>

View file

@ -0,0 +1,14 @@
<!--
icon available in Android Studio
SPDX-License-Identifier: Apache-2.0
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportHeight="24"
android:viewportWidth="24" >
<path android:fillColor="#FFF"
android:pathData="M17.59,18l1.41,-1.41l-4.58,-4.59l4.58,-4.59l-1.41,-1.41l-6,6z"/>
<path android:fillColor="#FFF"
android:pathData="M11,18l1.41,-1.41l-4.58,-4.59l4.58,-4.59l-1.41,-1.41l-6,6z"/>
</vector>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-FileCopyrightText: Material Design Authors / Google LLC
SPDX-License-Identifier: Apache-2.0
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FFF"
android:pathData="M313,480L468,636Q479,647 479.5,663.5Q480,680 468,692Q457,703 440,703Q423,703 412,692L228,508Q222,502 219.5,495Q217,488 217,480Q217,472 219.5,465Q222,458 228,452L412,268Q423,257 439.5,256.5Q456,256 468,268Q479,279 479,296Q479,313 468,324L313,480ZM577,480L732,636Q743,647 743.5,663.5Q744,680 732,692Q721,703 704,703Q687,703 676,692L492,508Q486,502 483.5,495Q481,488 481,480Q481,472 483.5,465Q486,458 492,452L676,268Q687,257 703.5,256.5Q720,256 732,268Q743,279 743,296Q743,313 732,324L577,480Z"/>
</vector>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="180"
android:drawable="@drawable/ic_word_left">
</rotate>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="180"
android:drawable="@drawable/ic_word_left_rounded">
</rotate>

View file

@ -270,8 +270,14 @@
<attr name="iconArrowRight" format="reference" /> <attr name="iconArrowRight" format="reference" />
<attr name="iconArrowUp" format="reference" /> <attr name="iconArrowUp" format="reference" />
<attr name="iconArrowDown" format="reference" /> <attr name="iconArrowDown" format="reference" />
<attr name="iconWordLeft" format="reference" />
<attr name="iconWordRight" format="reference" />
<attr name="iconPageUp" format="reference" />
<attr name="iconPageDown" format="reference" />
<attr name="iconFullLeft" format="reference" /> <attr name="iconFullLeft" format="reference" />
<attr name="iconFullRight" format="reference" /> <attr name="iconFullRight" format="reference" />
<attr name="iconPageStart" format="reference" />
<attr name="iconPageEnd" format="reference" />
<attr name="iconSelectWord" format="reference" /> <attr name="iconSelectWord" format="reference" />
<attr name="iconBin" format="reference" /> <attr name="iconBin" format="reference" />
<attr name="iconUndo" format="reference" /> <attr name="iconUndo" format="reference" />

View file

@ -43,11 +43,17 @@
<item name="iconArrowRight">@drawable/ic_dpad_right</item> <item name="iconArrowRight">@drawable/ic_dpad_right</item>
<item name="iconArrowUp">@drawable/ic_dpad_up</item> <item name="iconArrowUp">@drawable/ic_dpad_up</item>
<item name="iconArrowDown">@drawable/ic_dpad_down</item> <item name="iconArrowDown">@drawable/ic_dpad_down</item>
<item name="iconWordLeft">@drawable/ic_word_left</item>
<item name="iconWordRight">@drawable/ic_word_right</item>
<item name="iconPageUp">@drawable/ic_page_up</item>
<item name="iconPageDown">@drawable/ic_page_down</item>
<item name="iconBin">@drawable/ic_delete</item> <item name="iconBin">@drawable/ic_delete</item>
<item name="iconUndo">@drawable/ic_undo</item> <item name="iconUndo">@drawable/ic_undo</item>
<item name="iconRedo">@drawable/ic_redo</item> <item name="iconRedo">@drawable/ic_redo</item>
<item name="iconFullLeft">@drawable/ic_to_start</item> <item name="iconFullLeft">@drawable/ic_to_start</item>
<item name="iconFullRight">@drawable/ic_to_end</item> <item name="iconFullRight">@drawable/ic_to_end</item>
<item name="iconPageStart">@drawable/ic_page_start</item>
<item name="iconPageEnd">@drawable/ic_page_end</item>
<item name="iconSelectWord">@drawable/ic_select</item> <item name="iconSelectWord">@drawable/ic_select</item>
<item name="iconClose">@drawable/ic_close</item> <item name="iconClose">@drawable/ic_close</item>
</style> </style>

View file

@ -48,11 +48,17 @@
<item name="iconArrowRight">@drawable/ic_dpad_right</item> <item name="iconArrowRight">@drawable/ic_dpad_right</item>
<item name="iconArrowUp">@drawable/ic_dpad_up</item> <item name="iconArrowUp">@drawable/ic_dpad_up</item>
<item name="iconArrowDown">@drawable/ic_dpad_down</item> <item name="iconArrowDown">@drawable/ic_dpad_down</item>
<item name="iconWordLeft">@drawable/ic_word_left</item>
<item name="iconWordRight">@drawable/ic_word_right</item>
<item name="iconPageUp">@drawable/ic_page_up</item>
<item name="iconPageDown">@drawable/ic_page_down</item>
<item name="iconBin">@drawable/ic_delete</item> <item name="iconBin">@drawable/ic_delete</item>
<item name="iconUndo">@drawable/ic_undo</item> <item name="iconUndo">@drawable/ic_undo</item>
<item name="iconRedo">@drawable/ic_redo</item> <item name="iconRedo">@drawable/ic_redo</item>
<item name="iconFullLeft">@drawable/ic_to_start</item> <item name="iconFullLeft">@drawable/ic_to_start</item>
<item name="iconFullRight">@drawable/ic_to_end</item> <item name="iconFullRight">@drawable/ic_to_end</item>
<item name="iconPageStart">@drawable/ic_page_start</item>
<item name="iconPageEnd">@drawable/ic_page_end</item>
<item name="iconSelectWord">@drawable/ic_select</item> <item name="iconSelectWord">@drawable/ic_select</item>
<item name="iconClose">@drawable/ic_close</item> <item name="iconClose">@drawable/ic_close</item>
</style> </style>

View file

@ -47,11 +47,17 @@
<item name="iconArrowRight">@drawable/ic_dpad_right_rounded</item> <item name="iconArrowRight">@drawable/ic_dpad_right_rounded</item>
<item name="iconArrowUp">@drawable/ic_dpad_up_rounded</item> <item name="iconArrowUp">@drawable/ic_dpad_up_rounded</item>
<item name="iconArrowDown">@drawable/ic_dpad_down_rounded</item> <item name="iconArrowDown">@drawable/ic_dpad_down_rounded</item>
<item name="iconWordLeft">@drawable/ic_word_left_rounded</item>
<item name="iconWordRight">@drawable/ic_word_right_rounded</item>
<item name="iconPageUp">@drawable/ic_page_up_rounded</item>
<item name="iconPageDown">@drawable/ic_page_down_rounded</item>
<item name="iconBin">@drawable/ic_delete_rounded</item> <item name="iconBin">@drawable/ic_delete_rounded</item>
<item name="iconUndo">@drawable/ic_undo_rounded</item> <item name="iconUndo">@drawable/ic_undo_rounded</item>
<item name="iconRedo">@drawable/ic_redo_rounded</item> <item name="iconRedo">@drawable/ic_redo_rounded</item>
<item name="iconFullLeft">@drawable/ic_to_start_rounded</item> <item name="iconFullLeft">@drawable/ic_to_start_rounded</item>
<item name="iconFullRight">@drawable/ic_to_end_rounded</item> <item name="iconFullRight">@drawable/ic_to_end_rounded</item>
<item name="iconPageStart">@drawable/ic_page_start_rounded</item>
<item name="iconPageEnd">@drawable/ic_page_end_rounded</item>
<item name="iconSelectWord">@drawable/ic_select_rounded</item> <item name="iconSelectWord">@drawable/ic_select_rounded</item>
<item name="iconClose">@drawable/ic_close</item> <item name="iconClose">@drawable/ic_close</item>
</style> </style>

View file

@ -249,10 +249,16 @@
<string name="one_handed" tools:keep="@string/one_handed">One-handed mode</string> <string name="one_handed" tools:keep="@string/one_handed">One-handed mode</string>
<string name="full_left" tools:keep="@string/full_left">Full left</string> <string name="full_left" tools:keep="@string/full_left">Full left</string>
<string name="full_right" tools:keep="@string/full_right">Full right</string> <string name="full_right" tools:keep="@string/full_right">Full right</string>
<string name="page_start" tools:keep="@string/page_start">Page start</string>
<string name="page_end" tools:keep="@string/page_end">Page end</string>
<string name="left" tools:keep="@string/left">Left</string> <string name="left" tools:keep="@string/left">Left</string>
<string name="right" tools:keep="@string/right">Right</string> <string name="right" tools:keep="@string/right">Right</string>
<string name="up" tools:keep="@string/up">Up</string> <string name="up" tools:keep="@string/up">Up</string>
<string name="down" tools:keep="@string/down">Down</string> <string name="down" tools:keep="@string/down">Down</string>
<string name="word_left" tools:keep="@string/word_left">Word left</string>
<string name="word_right" tools:keep="@string/word_right">Word right</string>
<string name="page_up" tools:keep="@string/page_up">Page up</string>
<string name="page_down" tools:keep="@string/page_down">Page down</string>
<string name="undo" tools:keep="@string/undo">Undo</string> <string name="undo" tools:keep="@string/undo">Undo</string>
<string name="redo" tools:keep="@string/redo">Redo</string> <string name="redo" tools:keep="@string/redo">Redo</string>
<string name="close_history" tools:keep="@string/close_history">Close clipboard history</string> <string name="close_history" tools:keep="@string/close_history">Close clipboard history</string>
@ -788,8 +794,10 @@ New dictionary:
<!-- Hidden features text --> <!-- Hidden features text -->
<string name="hidden_features_message">► Long-pressing pinned toolbar keys results in additional functionality: &lt;br&gt; <string name="hidden_features_message">► Long-pressing pinned toolbar keys results in additional functionality: &lt;br&gt;
\n\t• clipboard &amp;#65515; paste &lt;br&gt; \n\t• clipboard &amp;#65515; paste &lt;br&gt;
\n\t• move left/right &amp;#65515; move full left/right &lt;br&gt; \n\t• move left/right &amp;#65515; word left/right &lt;br&gt;
\n\t• move up/down &amp;#65515; page up/down &lt;br&gt; \n\t• move up/down &amp;#65515; page up/down &lt;br&gt;
\n\t• word left/right &amp;#65515; line start/end &lt;br&gt;
\n\t• page up/down &amp;#65515; page start/end &lt;br&gt;
\n\t• copy &amp;#65515; copy all &lt;br&gt; \n\t• copy &amp;#65515; copy all &lt;br&gt;
\n\t• select word &amp;#65515; select all &lt;br&gt; \n\t• select word &amp;#65515; select all &lt;br&gt;
\n\t• undo &amp;#8596; redo &lt;br&gt; &lt;br&gt; \n\t• undo &amp;#8596; redo &lt;br&gt; &lt;br&gt;