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" />
+
+