diff --git a/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardCodesSet.java b/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardCodesSet.java index dabb32040..9d9049ed1 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardCodesSet.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardCodesSet.java @@ -45,6 +45,7 @@ public static int getCode(final String name) { "key_output_text", "key_delete", "key_settings", + "key_paste", "key_action_next", "key_action_previous", "key_shift_enter", @@ -64,6 +65,7 @@ public static int getCode(final String name) { Constants.CODE_OUTPUT_TEXT, Constants.CODE_DELETE, Constants.CODE_SETTINGS, + Constants.CODE_PASTE, Constants.CODE_ACTION_NEXT, Constants.CODE_ACTION_PREVIOUS, Constants.CODE_SHIFT_ENTER, diff --git a/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardIconsSet.java b/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardIconsSet.java index b555cc66c..86161e229 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardIconsSet.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardIconsSet.java @@ -38,6 +38,7 @@ public final class KeyboardIconsSet { public static final String NAME_SHIFT_KEY_SHIFTED = "shift_key_shifted"; public static final String NAME_DELETE_KEY = "delete_key"; public static final String NAME_SETTINGS_KEY = "settings_key"; + public static final String NAME_PASTE_KEY = "paste_key"; public static final String NAME_SPACE_KEY = "space_key"; public static final String NAME_SPACE_KEY_FOR_NUMBER_LAYOUT = "space_key_for_number_layout"; public static final String NAME_ENTER_KEY = "enter_key"; @@ -62,6 +63,7 @@ public final class KeyboardIconsSet { NAME_SHIFT_KEY, R.styleable.Keyboard_iconShiftKey, NAME_DELETE_KEY, R.styleable.Keyboard_iconDeleteKey, NAME_SETTINGS_KEY, R.styleable.Keyboard_iconSettingsKey, + NAME_PASTE_KEY, R.styleable.Keyboard_iconPasteKey, NAME_SPACE_KEY, R.styleable.Keyboard_iconSpaceKey, NAME_ENTER_KEY, R.styleable.Keyboard_iconEnterKey, NAME_GO_KEY, R.styleable.Keyboard_iconGoKey, diff --git a/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardTextsTable.java b/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardTextsTable.java index 8e791ec37..849c5077c 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -384,7 +384,7 @@ public static String[] getTextsTable(final Locale locale) { // U+2205: "∅" EMPTY SET /* morekeys_symbols_0 */ "\u207F,\u2205", /* morekeys_am_pm */ "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", - /* keyspec_settings */ "!icon/settings_key|!code/key_settings", + /* keyspec_settings */ "!icon/paste_key|!code/key_paste,!icon/settings_key|!code/key_settings", /* keyspec_action_next */ "!code/key_action_next", /* keyspec_action_previous */ "!code/key_action_previous", // Label for "switch to more symbol" modifier key ("= \ <"). Must be short to fit on key! diff --git a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java index e9151cea7..b98a25366 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java @@ -17,6 +17,8 @@ package rkr.simplekeyboard.inputmethod.latin; import android.annotation.TargetApi; +import android.content.ClipboardManager; +import android.content.Context; import android.os.Build; import android.util.Log; import android.view.KeyEvent; @@ -318,6 +320,16 @@ public void performEditorAction(final int actionId) { } } + public void pasteClipboard() { + ClipboardManager clipboard = (ClipboardManager) mLatinIME.getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboard.hasPrimaryClip() && clipboard.getPrimaryClip().getItemCount() > 0) { + CharSequence pasteData = clipboard.getPrimaryClip().getItemAt(0).getText(); + if (pasteData != null && pasteData.length() > 0) { + mLatinIME.onTextInput(pasteData.toString()); + } + } + } + public void sendKeyEvent(final KeyEvent keyEvent) { RichInputMethodManager.getInstance().resetSubtypeCycleOrder(); if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { diff --git a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/common/Constants.java b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/common/Constants.java index 338a123fb..2eda6a476 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/common/Constants.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/common/Constants.java @@ -93,6 +93,7 @@ public static boolean isValidCoordinate(final int coordinate) { public static final int CODE_OUTPUT_TEXT = -4; public static final int CODE_DELETE = -5; public static final int CODE_SETTINGS = -6; + public static final int CODE_PASTE = -7; public static final int CODE_ACTION_NEXT = -8; public static final int CODE_ACTION_PREVIOUS = -9; public static final int CODE_LANGUAGE_SWITCH = -10; @@ -113,6 +114,7 @@ public static String printableCode(final int code) { case CODE_OUTPUT_TEXT: return "text"; case CODE_DELETE: return "delete"; case CODE_SETTINGS: return "settings"; + case CODE_PASTE: return "paste"; case CODE_ACTION_NEXT: return "actionNext"; case CODE_ACTION_PREVIOUS: return "actionPrevious"; case CODE_LANGUAGE_SWITCH: return "languageSwitch"; diff --git a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/inputlogic/InputLogic.java b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/inputlogic/InputLogic.java index 4e2bbc9e2..4e58a2576 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/inputlogic/InputLogic.java @@ -16,6 +16,7 @@ package rkr.simplekeyboard.inputmethod.latin.inputlogic; +import android.content.ClipboardManager; import android.os.SystemClock; import android.text.TextUtils; import android.view.KeyCharacterMap; @@ -196,6 +197,9 @@ private void handleFunctionalEvent(final Event event, final InputTransaction inp case Constants.CODE_SETTINGS: onSettingsKeyPressed(); break; + case Constants.CODE_PASTE: + mConnection.pasteClipboard(); + break; case Constants.CODE_ACTION_NEXT: performEditorAction(EditorInfo.IME_ACTION_NEXT); break; diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_dark.png new file mode 100644 index 000000000..4bfc31513 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_light.png b/app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_light.png new file mode 100644 index 000000000..5ee2c10b3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_light.png differ diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_dark.png b/app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_dark.png new file mode 100644 index 000000000..0af0f86e5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_dark.png differ diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_light.png b/app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_light.png new file mode 100644 index 000000000..b0dcf19d7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_light.png differ diff --git a/app/src/main/res/drawable-v24/sym_keyboard_paste_lxx_system.xml b/app/src/main/res/drawable-v24/sym_keyboard_paste_lxx_system.xml new file mode 100644 index 000000000..e45d6a5a3 --- /dev/null +++ b/app/src/main/res/drawable-v24/sym_keyboard_paste_lxx_system.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_dark.png new file mode 100644 index 000000000..9db680650 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_light.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_light.png new file mode 100644 index 000000000..4a271f8c2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_light.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_dark.png new file mode 100644 index 000000000..565e64e5e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_light.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_light.png new file mode 100644 index 000000000..903a16f75 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_light.png differ diff --git a/app/src/main/res/values-v24/keyboard-icons-lxx-system.xml b/app/src/main/res/values-v24/keyboard-icons-lxx-system.xml index 7b8824355..310a616d8 100644 --- a/app/src/main/res/values-v24/keyboard-icons-lxx-system.xml +++ b/app/src/main/res/values-v24/keyboard-icons-lxx-system.xml @@ -4,6 +4,7 @@ @drawable/sym_keyboard_shift_lxx_system @drawable/sym_keyboard_delete_lxx_system @drawable/sym_keyboard_settings_lxx_system + @drawable/sym_keyboard_paste_lxx_system @null @drawable/sym_keyboard_return_lxx_system @drawable/sym_keyboard_go_lxx_system diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 48fa96c83..6358a5c8d 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -138,6 +138,7 @@ + diff --git a/app/src/main/res/values/keyboard-icons-lxx-dark.xml b/app/src/main/res/values/keyboard-icons-lxx-dark.xml index 46be25ff7..2e1154d9d 100644 --- a/app/src/main/res/values/keyboard-icons-lxx-dark.xml +++ b/app/src/main/res/values/keyboard-icons-lxx-dark.xml @@ -24,6 +24,7 @@ @drawable/sym_keyboard_shift_lxx_dark @drawable/sym_keyboard_delete_lxx_dark @drawable/sym_keyboard_settings_lxx_dark + @drawable/sym_keyboard_paste_lxx_dark @null @drawable/sym_keyboard_return_lxx_dark @drawable/sym_keyboard_go_lxx_dark diff --git a/app/src/main/res/values/keyboard-icons-lxx-light.xml b/app/src/main/res/values/keyboard-icons-lxx-light.xml index 5d30b51ec..7607ad461 100644 --- a/app/src/main/res/values/keyboard-icons-lxx-light.xml +++ b/app/src/main/res/values/keyboard-icons-lxx-light.xml @@ -24,6 +24,7 @@ @drawable/sym_keyboard_shift_lxx_light @drawable/sym_keyboard_delete_lxx_light @drawable/sym_keyboard_settings_lxx_light + @drawable/sym_keyboard_paste_lxx_light @null @drawable/sym_keyboard_return_lxx_light @drawable/sym_keyboard_go_lxx_light diff --git a/app/src/main/res/xml-sw600dp/key_styles_common.xml b/app/src/main/res/xml-sw600dp/key_styles_common.xml index 7fd62fee5..4d7beea7b 100644 --- a/app/src/main/res/xml-sw600dp/key_styles_common.xml +++ b/app/src/main/res/xml-sw600dp/key_styles_common.xml @@ -102,6 +102,11 @@ latin:keySpec="!icon/settings_key|!code/key_settings" latin:keyActionFlags="noKeyPreview" latin:backgroundType="functional" /> + +