mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-04-21 14:49:10 +00:00
More cursor keys (#933)
This commit is contained in:
parent
e57e2e8de5
commit
bcf2a52d6a
23 changed files with 164 additions and 19 deletions
|
@ -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).
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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(";") {
|
||||||
|
|
5
app/src/main/res/drawable/ic_page_down.xml
Normal file
5
app/src/main/res/drawable/ic_page_down.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_down_rounded.xml
Normal file
5
app/src/main/res/drawable/ic_page_down_rounded.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_end.xml
Normal file
5
app/src/main/res/drawable/ic_page_end.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_end_rounded.xml
Normal file
5
app/src/main/res/drawable/ic_page_end_rounded.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_start.xml
Normal file
5
app/src/main/res/drawable/ic_page_start.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_start_rounded.xml
Normal file
5
app/src/main/res/drawable/ic_page_start_rounded.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_up.xml
Normal file
5
app/src/main/res/drawable/ic_page_up.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_page_up_rounded.xml
Normal file
5
app/src/main/res/drawable/ic_page_up_rounded.xml
Normal 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>
|
14
app/src/main/res/drawable/ic_word_left.xml
Normal file
14
app/src/main/res/drawable/ic_word_left.xml
Normal 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>
|
14
app/src/main/res/drawable/ic_word_left_rounded.xml
Normal file
14
app/src/main/res/drawable/ic_word_left_rounded.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_word_right.xml
Normal file
5
app/src/main/res/drawable/ic_word_right.xml
Normal 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>
|
5
app/src/main/res/drawable/ic_word_right_rounded.xml
Normal file
5
app/src/main/res/drawable/ic_word_right_rounded.xml
Normal 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>
|
|
@ -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" />
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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: <br>
|
<string name="hidden_features_message">► Long-pressing pinned toolbar keys results in additional functionality: <br>
|
||||||
\n\t• clipboard &#65515; paste <br>
|
\n\t• clipboard &#65515; paste <br>
|
||||||
\n\t• move left/right &#65515; move full left/right <br>
|
\n\t• move left/right &#65515; word left/right <br>
|
||||||
\n\t• move up/down &#65515; page up/down <br>
|
\n\t• move up/down &#65515; page up/down <br>
|
||||||
|
\n\t• word left/right &#65515; line start/end <br>
|
||||||
|
\n\t• page up/down &#65515; page start/end <br>
|
||||||
\n\t• copy &#65515; copy all <br>
|
\n\t• copy &#65515; copy all <br>
|
||||||
\n\t• select word &#65515; select all <br>
|
\n\t• select word &#65515; select all <br>
|
||||||
\n\t• undo &#8596; redo <br> <br>
|
\n\t• undo &#8596; redo <br> <br>
|
||||||
|
|
Loading…
Add table
Reference in a new issue