From bc3ec3d0623e2a42a7cd396e2bb67e8c77780c8f Mon Sep 17 00:00:00 2001 From: Raimondas Rimkus <3480123+rkkr@users.noreply.github.com> Date: Sat, 11 Jan 2025 19:00:06 +0200 Subject: [PATCH 1/5] Clipboard paste --- .../keyboard/internal/KeyboardCodesSet.java | 2 ++ .../keyboard/internal/KeyboardIconsSet.java | 2 ++ .../keyboard/internal/KeyboardTextsTable.java | 2 +- .../inputmethod/latin/RichInputConnection.java | 14 ++++++++++++++ .../inputmethod/latin/common/Constants.java | 2 ++ .../inputmethod/latin/inputlogic/InputLogic.java | 8 ++++++++ .../drawable-hdpi/sym_keyboard_paste_lxx_dark.png | Bin 0 -> 311 bytes .../sym_keyboard_paste_lxx_light.png | Bin 0 -> 352 bytes .../drawable-mdpi/sym_keyboard_paste_lxx_dark.png | Bin 0 -> 244 bytes .../sym_keyboard_paste_lxx_light.png | Bin 0 -> 260 bytes .../sym_keyboard_paste_lxx_system.xml | 10 ++++++++++ .../sym_keyboard_paste_lxx_dark.png | Bin 0 -> 436 bytes .../sym_keyboard_paste_lxx_light.png | Bin 0 -> 450 bytes .../sym_keyboard_paste_lxx_dark.png | Bin 0 -> 733 bytes .../sym_keyboard_paste_lxx_light.png | Bin 0 -> 785 bytes .../res/values-v24/keyboard-icons-lxx-system.xml | 1 + app/src/main/res/values/attrs.xml | 1 + .../main/res/values/keyboard-icons-lxx-dark.xml | 1 + .../main/res/values/keyboard-icons-lxx-light.xml | 1 + .../main/res/xml-sw600dp/key_styles_common.xml | 5 +++++ app/src/main/res/xml/key_styles_common.xml | 6 ++++++ build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 23 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_paste_lxx_light.png create mode 100644 app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_dark.png create mode 100644 app/src/main/res/drawable-mdpi/sym_keyboard_paste_lxx_light.png create mode 100644 app/src/main/res/drawable-v24/sym_keyboard_paste_lxx_system.xml create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_paste_lxx_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_paste_lxx_light.png 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 dabb32040e..9d9049ed1c 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 b555cc66c7..86161e229f 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 8e791ec373..849c5077cc 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 e9151cea70..8224deae87 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java @@ -16,7 +16,11 @@ package rkr.simplekeyboard.inputmethod.latin; +import static android.content.ClipDescription.MIMETYPE_TEXT_PLAIN; + 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 +322,16 @@ public void performEditorAction(final int actionId) { } } + public void pasteClipboard() { + ClipboardManager clipboard = (ClipboardManager) mLatinIME.getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboard.hasPrimaryClip() && clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN)) { + CharSequence pasteData = clipboard.getPrimaryClip().getItemAt(0).getText(); + if (pasteData != null && pasteData.length() > 0) { + commitText(pasteData, 1); + } + } + } + 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 338a123fb4..2eda6a476a 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 4e2bbc9e2c..cf0a3585a0 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: + onPasteKeyPressed(); + break; case Constants.CODE_ACTION_NEXT: performEditorAction(EditorInfo.IME_ACTION_NEXT); break; @@ -468,6 +472,10 @@ private void onSettingsKeyPressed() { mLatinIME.launchSettings(); } + private void onPasteKeyPressed() { + mConnection.pasteClipboard(); + } + /** * Sends a DOWN key event followed by an UP key event to the editor. * 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 0000000000000000000000000000000000000000..336b19f59af79585d895168c4e6e0fb7c29dcde9 GIT binary patch literal 311 zcmV-70m%M|P)@+XQ- zrQU#us&EN67sKzWtosUBT!+Uy)@1!h!NRl>g1d(q+4nLSR)F)%V7W}Q0!whG+({2` z5$fe$6%=NbAxX|y?^L-@GRJqTps1xZCdzuZ^3Jf!cdMYN!x|>+yr&F&)B&3_X6M7} z`CZ5Z8PE>}YS8&#^omV3XGAdq#e!mep;&kz3lC)Bfh;_bg$J_mKo%az!UI|SMW8lo z2+!W|JdSCYd7a;v`){D|k1|%Oc%$UKzz^Lx&;uum9_jblvufqWXt*_l; zMII}&@NgAQj6ZRzX-DDJUh9S2^IZ!r>hT8Nzh>M$v8d|o6*EDm&j%ZC&$c#>_m=iZ z->iJ%^Pf$tR&C#;bAMvkwN1yL|7+Dbz3%m{e_X6d;Wc$Rei2PAR+fid*(Wc1DdQVI zkzY=X>zu3Sq?itl_{SdpFLj?+<_VmbQ#5(sgWaDOZFLP?^P?(Wp>&(AHOH*9m<-qK zjd?$#;tjGl0tN1UoGbQVaqYF*HSc#m+~;`S{Vj8+`rYGID}V2QgTe~DWM4f5aXMq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7dd63c787850e91dcf06261f3022b197b13f2514 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjyFFbTLn`8~PIcruK+^G^C9=F)?2>1$0~2fl=!!K@ACj4f9K14`gRiGOE=a8TlzdRcVUg4qWW2S zQIp=ONk4fb7%m)VYOoVy__C2 + + 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 0000000000000000000000000000000000000000..a0bce068edb2f32b583704abbc2117ddb91485c7 GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FjjlIIEGZjy`8z&i#brFMflI_ zBhNQ}W6h~qub`o_w&R-9nl-v#=H{K-AdCelt0@e(zDvEz1k*-s<`-uSa|KmTmqUShNOFh4SuZdM)Pd^>-`lkJT_tG_$_pIufQN8zk(64gcPbbX7zEwYY tt?}3RwYSpWwKh|0=STL-{8Z0j*c`33d+PQX+`!mi@O1TaS?83{1OSAx!r%Y^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..68ef841a896701d2b42ad6457782b323f4daa4e7 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(Fm`&nIEGZjy`6c`>#&1}YjCgh zM{gz72`9r&@N06t6S>2w7sK^y`@TkzN3J_3&zZ*drjfgKy5;w+FY{KtV)#;PUlRL$ zTF|c(C+91h|GM+4BUS&?rjM-q>b%dyKi*huyIm^jV0moRmF1e^y?))RJU;F}Eac)*k0M z_Oo}KiukqqZO~txwWW6I8&AJI658hVEKO(aar4UcpLbsTtK+wzSnB!pokuxK{2u?Y z+HTQ!E^|)&b20S`mc5@}-+9DhwY;!yZuA_7=O*XY7jug_6xh=N@8{~1y?cI={>zY} zHA|+vE3rRqz+<}e$?b5l_)n=POkdjx-SzKYAL&2mhk6b35k`X-N%qAR$&%a z!&$BNDjIeUogM#Xy^HC3C(^7Z5}Wm9{w=w5Hm92xs`BUd?0nh8+*opMW!|Q_H*eoI zTsr0OEOFEL?0vbLe*LUG%R6ts!IjhT>nnplZ=M`(di}@u?qzX5ydEo7?L0HjHAufI z;Pc*(413r7d#3eU%zf{Z*TvNzM0s>`_f{O15%%2@?`g``B z%s+K`_paMKt2H?l^~X8+#)-wp?rlD1sl2-V*7JKgSudv_n<12!`_R&G{tnabsER8R z7Z2^#wNZbr_gyWx>A&slJJ~sQIdhCZPn$hCbINVYl{;&*-q)S&KW1sV{JjOY*mt&5 zzYf*U;eXyD7cG@u-~L?f@S}SNyr!j}S9siLCCPu~WW@r%W6Y&Saw{f(beP-2{_07L z?S-YWK;>SCYenbH=IQ?0Xz=CQ-^exmEep55JD*gmz_YisUhFk<;)}JvH%G{GIOpG; zfAp7wMAhqmI@j0_U5NgkzR^yg?cOf?;jJ~!tK$60DR-97EuWcuuh>ZS|IdrDPZ-}@ zc2D}B@ILaH@q6>xoBky=_V;f5Jnf7)ch1VE{@%}4YhJ1hFFx{{hpqWw!iJbSMz@$> VO>dU_WB`*bgQu&X%Q~loCIFf%b>{#8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..611fe6c98dc83724ec8d6400d9f9ba5065a293bd GIT binary patch literal 785 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V7lSy;uum9_jZnNws4?GTXf(N ztsVT4X;WQ|W^&er9htvGI(!lLMXeQ)KR@Q%GP6BdSaEyi^9bX6?B|reJgc2wJ!?wN zti_A9({{$(d%5eK>lwXguh-w)n)|zEYt-FmKmWHy9P-q8c(!c!-;c{Xi`PH<{8QJi z{?d`9`2~VYJD10%pHrE6Hcfrwg8UeV%wNxS#JXpnnJx2iTh-aq@g+%~`ZLWnA2pR% zzC7*s-+k`R|01)`KFf^x((@=eeQ#X8(!U+^U)=cgJXw9t{o|{@bG}b5l3|sP$nm*s z(jO_tU45+h*q82C?+@*}=<-8+TIAt%wl?X$IxmHHy9qWf*D-9bt*$sXr=s;<^8JKI zYqushT0TE{?Eb=bn{>ZBFLkZi4;NJbI&YzP=k4!DAOBYTnfv_B&%b?(6AD%)oM1n= z@pAd4Wd8H-+Mlx>eh}ms8?bPJ-im+#@eqv_+*%@6SVg&BHF2?)I<_|LT2ORwtM;to zh2L5K=(9I}ZAy8u_P23_zDL`=UG}3~l+ajiwC8!kt!;l#d~lw>?)ABf^9N0QKXUW6NRIjB* bv2{%4N7df3Yb^QzOzI4tu6{1-oD!M@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 48fa96c83c..6358a5c8db 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 46be25ff7e..2e1154d9d3 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 5d30b51ecf..7607ad4611 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 7fd62fee56..4d7beea7b8 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" /> + + Date: Sat, 11 Jan 2025 19:16:02 +0200 Subject: [PATCH 2/5] handle html --- .../simplekeyboard/inputmethod/latin/RichInputConnection.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 8224deae87..9bf8a87416 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java @@ -324,7 +324,8 @@ public void performEditorAction(final int actionId) { public void pasteClipboard() { ClipboardManager clipboard = (ClipboardManager) mLatinIME.getSystemService(Context.CLIPBOARD_SERVICE); - if (clipboard.hasPrimaryClip() && clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN)) { + if (clipboard.hasPrimaryClip() && clipboard.getPrimaryClip().getItemCount() > 0) { + CharSequence pasteData = clipboard.getPrimaryClip().getItemAt(0).getText(); if (pasteData != null && pasteData.length() > 0) { commitText(pasteData, 1); From 0c0e35d20410a1177dd333e6ef4135c6fd93637a Mon Sep 17 00:00:00 2001 From: Raimondas Rimkus <3480123+rkkr@users.noreply.github.com> Date: Sat, 11 Jan 2025 20:00:09 +0200 Subject: [PATCH 3/5] match alpha --- .../sym_keyboard_paste_lxx_dark.png | Bin 311 -> 4590 bytes .../sym_keyboard_paste_lxx_light.png | Bin 352 -> 4602 bytes .../sym_keyboard_paste_lxx_dark.png | Bin 244 -> 4409 bytes .../sym_keyboard_paste_lxx_light.png | Bin 260 -> 4426 bytes .../sym_keyboard_paste_lxx_dark.png | Bin 436 -> 4593 bytes .../sym_keyboard_paste_lxx_light.png | Bin 450 -> 4608 bytes .../sym_keyboard_paste_lxx_dark.png | Bin 733 -> 4799 bytes .../sym_keyboard_paste_lxx_light.png | Bin 785 -> 4815 bytes 8 files changed, 0 insertions(+), 0 deletions(-) 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 index 336b19f59af79585d895168c4e6e0fb7c29dcde9..4bfc31513a5624ec355de232078958c452b51fdb 100644 GIT binary patch literal 4590 zcmeHKdsGu=79WhtOIcqOwLZoXpJkFvUL;c@ut|VeA`v1&>#j~_CNPyem<%T15fueN zw~E+SM66c9C)%~ex2R}!eFAEib?y3~rD$zcsIK%BmHj3lVz=k)@to~{Bxf=+_wl>; z{_g$0ldr%yExNzoa6brw`s-t~@!%fJUp{@oZv#|Z3~r~gOi5fk;es8k-NK~NFqi3| zVcN}DAjo~)YJ6|dDcI*}>kxHLn9MQaYMHbua@Fi1MFj>|UZ3O?-IeE=$FFP=EFQd8 zx3j*ae?`T$iozdLmyCII+pDo|&Vy|U5p!45KW+Ky;KIiZvgWTUCI^kp%=>Fi&KbeP z@Tj{5zi6v&o{Tw_U)RTHNz<+KGw4Iv#EnP&T4FXNHSM+EIlcct;QVC+T)obp(S9Q^ zt}5D|>~$t$e*n4faN%E$<*h>-Z+#L_CTjXyGW^TVlb}woTt=fY>NT1d<$xke7pzvt zoH7o{jY}xs960dpd?mF#XHHOHddQ5BoZKsksei9-EMHhxHb$SGK4g}E!1IvAk+VuO zG8}=ut49xTRqHS7rXCeds?2XW`R#&IS8YR88}#XPV&^{t`Ou!Q2%7UcL6`#$&xApLf=8%WS!gtL+x4vI}82#===@sQ?=g{$?K1~1D$ZT7w}^5WFIsbQKCiKY*J%B{HIcL%L` zzx>R*t&O67P5VBQ{e$@cSvfAaaH-EQ`G?aN=la|qK52YBH|kOID&_OwLlpZ__1V3P zCYxebj(+-w?ArQ}*tkRb>Y;Vd%wLZtBjyC9)?3@!uI*nxVNv_AgIBIUe_v4C7F>0+ z{$%ut6ADNAjrvCQZPt5e_LXrOHaHyp)Ck?Iy}O=0QHRzYX{yIV_pFP zi(3%-v-wAlY;)S$pHw!r3es!Xtwm>p?t{6T$AI}tGQ{Gf-6|v~yO|cctqw4F5EK^f zb`a!TnuE=B3S(0v504y2V1`m7Gvx-c!J(m3nV2k=PRN>OBD3a_Dhdgo;uq$|0f3d} z2-s~+vpI3M8u8%b;F%YT5ZGhF%~c~w1|zJovotId%7kK6=VscG42CXvo3oPzz=z09I7FCGEV5cf-94O~ZXN*XOz1Z~oF=eL zMe(%Lp23o|ZXRvp#&(CG$S!|J2Ak$7hayFE8f^upP7oD)C1kYTVC?eXDM(?g4v!Zg z`xQ%$vAiVfmE3rZr=0GI0QWB3SFB&u?lA^d1_Q3OlNo$^daWAaAP_tMf zMP(L(KviX|6{7jFiV@)N{=^bw!uW5{DF~P8BS>OcOQG%10M|ZRf zV0Ea-RKk`*gZ-m(U|-0Y-xvl3Nn?~kVn$_hl0s#)LWL^L5;-cBhbn2Q1e0T-ze0D~ zEu4#B>BtnoBj5@QsD~?fVrQ!+d06Yp#+6F*eE^i9Vhrs@86xT|R>bcZFRBd_{TCl$ z9)oUM4DjoafvpSdgrcsku#+zk`}h2G_Tl#o0mD5(UW?xzx_an(Ee2l8xM#Y0=z1*% zUdy;=y8dr;`Mo?$(Khf8$OVo{1zv9zfMZr)^E=U6sGa|As@k>&NPHbJ$xaCJAIx7~ zP)X@fAoS++2A%i!Uj74d-$Z*uH8@PK(`zG5NvH0wt)1Fy`j9inr6st&ed)#h$&CYu zL%x-|%GAqmR^Ij9JPMwSY=racBX>QqF4^uVPa2RY8>HQplZLdLYD(Wg^uxA%d(h{> zfvP*7v>mynn)P5zU(w9ZKQCDKy=W*jQ8W8%>fujKHCK@k>K@pMYe;}f^ZxyzcL9S~g18yT_MC>Fq1cMAIEPmWuCcZ^r? zqTYqjpom^EkT2{-UD#OCKfBNLjJ%ENUOJy=t_5Cgvb=L=OX)z+H%PCWrrq<$IXV9U DYX+q9 delta 284 zcmV+%0ptGeBew#OB!B)%L_t(|UhS8=4uL@sM$w@Wx5v=XsCWfYh)SuWRcO2rg@y+p zh<6&_2FYZMe_WP?%t=lnyL0*SCyGs_-hhaza0xdT!|$rB`wCcGhsQhCWc^3M!n6{C zyN4Os_c9n(fb+{>xlFSHOK_*$Ne^%l>g8S)6lRqnNzPdBRDZcoGRJqTps1xZCdzuZ z^3Jf!cdMYN!x|>+yr&F&)B&3_X6M7}`CZ5Z8PE>}YS8&#^omV3XGAdq#e!mep;&kz z3lC)Bfh;_bg$J_mKo%az!UI|SMW8lo2+!W|JdSCYd7a;v`){DaVgL$i$ut=%OjTDN2Rgd$^r#!#o^`Is9pF7jz^4C(&wqHH6=MV$sc8P9JG9Wy6$l3q7}i8Azz(Q z-SgJ2S+^_O>r7l-5OL_s-_6}N-cVPyWD!<%{O|4A6ZURQD}^Ah3R3}4* zey~=N+^h|$NJ)2n5;|&TrIg%NmKzpY7(Fk#tfDm|@2^b{TuWMNrl<=GL*@qrbw_7R zn!mNE$QtU?6dvqoQeRG(eUumVMP=8?`yXs|T)KPgCA2LS-*Y2$sP2Lwt*g5F!oCkn zGrwzD5kIGK8b3XyCQR5_`{|-bJHGsFXY|wKv3uYD%a*{-m8Vj7Oc>kc+x2*d%YJ)W z(7|;z!G9W)GM`eElLou9pYwp=+eL$~T#MeRBN zuaS!jTxW7#Jm3X(99l2BMz7+mo*G%T%E+Aobz7z_?Rn=&>&@;3-qkN7 zkKJxNnbg=AV=cVZ_CRsRHf-GD)~QNcWGu2x3*El-aEq<61!-yMxVW!q^_5|;^7EYI zUO_>nT^#DuMMoQU+RZ)Re$ny5yYQlI$GWp&Pe9)l)1beyG;=V*V&dYYMNe^^CM#$> z2$IJ-tvHcSF|eL8(q;wcX~PK)Op^*urdWe&tV$}6PF`rE(ihIv5exGP8Oe#A$9{l$S=?Ek!nhN+_nxOhkVOlIZid7TF5i>5v4EDxgfj)DBkV4_Goutzplc72Sr5HyK- z9t~o>Sb|cB6sP!zNH3EjdR$^a2%MDh3B3&0lhS@rYO|fe%>>0l0dOu2a6|&VUL+KX z5GjR95D{NWAh?0V5u7g*iU=u6i1dPf5GghqbR}NUKPncA1W*E@fg(r|ilBM{iiju! zh)XYvK`60QATgjs42t4zD3ZVuEjAMl%1N7WBgM0tjcx@?I2Nx}D>wo!`bMHHz!?K@ z0DFKolNN{ljY>zGsB{Kr`Q%H4F)@6Jj2|P75%6W6#NCJ)l+6x$kwxXBT%kw976t?9 z0BUizQvrY*7G#4dZ4}N}Y&wgjK*3=lVAiuwtpOW~#2H+LGZX+t1!4^4V|>1jFT=!q zOdRtIRDhxV>@6g1DEVL3?Dm1>o}wqycCdblTjbeO=~SWT>A7yEhXIySD{~6P^_8 zcrit~;{;e96_JOVjTD$4y$$vPJlDa5y|=HQrsQAca9MZP<8 z?Ciktw~k~7+Ii$q_=#d zTvTvW>=Ozt|7NsnMc$0b*EEwJ1^UeAZZxj1yqSOg8T!%ndi7~ZkvAu`{E%u{OxlEu z-yG*3j?yNTAAY%!J95Lwh{@m0D>?eG=je{b7vh{VUabnJ-^+(u!aiK)gYQ{Tz9Qlu zu^U#FM7U1Zc{Rq$XAO^!fZ)K(1)1qRn@>v%*I(dj19!_4HW18-oSkJl_r#*AvscUnnLZzEygl36INn>@BYm^-iO+vFty;Bxlg|B#Vb?YtfBvsk z=k&VQyZ&*pCWY73<@iN3wOCmmc4eQu?4^uv{6u~^F|Kp2o|9tgJ2>JWd-%W9eO{R- zaAHo;ZQ3s|pTF-Ym%laP&5^>IbDx_{e3k2Ea&{bSh+JHMqzmvv4FO#oOXnoj@# 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 index 7dd63c787850e91dcf06261f3022b197b13f2514..0af0f86e50f9d9572b9f2dd7b4391a6e93bc1eae 100644 GIT binary patch literal 4409 zcmeHLdr%X19$&C0@{rS0ij}i&7pe8iX0v(kniMcW2oebpA5_n>*+;UKyf-B3VHJ<6 zZRNzP9;0+xTfp<|%c+l|pnzv>#}`Li&SLAemJz+H0_{}sX!U-Z@N%v*H_TlBBbj}D zAD{2{`}uvpzsY8+d2!a{n3*vU1Wh((8w$X6hImYx2+m&ybp7CRYOQ6tP(TG>x7Wq- zB`hqgakDTRbc%&Jl;~7_Hpf!B3pDf#VlyOz2;;q z4Ocz%(UL_^rbM>a)>Rtb*xQqvUwY(foBh`2!fZQ^tk{3LXLcDmIaOfpT5IzXcNN*M z-upNGa%yk2z3V`dQhk+)Y{)q3I^BL~)ya2DJkNJVZ!&Zrboo!;?szGnsoSJ=a$In9<{zzA`rcUh2|W zD{K6Icfvz0v!?`FjDO3_X~gCo+S1qhby-c|;#W-r(B6FNFP|m+!g5|#&{ti3{;d}_ zF6(dGoRQl+7cb1KO_cY(`Odn3)*pMZH?`+P+JR?2+7s8i^{@H$Ne}l;?E9v^&Ua;Q z{J|ZyQ(m2xH&e*Cn)UWs$w`ldOzl0ly~=og+U6~%tx;!Zoy&PXN2~w!Qp>h)E8aXC z(~Vwuw(f(c?{r~t*ADMg{GH#1RHn??{`*OfC|}OsSTX75%z2L&2#Av(v%~;=_qW8{8L-(4YD;KZt@iw=iZO5-&c*|e;aTKh7 z@97f}@$nn`5cZvQjmP)-ocC`Zx^`!R=YqF>$A^hGLEn|~pud)za!K0dkWh@v%1VL` zH)uQv(xwI76up`iU@L3mojRoF_(=rj86C1rX_A`Ude+Woul2HpYZqJSwX11@LDHUz z(FREX;9vy`4mwJlJ~F67LbxQj7sVI?hfIXkI%K)Y4C`H97FI|U5-FM)B~r}cz(#xcgv?R^GMLa$ zdiX40OtAvi=kj}LHnWs<3dy4(7<$;>?e~_1%3)}XEnywN)CZ#C4}{Dzn#{ujqi0^EmjAFv*(J!A~5OeWIcqWxleMuQF!LeE|Xhv zR4tXOQ3at?qJ&J&p}3l$txDEPC^h&fh&(S3x{@jxos|g104Q9gl3P`B0;QD-4pq=9 z4Qgdr9A$A%N)s}vQfXyEPz+5jba@>VSWezS*;vf&w1pHR;bex{s6%8D>4?N!LJ1sj z05iZl8CSqJqO$M~wosr%K5?~NrNT8bl}e??r35izw3PMwKrf1@xKtw7gf!y9kf0nu zEhTm;00_xJHKg9lQi98Cak)x#h?o>CdJd~iV4xUEpbV720#K<;NlI}N$1ONPD%GSy z^`ulrN=Mnd7@k}6zpTaafwkd9&*ps~{+f^|JX3|NC;SwCEa5}L1jC`RASpUrf{!X? z!yE&wu!^=*P8$pMkHLl=lJh^&3>r$Il&d*4Dr2lHs!$SYl+ti4$}yapV>wPvE5lU{ zqx)Q(5TLwlh7IrtxB?9t;tGCZaH-~nSR1wv*jaHM0A;8YM@LbHV1vbC;*K#?trq() zKC~f&QCke~3(LUP1$IJgcq<&_3&j38KZEP=bB2K7@gQU3cbu+qy2ix7n2g7}Yn-kz zF)$|M@$UM+(G@fDGQ~QjJM?6RnG~4A6b?`&!e!KLSa#JG;mSL9x@s zBLdo8BmOH8B^XVaQ8yxDrxKD&*-<Q9bI0IRIZm&+yp3HLvXgb z)&u($vwmo%UyDK_kcjPv?`+x_^QToW{z!cDE8BbOrq3VNzOdU=wXjchu}qbs?OE}P zdG`iQQer~`Q&|@g+skc@>pnYn zzwX2)S^u&0rtA5#`hP4kM_VFyrl<7Y$eiEba?3L<2QJMmd&1OgS+UE1E*k4y_I^an XGwFN2?|Gvb)C(Ci7aQJQP+a~Wf`&@K delta 216 zcmdm~^o4PPO8st67srr_xT{kgxeht-xZdXGVBOmyoquhqxgftv*Mjmc$270!lfUrp z_;j#+;ZOb8Gzlxi&8weB7G3=5|Krf+=ejeuw(lt661%#`#`=87J*)MWukNwR+c72n zZQlDl0Lb6@@}9n(MEKH;HNloX&&*v|W2dNomR{7PcWTm4-iSbk3&)un?8F$pY-Cu_ z&&p7%!|)=R(LtV@;a3Ez)PmF7-!@;Kz58A4hPRV%&i<3~PgUM`eXzmiZ!%LDfWXt$ K&t;ucLK6V|3StQW 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 index 4f4d006167bc9b5a5b25d2e3952784974fe7fe82..b0dcf19d7ca1c2e7a6ae0e09809634909cab8909 100644 GIT binary patch literal 4426 zcmeHLdr%X19uJ3zB3eBW0-kjZwALP*ePk1om5{@PLOcQyQbn&f$G$=q$%AAeLC+%I z#p<24)joz+ZanXNFxJP^mb>CJ(X(O!LF-Y^x2MIsjv~~tcEpnVZFtXh=7yQ;e{5#6 zyWhv>_x*l;-|u&_*=Wwoo*I)BBauj^8gmQ<;3^f*NfW{MO|SM_a5=TgQX~{mUdZKk zTKO^#5~^Gr#QAuuMB=+_H(!~05{-S@7Po1-ZYz0vr#VGc{A+o`FO&gehVH;&GVe<7 zqujqnJa1YN|H1x_Slj2H&hc~EH{Ltcb+2{D`Skof0qNvJzLm=3x=ta<_f`F8r<=Ow z?fa;mczVBigZAtt+r>A~QYz)%kNlaBOTN5Z)|f$E`#Sbv&TlSuHdH@}`eJq5)9l)` zd1s4fJd9!u#tTcP*G{-ANxK+TknO6y1%rD|7Nra!*>&-^JelQ)7 zMBSP#+MHA7IDdZOu0PG1v2cT$tzTE1FsnTE<Ls`?meH%-q0ytT2CPf}(rh!PQ^wKK%Rc)Cb3PAN=aFDM;EsNJLPS^irspa*r z{rj3@?!xCvcYV6z@f{?#v*8`$3;uQ4=I2u0{OzPf<=abY{FCk{EqJ~_c=loU8|uE4 zM%MjKu<66KFIsXo&wcvLt8E>rx%rL8ptSuv`pR79XT=G&4tsC!rN3;Ozc!Tk$%V^( zrIEG0DaWpNoXidcRIc)C9e1=h-O_Tb0~8N{<%*)pXGHM#Vhjn7%-<_cHkS(sHT84WAb zWyGZWNC05x1Pb!m%N!okrc1EL2(4fVPFA!svH94gB_k^5uzW% zzY0}?SQ+F2oJWip_L2II54Or{}thi8BVzz5=^TnHvd5xX53>ERKwDgnqq zK;P@(v4A#33OJ9m!p(45m7GIJ9tpuRL;kJ`cUd?cmO;2O&JIjHU{!3?lG#R+dB{Vg zpoF)(!d`&vQI-O49VTm3Y@#Nd&d5N3`w;FZ>%rW^#=y#CA`MQaLJZGn(8|R1N!H2m zEE&Eie<=`oNhY>wv)G0B^=^%l!O%`;bf-SsFmSzbXa08qXa8( z06oAvSf|%Btg`TSu27&vKCv`~N`<9q2%J!ZLp5x)lyiGPEsCfZDp#n(8gXMtkPe`h z5-Sw|gykR`Qt##{!RfX*on=~?7!)LW4yjF`p;$_w43xkDP!v~^C`MwK1=Em9oW${; zqBx0;uy?Y&wd#Lai|qrY_iuU*?*Z#qg+={6Rmhe1KlMMB@!@8Ipm1A|6w{xAhpOb* zaGU_EU&YucM+pb!$3Vdj%K7gp1~!dAaY~g2s|gH;35KR&wNin@RvP1Q6{ln=H9Z>L zIXUK=Ow1E35>F?a-JGGriGM4T9d*`_1^#YcMB zV8n<4e*H2qy1*nvhDPB4U*gdD0gr)w_yJb{(Bq4YiQjR$#_1Xp17k8CudZ>r#>Bvw zjK{0%|3+8L@XHkE0Kb5|;;Ygv{3LkInn?dV+aL*vpFbYk^A?aycI7PhNF-Bcif4r6 z{W|eqfoQ>K%8LGX#FQCCeAb=dVIX>BG-O(G&M++We>X`-|!Q7V<@ zbzPO72?V-tT)kF}E!w(ei~kSh_$i%=s8*nLR~xZ+YierF1Ko_s$mE3t+sE`oJc?+A zi-YqgKYDWWn_zv^pW`>JKuaSw`mcpTv9Tu-0r0#p$*P;W$WzXuU#>kJUA^#y3hegW d_3`VeC`k;TmV1TtF9QTfj9Gbx1B;5+{Rf9#TJHb= delta 232 zcmX@5)WS4DrT(<1i(^Pd+|{X$T!#!qSYJoE^egOmu}&p3?^5q}f%QtEU$*^g(0n>I zg)7$b!$K2d`(0U=*Qm4+IR{@()$l_ZrqcOMcJxRp583c2 zw)QV;o>$H(PQPoNC~jjqBR=7|dvw97*o1S=-_yz>z0SXEJ+@Rc@#`t43$9BwVH6h^ z!#53v8;cnd`k5MR@o~PFS)^qi?%7qo=-bH{>#P3H;yG$Z;=l-q%Cd%@?jC4m4tg4f!vl%n zv87QHcU2&YizaIjq!LM7yg(s%aEMtF47pvb9Ck=09epr>EcX z``-J#_r98Mqb?%U)n&X31VOHvu;3_g$Artt0emlh!-)y(ZjNZS`)8pL@3i`90gmIoJzKeWwa+_n5{#kWv|C*-ashX6Ox8g^+b^FFn ziZ4h_wRn!Gn&NJ&(p(Ige@yK2<%Z7co2v?JjW>>WK}8G6gO@!=#?(uqI(P1@KeTD> z;(s@-4_a_)CLSGGJWkqCQkHe^z(4-n;rr8xz|Y@5n?Jf^csPrh9K)=k&JxU%vfy^Of%9!*_Oh zAHUvG9eV1NpCzTW<(BFP&e3ai^K>=m9f%g`pzDoy^SM(^XjA3whC``aE;+*LFXB!N zb8}nUi7;hZ$0|RynqEHn^7hl=DGl6#?RDcGg1$>*L4PgLE+8ngQAE;aJtImtT0rAL zP(Wb1g``$6JgjFDS(6I+sq!QOv$P6XEZ1UMi<(Jd!!kK0Ix`}M%3MJyX(VutOF%jS z0E`Sz!s*6jla)wUA$D8>{1(Jw1h$*-D^$o5tqxY3IR=)AWFia=NoUg}$Q&0qfTImW zRPelB2=Jsrl6c-ih{ZOWO=Odb%v_=vS1OfaOd^&@P+);tGfX_0j+(5~1c)AtV8%*u ztc7RICRo5E_2yJwg&;r=zlzUj(Q5nPP1ar(03YIX(jvx1nAm6(5A?9|A!z`lH=y72 zu*QHf6-O~vb1FwMA!&?>pEeMJruzIXsa&!>9hwp|$&3-0TEVLLYfFY|w7NbIfr3QV zXt8?%vR||0SwlZruf-;4?CA^)1i1I%zGnR@ce^pL(rSrdGnFcYrwLXe!ukYlrdXP= z|5PxHoRUiQD9PX$D#Hvks;BiNDwk3?BgOm_dPXt;N@KF}q={k#C;%>E0ggW10vlj&rddPA|FRaw2M*{ddKha3>u11-m=nYy%G>Q{r|OMGURCZ9wbk=#;v1&V z*!t{hYvGy`t-H`PXSJ^UV3{r36|08co18iAhd51*x%CO+|3T~BOn5mGy0@;)^!WMq z__|V$U8ao8Ya=%7=9}diP{JpL8Q7NA$Gq!aonNez(=UZ}8$R1{uKnc4TdyRoyC``I zUAXKNAKToihIF6*vI_EKnb z_r1ps4{xnq`GLdIh;RJYJPtjw`eLK(#;8x^^*7E;IVUGvoU@??M0Vqk)oowp6=XwB z|MfG{^|{3VZq^I0La6P-@a-4gS?Yl0mnoqDw`bpl=f;0kb-k_R;P?Z7?+{6Ehi+4@ mog8?q@Ndi7N|1}i_s5jFSdUz~q0a-QgES!#!KHH(a{dFAsG&>% literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FjjlIIEGZjy`8z&i#brFMflI_ zBhNQ}W6h~qub`o_w&R-9nl-v#=H{K-AdCelt0@e(zDvEz1k*-s<`-uSa|KmTmqUShNOFh4SuZdM)Pd^>-`lkJT_tG_$_pIufQN8zk(64gcPbbX7zEwYY tt?}3RwYSpWwKh|0=STL-{8Z0j*c`33d+PQX+`!mi@O1TaS?83{1OSAx!r%Y^ 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 index 68ef841a896701d2b42ad6457782b323f4daa4e7..4a271f8c201138ccd919edf4deb4dbd8b06e2828 100644 GIT binary patch literal 4608 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 h*DxH*pJH<3T=4Zvh`dqOeHep?L{ezX6CB1_S^A literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U|Qno;uum9_jbAR$&%a z!&$BNDjIeUogM#Xy^HC3C(^7Z5}Wm9{w=w5Hm92xs`BUd?0nh8+*opMW!|Q_H*eoI zTsr0OEOFEL?0vbLe*LUG%R6ts!IjhT>nnplZ=M`(di}@u?qzX5ydEo7?L0HjHAufI z;Pc*(413r7d#3eU%zf{Z*TvNzM0s>`_f{O15%%2@?`g``B z%s+K`_paMKt2H?l^~X8+#)-wp?rlD1sl2-V*7JKgSudv_n<12!`_R&G{tnabsER8R z7Z2^#wNZbr_gyWx>A&slJJ~sQIdhCZPn$hCbINVYl{;&*-q)S&KW1sV{JjOY*mt&5 zzYf*U;eXyD7cG@u-~L?f@S}SNyr!j}S9siLCCPu~WW@r%W6Y&Saw{f(beP-2{_07L z?S-YWK;>SCYenbH=IQ?0Xz=CQ-^exmEep55JD*gmz_YisUhFk<;)}JvH%G{GIOpG; zfAp7wMAhqmI@j0_U5NgkzR^yg?cOf?;jJ~!tK$60DR-97EuWcuuh>ZS|IdrDPZ-}@ zc2D}B@ILaH@q6>xoBky=_V;f5Jnf7)ch1VE{@%}4YhJ1hFFx{{hpqWw!iJbSMz@$> VO>dU_WB`*bgQu&X%Q~loCIFf%b>{#8 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 index 611fe6c98dc83724ec8d6400d9f9ba5065a293bd..903a16f754735583f8d8070ebb6b1d793eb88e01 100644 GIT binary patch literal 4815 zcmeHKX;c$g77i$js3@ZdN~P?C+LAOROZ2O1Cs zwQZdSw{C$zW-S6G| z-TU6j%Z{8a8tydCi9(?a7l#X@!9Cn^IogBYxot;9;C41eI-iV2jZ~dps~}W3l}y&* zRNO=;C=^qZIx^PzTk5dR2crXQlY=)m*OqTiT01^9vv%)x#Srha=e@+858lqqbDknu zIA-6Hc>C)O6`qGbiCgQ_de26{sk~9|1J7JDHK822J24R%PUB!d%di@sQlmNX^{qS? zQU0B%nqx#ueK>FM7xqx~#Rhf7hC{!;a$dI?S$zN9?a&|GRN84TMca&?7nZrKvoG4Y zsmRk49@1!&)PhS>wxXFCZ*JA6Kezks!GZ||QN~vkicJO)8X74M4Sk;v$f9u7MnU+u zk)tyr=Ir^>)g>T{hkdtAJ=R_2_vD-@zuK1<6a$URclT$(amR=|r)}DPfs@P*phkeK6;ys2t-p+?N6^-0E zDqlM|k`=keZoRbcup=JSWs{wfXM zF!9ZZ)isU2vmz?QX7}2+vRf17!OPs@8r7YhH@_+HPU{-`@4BXU%Li@i^g4N`@r&9Z9)U^RPf)RSVS~zkhXq;)Z$$YUt60r)->^(>rMR z!4)Ttml!l%FUs!!J}BX;zIfAlw>HptNd#!H`I1?PT&t#|m{x|M;cpEu7Iq z0p0|(IFi&M42IEYq#N0EtzOAs^7(uQ%wn)u5I{hNWDSX$AdO*?g`%57h#Ta3LPru> z4b{Sl%Cw23fJOu3)c5hJbrMN0y~fa^0?>nDLUjx#9cHN2jJ_TQGAs#@^aS*W9tJ5` zr;KRapiR`v@vtOZLr&^TfysOQb%}bFH62XOz*V>!Kn-A4X1^&#Vo7ALheZM7)@b-JBqh}N91^wY$>g&A{h3^zKa0s`!Cck{Pz-erj*?ovRI619XqKR;7SG;c30P1VN}@uP!~rSH@wZ-c*2P4nT9*Za%DYoA zph-ApjT3Nn56Rg@M^D4Pw-bNR3|yF{P$)1S#AU;v8CYC7#7AW~gz-?8LWcVJ z`{RE7*$r9+X+-sSh!W@sv;qxk)rvZ`r&K=u@y0mZQU@Rz1T&#NlF=AF$ucZE#`|mo z8ULk6pcT+(ivfP!Hn4SposiMH753<5*>wKIPfs2G#2Enfz$71~?|@tba($En9|a!h zt^v6|N`a384|Lc6O)jSohbdeG{s9@mQK_s1o(PUv_Oic=gp@AJch||1&A>857rwwi zp$r{mxojw36uJYW11Xk-IXto%>cX}inYtEOY?H;p5UHuD?T6Fazo708?N1C;ci*3C z#10N!X;bPZeUt6kq~Bz!sxzCb&1b7`nlJn-wky5bT~hg|*je9p&nCMlJG=H!CBmaE zFY_$^d`01`+@RQsK^3b{du(mK^I-au&J%Fekj%mkmCx99k8F392)*nndn@hCtxFEB zD4DxY?R<3l*v6`V&U%+t`~u23pB=R0>(}?|8_(^T_gjk5J#j`R^WmeF(?8ET7b9%B zcef-my5r&M0N1?I@>^=g^J#I*_vYW6uz3X~ck!u)TdP|aYs+JTMjTlpuMJ*WeduLg z^SEpB>b8&@0g=1d3p(?IXTPZ5-u!*^)6<&6xpR>b4Ya|cH&EDCj|26#Y2<-rGlZJg zDT#3oJ3cFDc=~Kt+SxLvOSb&SoxaJHPmlaknwqMTHSJ*1stfPReah;|?Xi^WH^y9= z|6OOuJxWy`k8&s~cE5c+OMksA$GGbD+RKI8?ec@eX~A_T<_ETV&ojP!)s~1TBb;*MZ4Q3b9KfH}R5Nn;v6Vk>g$UOPj>4qF zjBu}@L-u00v@brTdS?xF|)@87_vNjsIr1rP*=UZSiZ9h%~)>d^L*9AUl(;; z4We%G{xNpkNzo}Awe(^urE>Rzz`X_QmGO*~w~IV9$xG5le06t06A@GB5gw`FVo0|^Qb A&Hw-a literal 785 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V7lSy;uum9_jZnNws4?GTXf(N ztsVT4X;WQ|W^&er9htvGI(!lLMXeQ)KR@Q%GP6BdSaEyi^9bX6?B|reJgc2wJ!?wN zti_A9({{$(d%5eK>lwXguh-w)n)|zEYt-FmKmWHy9P-q8c(!c!-;c{Xi`PH<{8QJi z{?d`9`2~VYJD10%pHrE6Hcfrwg8UeV%wNxS#JXpnnJx2iTh-aq@g+%~`ZLWnA2pR% zzC7*s-+k`R|01)`KFf^x((@=eeQ#X8(!U+^U)=cgJXw9t{o|{@bG}b5l3|sP$nm*s z(jO_tU45+h*q82C?+@*}=<-8+TIAt%wl?X$IxmHHy9qWf*D-9bt*$sXr=s;<^8JKI zYqushT0TE{?Eb=bn{>ZBFLkZi4;NJbI&YzP=k4!DAOBYTnfv_B&%b?(6AD%)oM1n= z@pAd4Wd8H-+Mlx>eh}ms8?bPJ-im+#@eqv_+*%@6SVg&BHF2?)I<_|LT2ORwtM;to zh2L5K=(9I}ZAy8u_P23_zDL`=UG}3~l+ajiwC8!kt!;l#d~lw>?)ABf^9N0QKXUW6NRIjB* bv2{%4N7df3Yb^QzOzI4tu6{1-oD!M Date: Sat, 11 Jan 2025 20:23:37 +0200 Subject: [PATCH 4/5] shift state update --- .../inputmethod/latin/RichInputConnection.java | 2 +- .../inputmethod/latin/inputlogic/InputLogic.java | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) 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 9bf8a87416..a1bbac28ba 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java @@ -328,7 +328,7 @@ public void pasteClipboard() { CharSequence pasteData = clipboard.getPrimaryClip().getItemAt(0).getText(); if (pasteData != null && pasteData.length() > 0) { - commitText(pasteData, 1); + mLatinIME.onTextInput(pasteData.toString()); } } } 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 cf0a3585a0..4e58a25766 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 @@ -198,7 +198,7 @@ private void handleFunctionalEvent(final Event event, final InputTransaction inp onSettingsKeyPressed(); break; case Constants.CODE_PASTE: - onPasteKeyPressed(); + mConnection.pasteClipboard(); break; case Constants.CODE_ACTION_NEXT: performEditorAction(EditorInfo.IME_ACTION_NEXT); @@ -472,10 +472,6 @@ private void onSettingsKeyPressed() { mLatinIME.launchSettings(); } - private void onPasteKeyPressed() { - mConnection.pasteClipboard(); - } - /** * Sends a DOWN key event followed by an UP key event to the editor. * From 0233872dce028c7ecd7ab0929d7efadafa892d9c Mon Sep 17 00:00:00 2001 From: Raimondas Rimkus <3480123+rkkr@users.noreply.github.com> Date: Sat, 25 Jan 2025 07:24:57 +0200 Subject: [PATCH 5/5] clean --- .../simplekeyboard/inputmethod/latin/RichInputConnection.java | 3 --- 1 file changed, 3 deletions(-) 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 a1bbac28ba..b98a253660 100644 --- a/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java +++ b/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputConnection.java @@ -16,8 +16,6 @@ package rkr.simplekeyboard.inputmethod.latin; -import static android.content.ClipDescription.MIMETYPE_TEXT_PLAIN; - import android.annotation.TargetApi; import android.content.ClipboardManager; import android.content.Context; @@ -325,7 +323,6 @@ 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());