From ee3055afdc78f02a1d2b07b66d29fe8dceb94fc0 Mon Sep 17 00:00:00 2001 From: Poussinou Date: Sun, 16 Sep 2018 18:20:23 +0200 Subject: [PATCH 01/51] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 77edeab..da61e3c 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,10 @@ ADBKeyBoard Android Virtual Keyboard Input via ADB +[Get it on F-Droid](https://f-droid.org/packages/com.android.adbkeyboard/) + ADBKeyBoard is a virtual keyboard that receives commands from system broadcast intents, which you can send text input using adb. There is a shell command 'input', which can help you send text input to the Android system. From 047ea2f199bc9bd701e92da5f91889159726d787 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Mon, 6 Jan 2020 17:59:22 +0800 Subject: [PATCH 02/51] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 782394c..e7663f9 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,13 @@ adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?' * This may not work for Oreo/P, am/adb command seems not accept utf-8 text string anymore 1.1 Sending text input (base64) if (1) is not working. +* You can use the latest base64 input type (together with Mac OS X/Linux's base64 command): adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo '你好嗎? Hello?' | base64` -* You can use the latest base64 input type (together with Mac OS X/Linux's base64 command): +* For Windows, please try this script (provided by ssddi456): +https://gist.github.com/ssddi456/889d5e8a2571a33e8fcd0ff6f1288291 + + 2. Sending keyevent code (67 = KEYCODE_DEL) adb shell am broadcast -a ADB_INPUT_CODE --ei code 67 From 3e88fdb92a11318143e3526384b26988fd258136 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Mon, 6 Jan 2020 18:02:26 +0800 Subject: [PATCH 03/51] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e7663f9..c637f6e 100644 --- a/README.md +++ b/README.md @@ -48,14 +48,14 @@ adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?' * This may not work for Oreo/P, am/adb command seems not accept utf-8 text string anymore 1.1 Sending text input (base64) if (1) is not working. -* You can use the latest base64 input type (together with Mac OS X/Linux's base64 command): + +* For Mac/Linux, you can use the latest base64 input type with base64 command line tool: adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo '你好嗎? Hello?' | base64` * For Windows, please try this script (provided by ssddi456): https://gist.github.com/ssddi456/889d5e8a2571a33e8fcd0ff6f1288291 - 2. Sending keyevent code (67 = KEYCODE_DEL) adb shell am broadcast -a ADB_INPUT_CODE --ei code 67 From 520554082090fce7d756ba777cddf435b2f064f2 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Sat, 18 Apr 2020 11:06:53 +0200 Subject: [PATCH 04/51] Add new method to send Meta key state Allows the input of Ctrl+Space or Alt+x --- ADBKeyboard.apk | Bin 15642 -> 17013 bytes README.md | 5 +++++ .../java/com/android/adbkeyboard/AdbIME.java | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk index 2483dd02fb08bf0f2a5119695f91de0018244988..601745186b862de83a3e08a5a155e6f961798a90 100644 GIT binary patch delta 7082 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¨e}?H zfMQ}ZzXwFvbC%R`e?7W*EJb78<=^<`78Q53BfTqm%j?h3-pl-j)S~9S&)M5m^kgoS z$*SxbX#Fp<2+)$iQ>$I^e_Bh0q=wP636$H&!v%p(X%XRKQ& z0bVypfUl2)_-Yhsw4ZhtRC^e@<7(c!Gl#Iml#K0a=A<*jL|pk)MDlUv?ba_0)~Urz zk~<#EQJ2l=GbE^8MVJXqueC2%*0+&^oacat*E34Mg0MJpl1dS4s6vr%sR|YKU7+IO zSF|cJi<*VfR&j^9zP`^;1Ip|n$c8AIuWEx=o;|4@y`1(LpY%BOv{BEwgf&cO;w>BJ zQ9wD$jZFTiRc^l*jPq1`Aolgi)+;~+o|PZF@DU-Xcwn?)GCZX&`@6DI(b5-Bh*H&)xWjV>(ovF|(P`Oz%(_J)7<(EHqt)~T91I!<_a^fWx>IUVt z9Au)T*LKwyE$x`#mE|8wgm4=fplgZQqMZgy)bq2SJ3xXEG2jVPL|4Ds6 zmf*h|?LRIH7BH^_Bh^0+Jswl7_*kFu|6}lP$DIl6A;Ez5k7F`$hJ-ZLf91aZHMW5R zd?+D`%s~m3p=JRWNaBMnB`Hv<$&kR^6wHq{2eKDEct}zg`H&h+Bc+FYgbVhOl0`Pd U2iHF;d;;*f6x|bQ*}qf%8(F^}zW@LL delta 5831 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 Switch to ADBKeyBoard from adb (by [robertio](https://github.com/robertio)) : diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index e7c6f6a..d1c183f 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -15,6 +15,7 @@ public class AdbIME extends InputMethodService { private String IME_MESSAGE = "ADB_INPUT_TEXT"; private String IME_CHARS = "ADB_INPUT_CHARS"; private String IME_KEYCODE = "ADB_INPUT_CODE"; + private String IME_META_KEYCODE = "ADB_INPUT_MCODE"; private String IME_EDITORCODE = "ADB_EDITOR_CODE"; private String IME_MESSAGE_B64 = "ADB_INPUT_B64"; private BroadcastReceiver mReceiver = null; @@ -27,6 +28,7 @@ public View onCreateInputView() { IntentFilter filter = new IntentFilter(IME_MESSAGE); filter.addAction(IME_CHARS); filter.addAction(IME_KEYCODE); + filter.addAction(IME_META_KEYCODE); filter.addAction(IME_EDITORCODE); filter.addAction(IME_MESSAGE_B64); mReceiver = new AdbReceiver(); @@ -91,6 +93,20 @@ public void onReceive(Context context, Intent intent) { } } + if (intent.getAction().equals(IME_META_KEYCODE)) { + int[] mcodes = intent.getIntArrayExtra("mcode"); + if (mcodes != null) { + int i; + InputConnection ic = getCurrentInputConnection(); + for (i = 0; i < mcodes.length - 1; i = i + 2) { + if (ic != null) { + KeyEvent ke = new KeyEvent(-1, -1, KeyEvent.ACTION_DOWN, mcodes[i+1], -1, mcodes[i]); + ic.sendKeyEvent(ke); + } + } + } + } + if (intent.getAction().equals(IME_EDITORCODE)) { int code = intent.getIntExtra("code", -1); if (code != -1) { From c08c30f68cf347db1c9f2872f474a80b9fa79afc Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Sat, 30 May 2020 18:17:32 +0800 Subject: [PATCH 05/51] Update sunshinewithmoonlight script. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e9a91df..bbd1e7e 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,12 @@ adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo '你好嗎? Hello?' | bas * For Windows, please try this script (provided by ssddi456): https://gist.github.com/ssddi456/889d5e8a2571a33e8fcd0ff6f1288291 +* Sample python script to send b64 codes (provided by sunshinewithmoonlight): +import os +import base64 +chars = '的广告' +charsb64 = str(base64.b64encode(chars.encode('utf-8')))[1:] +os.system("adb shell am broadcast -a ADB_INPUT_B64 --es msg %s" %charsb64) 2. Sending keyevent code (67 = KEYCODE_DEL) adb shell am broadcast -a ADB_INPUT_CODE --ei code 67 From df7e199e1d92432ff919df5fd57ba722f64bf269 Mon Sep 17 00:00:00 2001 From: erict Date: Sat, 20 Jun 2020 11:55:18 +0800 Subject: [PATCH 06/51] adding adb command to clear all text --- keyboardservice/build.gradle | 8 ++++---- .../main/java/com/android/adbkeyboard/AdbIME.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/keyboardservice/build.gradle b/keyboardservice/build.gradle index be3be34..95de08f 100644 --- a/keyboardservice/build.gradle +++ b/keyboardservice/build.gradle @@ -1,15 +1,15 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 + compileSdkVersion 29 buildToolsVersion '28.0.3' defaultConfig { applicationId 'com.android.adbkeyboard' minSdkVersion 15 - targetSdkVersion 22 - versionCode 1 - versionName "1.0" + targetSdkVersion 29 + versionCode 2 + versionName "2.0" } } diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index d1c183f..9eb6d02 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -9,6 +9,7 @@ import android.util.Log; import android.view.KeyEvent; import android.view.View; +import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; public class AdbIME extends InputMethodService { @@ -18,6 +19,7 @@ public class AdbIME extends InputMethodService { private String IME_META_KEYCODE = "ADB_INPUT_MCODE"; private String IME_EDITORCODE = "ADB_EDITOR_CODE"; private String IME_MESSAGE_B64 = "ADB_INPUT_B64"; + private String IME_CLEAR_TEXT = "ADB_CLEAR_TEXT"; private BroadcastReceiver mReceiver = null; @Override @@ -31,6 +33,7 @@ public View onCreateInputView() { filter.addAction(IME_META_KEYCODE); filter.addAction(IME_EDITORCODE); filter.addAction(IME_MESSAGE_B64); + filter.addAction(IME_CLEAR_TEXT); mReceiver = new AdbReceiver(); registerReceiver(mReceiver, filter); } @@ -115,6 +118,17 @@ public void onReceive(Context context, Intent intent) { ic.performEditorAction(code); } } + + if (intent.getAction().equals(IME_CLEAR_TEXT)) { + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + //REF: stackoverflow/33082004 author: Maxime Epain + CharSequence curPos = ic.getExtractedText(new ExtractedTextRequest(), 0).text; + CharSequence beforePos = ic.getTextBeforeCursor(curPos.length(), 0); + CharSequence afterPos = ic.getTextAfterCursor(curPos.length(), 0); + ic.deleteSurroundingText(beforePos.length(), afterPos.length()); + } + } } } } From e50bb40281d0d5230fa441541c2f0d261d71b3c4 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Sat, 20 Jun 2020 11:59:04 +0800 Subject: [PATCH 07/51] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bbd1e7e..ef137b5 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,6 @@ ADBKeyBoard Android Virtual Keyboard Input via ADB -[Get it on F-Droid](https://f-droid.org/packages/com.android.adbkeyboard/) - ADBKeyBoard is a virtual keyboard that receives commands from system broadcast intents, which you can send text input using adb. There is a shell command 'input', which can help you send text input to the Android system. @@ -80,6 +76,9 @@ adb shell am broadcast -a ADB_INPUT_CHARS --eia chars '128568,32,67,97,116' To send Ctrl+Space adb shell am broadcast -a ADB_INPUT_MCODE --eia mcode '4096,62' +6. CLEAR all text (starting from v2.0) +adb shell am broadcast -a ADB_CLEAR_TEXT + Switch to ADBKeyBoard from adb (by [robertio](https://github.com/robertio)) : From 933eb6949a10f908c500f239b03cb6468d31dc20 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Sat, 20 Jun 2020 12:02:55 +0800 Subject: [PATCH 08/51] delete old apk --- ADBKeyboard.apk | Bin 17013 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ADBKeyboard.apk diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk deleted file mode 100644 index 601745186b862de83a3e08a5a155e6f961798a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17013 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 SfRB?Rf}R3DE=2rb>i+<)-p9WH From 819acf942a4128f283697021c8ecb01d614f01d3 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Sat, 20 Jun 2020 12:04:31 +0800 Subject: [PATCH 09/51] new debug apk --- ADBKeyboard.apk | Bin 0 -> 17426 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ADBKeyboard.apk diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk new file mode 100644 index 0000000000000000000000000000000000000000..122829aec339da26e0bbd29b6dba8a3f50325dfa GIT binary patch literal 17426 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 Date: Sat, 20 Jun 2020 12:11:29 +0800 Subject: [PATCH 10/51] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef137b5..e71f4d5 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?' 1.1 Sending text input (base64) if (1) is not working. * For Mac/Linux, you can use the latest base64 input type with base64 command line tool: -adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo '你好嗎? Hello?' | base64` +adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo -n '你好嗎? Hello?' | base64` * For Windows, please try this script (provided by ssddi456): https://gist.github.com/ssddi456/889d5e8a2571a33e8fcd0ff6f1288291 From 7bddbe5a32673c01c37bb9348f9c0851bee28e05 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sat, 5 Sep 2020 14:16:57 +0800 Subject: [PATCH 11/51] fix gradle build --- build.gradle | 9 ++++++++- gradle/wrapper/gradle-wrapper.properties | 4 ++-- keyboardservice/build.gradle | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index b58cbd1..320d82f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,13 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:4.0.0' + } + + allprojects { + repositories { + google() + jcenter() + } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b3104b8..4e94812 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Oct 14 18:04:03 HKT 2018 +#Sat Sep 05 14:14:30 HKT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/keyboardservice/build.gradle b/keyboardservice/build.gradle index 95de08f..d087325 100644 --- a/keyboardservice/build.gradle +++ b/keyboardservice/build.gradle @@ -14,5 +14,5 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'libs') } From 9a8747388a2c8f96bdc8153531fe52b063b37771 Mon Sep 17 00:00:00 2001 From: king tsaltedfish <60768370+TSaltedfishKing@users.noreply.github.com> Date: Tue, 10 Aug 2021 21:45:37 +0800 Subject: [PATCH 12/51] Create android.yml --- .github/workflows/android.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/android.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..537aaec --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,25 @@ +name: Android CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: set up JDK 11 + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'adopt' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Build with Gradle + run: ./gradlew build From 90db9a5d392d9f6f14ebe0291ae1fe173517baf0 Mon Sep 17 00:00:00 2001 From: king tsaltedfish <60768370+TSaltedfishKing@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:57:04 +0800 Subject: [PATCH 13/51] Update android.yml --- .github/workflows/android.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 537aaec..5157b87 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -23,3 +23,11 @@ jobs: run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build + - name: Change File name + run: | + ls + - uses: actions/upload-artifact@v2 + with: + name: Upload File + path: | + ./Xenobyte1.12.2.jar From 6e36d885bc31bf5f5ef0ac0b2b283610d8332723 Mon Sep 17 00:00:00 2001 From: king tsaltedfish <60768370+TSaltedfishKing@users.noreply.github.com> Date: Thu, 12 Aug 2021 15:02:34 +0800 Subject: [PATCH 14/51] Update android.yml --- .github/workflows/android.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 5157b87..eada951 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -18,16 +18,13 @@ jobs: with: java-version: '11' distribution: 'adopt' - - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build - - name: Change File name - run: | - ls - - uses: actions/upload-artifact@v2 + + - name: Upload All Pack + uses: actions/upload-artifact@v2 with: - name: Upload File - path: | - ./Xenobyte1.12.2.jar + name: ADBKeyBoard + path: app/build/outputs From dfccc11375099948f672ab01f7bfc062a4774685 Mon Sep 17 00:00:00 2001 From: king tsaltedfish <60768370+TSaltedfishKing@users.noreply.github.com> Date: Thu, 12 Aug 2021 15:04:15 +0800 Subject: [PATCH 15/51] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index eada951..944a00f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -27,4 +27,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: ADBKeyBoard - path: app/build/outputs + path: ./ From 42157dbb2765b6579e462868c295ce44e17111d6 Mon Sep 17 00:00:00 2001 From: king tsaltedfish <60768370+TSaltedfishKing@users.noreply.github.com> Date: Thu, 12 Aug 2021 15:08:05 +0800 Subject: [PATCH 16/51] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 944a00f..800e96a 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -27,4 +27,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: ADBKeyBoard - path: ./ + path: ADBKeyboard.apk From 2fe2293c25fd0f446c8f0c32a348c597b3c2a8c7 Mon Sep 17 00:00:00 2001 From: Alex Cohn Date: Tue, 6 Sep 2022 17:24:29 +0300 Subject: [PATCH 17/51] add info about enable and reset from CLI --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e71f4d5..a647b65 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ With one device or emulator connected, use these simple steps to install the key How to Use ---------- - * Enable 'ADBKeyBoard' in the Language&Input Settings. + * Enable 'ADBKeyBoard' in the Language&Input Settings OR from adb. * Set it as Default Keyboard OR Select it as the current input method of certain EditText view. * Sending Broadcast intent via Adb or your Android Services/Apps. @@ -81,6 +81,11 @@ adb shell am broadcast -a ADB_CLEAR_TEXT +Enable ADBKeyBoard from adb : +
+adb shell ime enable com.android.adbkeyboard/.AdbIME
+
+ Switch to ADBKeyBoard from adb (by [robertio](https://github.com/robertio)) :
 adb shell ime set com.android.adbkeyboard/.AdbIME   
@@ -96,6 +101,11 @@ Check your available virtual keyboards:
 adb shell ime list -a  
 
+Reset to default, don't care which keyboard was chosen before switch: +
+adb shell ime reset
+
+ You can try the apk with my debug build: https://github.com/senzhk/ADBKeyBoard/raw/master/ADBKeyboard.apk KeyEvent Code Ref: http://developer.android.com/reference/android/view/KeyEvent.html From f7ab7dc7deb109fdaf0437b34e93ae2147a659e9 Mon Sep 17 00:00:00 2001 From: chien Date: Fri, 16 Sep 2022 22:06:56 +0700 Subject: [PATCH 18/51] fix issues with sending meta key code --- .../java/com/android/adbkeyboard/AdbIME.java | 124 +++++++++++------- 1 file changed, 77 insertions(+), 47 deletions(-) diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index 9eb6d02..0cb13b8 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -7,47 +7,48 @@ import android.inputmethodservice.InputMethodService; import android.util.Base64; import android.util.Log; +import android.view.InputDevice; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; public class AdbIME extends InputMethodService { - private String IME_MESSAGE = "ADB_INPUT_TEXT"; - private String IME_CHARS = "ADB_INPUT_CHARS"; - private String IME_KEYCODE = "ADB_INPUT_CODE"; - private String IME_META_KEYCODE = "ADB_INPUT_MCODE"; - private String IME_EDITORCODE = "ADB_EDITOR_CODE"; - private String IME_MESSAGE_B64 = "ADB_INPUT_B64"; - private String IME_CLEAR_TEXT = "ADB_CLEAR_TEXT"; - private BroadcastReceiver mReceiver = null; - - @Override - public View onCreateInputView() { - View mInputView = getLayoutInflater().inflate(R.layout.view, null); - - if (mReceiver == null) { - IntentFilter filter = new IntentFilter(IME_MESSAGE); - filter.addAction(IME_CHARS); - filter.addAction(IME_KEYCODE); - filter.addAction(IME_META_KEYCODE); - filter.addAction(IME_EDITORCODE); - filter.addAction(IME_MESSAGE_B64); - filter.addAction(IME_CLEAR_TEXT); - mReceiver = new AdbReceiver(); - registerReceiver(mReceiver, filter); - } - - return mInputView; - } - - public void onDestroy() { - if (mReceiver != null) - unregisterReceiver(mReceiver); - super.onDestroy(); - } - - class AdbReceiver extends BroadcastReceiver { + private String IME_MESSAGE = "ADB_INPUT_TEXT"; + private String IME_CHARS = "ADB_INPUT_CHARS"; + private String IME_KEYCODE = "ADB_INPUT_CODE"; + private String IME_META_KEYCODE = "ADB_INPUT_MCODE"; + private String IME_EDITORCODE = "ADB_EDITOR_CODE"; + private String IME_MESSAGE_B64 = "ADB_INPUT_B64"; + private String IME_CLEAR_TEXT = "ADB_CLEAR_TEXT"; + private BroadcastReceiver mReceiver = null; + + @Override + public View onCreateInputView() { + View mInputView = getLayoutInflater().inflate(R.layout.view, null); + + if (mReceiver == null) { + IntentFilter filter = new IntentFilter(IME_MESSAGE); + filter.addAction(IME_CHARS); + filter.addAction(IME_KEYCODE); + filter.addAction(IME_MESSAGE); // IME_META_KEYCODE // Change IME_MESSAGE to get more values. + filter.addAction(IME_EDITORCODE); + filter.addAction(IME_MESSAGE_B64); + filter.addAction(IME_CLEAR_TEXT); + mReceiver = new AdbReceiver(); + registerReceiver(mReceiver, filter); + } + + return mInputView; + } + + public void onDestroy() { + if (mReceiver != null) + unregisterReceiver(mReceiver); + super.onDestroy(); + } + + class AdbReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(IME_MESSAGE)) { @@ -78,40 +79,69 @@ public void onReceive(Context context, Intent intent) { } if (intent.getAction().equals(IME_CHARS)) { - int[] chars = intent.getIntArrayExtra("chars"); - if (chars != null) { + int[] chars = intent.getIntArrayExtra("chars"); + if (chars != null) { String msg = new String(chars, 0, chars.length); InputConnection ic = getCurrentInputConnection(); if (ic != null) ic.commitText(msg, 1); } } - - if (intent.getAction().equals(IME_KEYCODE)) { - int code = intent.getIntExtra("code", -1); + + if (intent.getAction().equals(IME_KEYCODE)) { + int code = intent.getIntExtra("code", -1); if (code != -1) { InputConnection ic = getCurrentInputConnection(); if (ic != null) ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, code)); } } - - if (intent.getAction().equals(IME_META_KEYCODE)) { - int[] mcodes = intent.getIntArrayExtra("mcode"); + + if (intent.getAction().equals(IME_MESSAGE)) { + String msg = intent.getStringExtra("mcode"); // Get message. + String[] mcodes = msg.split(","); // Get mcodes in string. if (mcodes != null) { int i; InputConnection ic = getCurrentInputConnection(); for (i = 0; i < mcodes.length - 1; i = i + 2) { if (ic != null) { - KeyEvent ke = new KeyEvent(-1, -1, KeyEvent.ACTION_DOWN, mcodes[i+1], -1, mcodes[i]); + KeyEvent ke; + if (mcodes[i].contains("|")) { // Check metaState if more than one. + String[] arrCode = mcodes[i].split("\\|"); // Get metaState if more than one. + ke = new KeyEvent( + 0, + 0, + KeyEvent.ACTION_DOWN, // Action code. + Integer.parseInt(mcodes[i+1].toString()), // Key code. + 0, // Repeat. // -1 + Integer.parseInt(arrCode[0].toString()) | Integer.parseInt(arrCode[1].toString()), // Flag + 0, // The device ID that generated the key event. + 0, // Raw device scan code of the event. + KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event. + InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD. + ); + } else { // Only one metaState. + ke = new KeyEvent( + 0, + 0, + KeyEvent.ACTION_DOWN, // Action code. + Integer.parseInt(mcodes[i+1].toString()), // Key code. + 0, // Repeat. + Integer.parseInt(mcodes[i].toString()), // Flag + 0, // The device ID that generated the key event. + 0, // Raw device scan code of the event. + KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event. + InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD. + ); + } ic.sendKeyEvent(ke); } } } } - if (intent.getAction().equals(IME_EDITORCODE)) { - int code = intent.getIntExtra("code", -1); + if (intent.getAction().equals(IME_EDITORCODE)) { + int code = intent.getIntExtra("code", -1); if (code != -1) { InputConnection ic = getCurrentInputConnection(); if (ic != null) @@ -130,5 +160,5 @@ public void onReceive(Context context, Intent intent) { } } } - } + } } From c830b314b6ecfb6cbb942f9e34b96dfeacf6decd Mon Sep 17 00:00:00 2001 From: chien Date: Fri, 16 Sep 2022 22:49:24 +0700 Subject: [PATCH 19/51] update apk and readme --- ADBKeyboard.apk | Bin 17426 -> 17368 bytes README.md | 7 +++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk index 122829aec339da26e0bbd29b6dba8a3f50325dfa..8007a8272679bd690a900937a4ba91f4965e7337 100644 GIT binary patch delta 8866 zcmcIqWmsIjww}S=-QAtyu0@JVX^WHsrMO#>jT9-x2X|<3cS><7?hZwY4bDI*R^(1k z&w0M{eShx#b2Ia1XJ_85WUpkcXHQlVBESpbU}|l3L?qC^5L zS!Wzo!)d?43<5*sC|T;9C>s!Pf44yc{gxreLu*M4*~Os+3^cR|<;VgG)on@=lY{+? zWHtEsS-5N^$u{J42vucO6{}h%5Gd7_>z5;0Me%{4)7{As)PPV_AQW|+<`(g0#$Ym4FouNX1eM%ITx&eW$r7Sm(#1ba0$Xlm5-BM>(jUF7{(1Mr_A zH!Fq~JJZ3ek^;oy11GIRdwcvK{~1Sv#KQNoqZvhM^+k?tif=ZP`8#L%CjILB zhu<3(K5(1JUt;}8?I501KbDkOESUeG`Ts2So!9C>eP4QA+vt|4< zuTD;t%pI++PPt3FZga>o74^4J&N{hM>dd84XOkks4|ZnzGC425xw##m5pj-m5w^y= zP*+uVT~lPc`h}5xGdDY5*mo@#K;>!Jum5JwWtY%o@}7q6R-xaT$ebs`&u)r2+ap~S z!ras!2K29Kye^Ntq@vX2J#sh>rr@DL?_gj>cH}<}bRtwY+FCAbt1goo^Q{P5CD}&u zrRupiJ}i+pefucR7R9KuaYiamZMS`u6g#JN4tD@sb<~5EXCjzY&}6M}Pgv_lZ~haz z7k93s!hXvL$D4yB={tA)tSdvyfxWCsefHL9YT)})R5kZqSq@`TpF$dYK?Kovyb#5p zW;v{)L=HkhMTjWFbDM%Cn+jb^zn1wR89!xa)5^gdqt<{*XX!B!i}oNr0)yu9npA;r zap!r5V#qz%FI?-whBHozlPURs-DHTHH>3BAvbg{B8{2SYSv44ZL3JWT=rj~5VzH-G zvkeejP(vV}xQ{kNzU8KN*!z9rrj0n_??Mbu*CTn18}2!#poyLm^ErX0hzr0k+Voa; z9Esd4ecw~Fp>4f^<}dC#-gB!-A$C8SXW5(}25pW1aHvK3Yx1MjG3A{~;Ty|D;t-3C zna2L|Z!A9)-_mv+i>1Bx zc>iN{e=MeslfW8G_}g|0Ox$~e;imN)OmOp}lV=8l>WrDf5IFuAKdyUvnE5|R5i>(4;_#jwaj;dh5{5W)fPnb+IFp4Y+3{f(2Q z8xOn;(Z-1devi@#dT1*EcMGXBAP^>;YhiEh<^~_5rIq(+8esoo-lKoqH#W9|Stmb0 zJJEi+{&1lrKwCyb$_Z!H>T~y>wlL9%}KjH{6(4=^JVR3ByVyPc-UtRxbc{8YN)tVe8%uR zY`bh9oZZ*hVwsH}sqg8Lks^%L}8EjAu7VaVe zywO|1t4K1)9Y`mL)(tshk7rO= z0&(WL>ej7bQZNgc);cwe$D4McMiU_J#Jvb1amK0-#@j`{TQ}!JQtskPMSR*R1QWeN zxZ=1X@y7PUZAA~j3P8EXZ^c|i>_8A&Xuex#+eNxtXCgy}2H^;-Qy8IY1(9}ob!M!y z!ew)6e`mx9?pY_>MP%)=;X`@d$uJOTx9$RabVYDQamC_I-ii=_c8_q&4O}5#;l8wE zvPHrT^qfGI#t7>oYesu5hf*F)`4UkQt|A$bJvDt)2{IK5RX=Xv$8|DqJU^uRVBrZI zaalC?V4ex=x3avui2ZV8=ON*pAW^V11`P^p7dszXm@HBzBIG4TFKE2X2v0u$)`J*d zULi3@P6lZdApnQEUoVp%IJR6F#83lO-}Bf9$2r1s3jLYgc~E5quNoF<0>`%L&_I}D zW;#$YnBV8IZLF7BRnh4!lo!?-ZOAvxB~8fsQizqpppbNxr^Wx#im?%9{*yQELD z`qTM-qSurDRG*M}-Dt*RXT~w@!*$Vb*KarA25p0S&WWKId08j{*`cONG;eXH6u_D$ z@(lH%if9<``3R<*hFJ8@(%-5SveK2gv<)Yw;_S=Gs|EEg3M^|WxGrON{(6vHZ_5$f z4r7-=9(3va)lV=@?6&+au_QPy0H0K|g<~s#1C4z;GS0CDrQ{V-qs2A4N|_J!@S5C8 zm|lEvy#-NYodr=cfMXOuP}^N!#U#U>Yx+K_gX>fDnY{R$(Zu=C@}d{=H@lbgWzI#1 zRT!MGFL5-}IjCiixc7N(xb;j0wiydE`M1mCJcrP2@(kz=Zd&8M`g`*YoxE=eZ%23* z?P95Sb|tjaY^pbxUOSffv(TQ;ig07Y#<<`2m*|2Pfj{^x5Ll$`jHy`zd47$Hu4miV zNW?z_`Rk~#I>?=^x_lRNaS0JrQF-W*d)HmV0OowE-TXjsvmyy5ilGe~=Odl_9QE)id3!OtJF8w=Co9Y0D@1wS0jgq z0RG+h$CDf|kW-L#=al=PbnX&=+JE`rfFx1XRnDZ7Op1&@A4Oa#ds4Rh3n%JOmvM2M zg`=|&os;;7+EvW=kfax?s4ekzSzAw~9}6{@fAbQ5DR<$?sP|O6T(esw;Z79WQK-B$ z5z`>Smi=1p#6augu9XZSOz&fuORxs*&}<-L+OosXWgu*lg092=U2PtoN#nBp<86!) z;T?YEb!x00!q~Vrk>J!4VEIW;GpbAENm>yo6q$p5$EE?Nr@z%au_L!Z<*(<+b z7GAlB-ONGn+w)f|-&XB(B|c66Dxcr}$p93$p&2{1CADHFSbAN*Y3N2a^DK&u zX++L?NO5t9q264Du3glA&zk?C)N;BB6%(#ELcSx7Hh?}%De^}Ta9UGByEQjfcvPssp-4`AGh{1HXs_Gg|nX`&dydsbWp1+oV!s%d5};8HOwnv9(_K=#XM>_MWly0WB}6* zhe$4Occvrn#r0nI4p3ah#9YH#U(u8e2m+T)%bqqVUN%p?Y?=9Rjx$uD{DiD4XPEO-G!7j7Ys4E$z?j3dP=&jh{mC1;fnet47yxY{r1=fquEFxic1|==F#yXW$RC?t!uoGnFQnYQd+yeY1Uu%t(-%NE}1kXho!mFsuNO1&xye z;XB>J#zq@LW-0-Rb=>NXGP1gy>?TL_wK)+*344~`&1bYT>5fFQwd}LoF>RDyGyOwAgvk9i$_}N|i_+fzN@; z%JTJNPe{#f=nuC^d{=CiosUp};V9O&EWP;2zKhi7Qs{tG>L`wlk5uC)-UG|WqZ645 zq#rjK-D)1QFl>=OS1lyyNjsN!opjENQ4HhBW?@%zb z7rEHdEKTCGWx8!_X=@96~7_q;zf zK&m$K7g?_Vvc%VhgR~@h;89!LRPWX5(aLml^R4GQK}X4~;c`pV-CfTgwPIe1a~NXW zrW1txHB6U|Pp%ebU3EKJ@}c~bs9s*&bKnnIbDN=-EK;%+o2MhLk6p&=dvA&FZv2#o znZ=_b9D`S?q6G>#5`2C6fj%ZoelckGtKjIuZ6M zZ;jlCbmTo`wo5uu>^gs^hTcxbPfdNGR!DoIHeVgmUiIGLf)_RbeY0tG;W@n$DTN_wO+wH3MiRq!u3?%o7R+rKr;~ zH|$vx)Ji-9V8-tfZJ03U&ll@->f$7&G?Q)O6$;~pK9MI_$H~2Z$vRG#GeVa$P^Unr zwz^pRnHWkB+@gpzcpHyHU&wp2bL?kXy?vUtYEpQaxYsse5(eZ&Xgr< zN$wa44J}{r;Rcde4}w+RZyC*C?o>RIr~VqMVkw~u@|kGh-i#nY`udWm$b?jCD;WEE zl$sF7GKAJ3e{g}k=M#!Y_BT3Sy04?wu3JLOVZ8}y(Ygs+mYK$bSH@~DRQpq4iuKIV znQC*NRPLC}CQI^DQ=%N4lSB&y4Xi-Jyff$Qh1WRYDjc!ddYWA4ca!1ywwCdJy78%Ak1o!|{r> zaf4|eP6qcr3`!d2KO*)r)nbj*BGLV^s85g)t5aQ4?5f6~4#rfO>((W}*SwJbYV@)m zYUp12Omz)_8ko%L?$*LAg0~v**awW6R&qaxIK{l9#bmgsRh6uW%UVjtFYF2rX6O#C z=wjwx3+szD8?54jhTxv!Rdj7zwrC8qgy4EyG@_iEFvnuLV7FT|(4L?NB$z&RTy4Ex zI99z8k(6`3_G{KVILw&m+plDwZFU9C-QA(LnMnZB9Vs5y5abm1OD|UWw!GCg9(La$ zSRx6*U0!?dDrqV%Rq8>Ozf?cr`|P%(=#?$s-8pdyQu(FuD-jw+zWHt`%znZvm-_NOg>-|t z&oZwA%6%<9ZO3{ncBSKKKkaEhH6VMVm&4RH+3Q3$raX9Sx7eGcK~VYdM6km^Ux?=V zJZ#%1&zFKW@cwyS@P(~8K=iXI{hGUt{!dC;dbUh%(X|xQf$ha$aG;n(=4_oWEbjLt&H$4xJ}Vyz;KgoN-Qx zduzPYYaG*nZea&@mj5lm+1ltDw+?ZrwXrGJl|x;tx93cT*G%kj@#SH0&XNvvO&Vy1 z`88MHq6{FkcQ6J%Xbqp(gPk!Wk#%pi6t*8w$sT$(9v06|D*7Il)xeugukP0>5VF>e zu0)=p^F~RsJd7(UOT@x|Y>>m=mCR3>X1oMGGIzIHeZ$q753%*T9AaCv2&Lt4qanC!ccXyF$=SS z{34epH&?)oC(AU%W}0PnU;E?|FgWoM9RqJ7snRnLkzVWXdbAwPMbUNQC7!?Lcq7Jy z9M&BSN@bASa|hO7Pbyf+MU@j(g$GXeJX10J62BBy9o1d+&88Skb)Yon0AKsiTV$3h zvd-rd>POYi92e0vLj%6dI*QRLJmgEaX=W9eB^1iLdtd=I(EYMCqzxtiHO(2@q$JZP zPT(BPLO8dj@^|1g)e=; z-`cP89*_3#GrV@Q&VL2ps0l}cbcs^{Hm^5lY=6A@H8wmjR-gO6pcjt7_wkc)%Yl$+ zgN)cT)ySl-K+3!b7dgUd%n+7BRuqjW>p%=_@9(Zr<+24kVXsga>__srMkHHfeAtz) z)7UY1N>mH>!VpmW=v;VcJc~saaB|Ty`1IaX2L+2(#m5Jw1$_?6E2)XsNkjrV;)B@n z$SGx!2Si%l>!2^DMU`WXXhhv&$Z6jYWsPpdq zvMPF(mF_A?|J88Kf3@g&fkaq8k7Tp+r7n|~_Sm=KS?2L7;C_43aFpWky14XgT|S$< z5jy%rm>GchTKgDA7YwlPPz`~)a%jsJ!G5TEH;_!@CQcxN=8I6oaewNhnkks@ERwebE>osxBSHp~l z6Nw$OSL2RU5cc=%%|mIQ-GV3mg18%gcv6YedM(r)T(<-2QNk6aCflPIE`;O#$hOD# zDKFA$AIY0#k6c~f$lhjNQ+5Bq4$u_DHacs)Rwg;vta_@ZRXM%~tn870v5l^+t@*fB zpSXjVKfEgQGVL?n>a)$0yHOd_nzGN~E13A=H}5y?9giMj*~c|vYfV-*erlhMaLiUK z*--5qd<^+AyS6=C4v}$uyqC43q1ejd8pxIwyj~OETjv5Re7V6_dbg9ZneQq#xDDYam%dj zN4(kO3yp_jvJR3RLp!tlFNb@Pmtiq=l26~eZS%@_T`g&WBx#wf*+;4?@(TInpP^i&Kl|oUGgWy+-$s+oCOG%WG1gmGp0r2D??H3 zGIE9jfL0r~ogD{AGRoEwI&a$Bm+}d=od+JY?Nyj~zh1Ydn{D2tNErJ7zKth3%dU+Q zXT|cV2R1!t8Mf-H=Z{Ck`UVI0k2>~pHTS!rRaNgy*FJm9pU;!@XH8Qa-@lo9wSjH? zqUTc)F*XS97>NEAzxlI4>uzxOBoFTTi6B?P)PM%u^W&kce|i59B!NGp*O*MTCqS!;zXav2 z2&u4W0eaUXrSdgFG6dpaC*){(!SmM? z34x-f05|Y6CHC;1C9G0^u@7Sh9&UVXes$Qlw6vN}K+p(vJd@+Ids{_&nmvd8Sd)x6 zo>Yy)6xY`5=Q(FsF606e!4bJ~DC&}Lh{*c^v|^h~dX}U|Z6Q^~bMWP3Pg$VWy(oQV zztZ71f3EZkZ7e6)O$i4Z=$E2-uBeag1JHiXZ!WeM^hPqvrd+(us!=fNkM~?6ba-1h z{9%`cS2i{={0vg>x~shJ={f>ouIzRq>2+PC`A}v{MCVuE=evBj>8)nM zikLuQI%lDK;_Ti68JFYC<+1^>(prQw-pu8g7tg13g#Ed{=S!5zP&XV?xHx6sdjXN@ zeNFw~sD3Y0>1Ws|MWR}n&ALyso6_lRhlV`Le4KjCuKpD_gKwlG!*|Hxi6R``#TH(E z4F?4shvcT7PA0To9R%#iE)LUyBr_z=En zzY7OnFv1oeVla3F5-atDo{kh-K!8t}PlS(ONKioFIT@}1pAh^j$oKCGNS>595DaGE z!$v{p2vZ5W#0G=G$RM}?T(~GO20}0x3>u|Ei4c3$AM*L>5@C~QNa|irrm4t zp~S_P#!|eGv(Nk)zVUyZSf5y#dWNZMpEd344xRsTqY~zetf#v1)~72ED^+S-_))FJ z1fCvM*-qfvGFONjsmb?CF>dO;4VE3x@aw*ypRf;aCnvQrAg>>P z6bVh~FUbgh@)1v^(V#YCoVI$!PBJhLi^i`w{;VT@w?DeMXlE&RGy3&u+NT%FCoy8-<0~}qz%mQWEf_O$eEvZ zquZCO%mHX^JfUd!loo9_;!!8^tj?ygu7gZS6T{U61~KmTvU0w$DNlP9Zzv<|h`;8s zXE7d=8aMkZHW7oaqN1ND(9ggi@xIxE?gfW{s#?mZddm<}@pF~U;HMl#Xnx{~$jbFq zdTC}(ZHwMD&bB_k?!Dew;#Tyzk%$|WOL5}f9V6b5>@0kxayNFKMYs7JCy;|z@1Nb= zJr0=ms76BD?>`CDmim{fqny@ao#wJU)|w7Quw^sY8+>zp&}o*LgGQLccbzPx{RtYf zV2ix@bH-z^%0BwDs!3@%Bcq@kd9r0lCvoA)I#OD$nF8D0THVz?D$8TTRegfKGqh0$ z|A$jcs8AouY`xld@{v+z!~EB1B2_Q+KClAEPE?iTRvH z9PzwlPCG9g5a|mL>epGaEWW($GertRyfz6}Daq%TB>|SILYW!;T=ddhD*s6awNGoWomV8Mgra-)EBfU7WZbg+-2hZHxZNs_nsO``f}W=n##NiO1k&(Q2&ba8k{_`d?R|Lg^FBTs>VLJX0lVf(Fnq<;-C7OtFkWRNliTFrmF tgurKm=r7suQU%X{sYgRjQ&m|>PoGBvJ|oB|zlm7zk376ppzQCv{{f)}Ev^6n delta 7613 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 diff --git a/README.md b/README.md index e71f4d5..c13e982 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,11 @@ To send 😸 Cat adb shell am broadcast -a ADB_INPUT_CHARS --eia chars '128568,32,67,97,116' 5. Send meta keys -To send Ctrl+Space -adb shell am broadcast -a ADB_INPUT_MCODE --eia mcode '4096,62' +To send Ctrl + A as below: (4096 is META_CONTROL_ON, 8192 is META_CONTROL_LEFT_ON, 29 is KEYCODE_A) +adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096,29' // one metaState. +or +adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096^|^8192,29' // two metaState. + 6. CLEAR all text (starting from v2.0) adb shell am broadcast -a ADB_CLEAR_TEXT From 195ac32627546d8abedcb98eaeb334523ed90e8f Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 20:49:04 +0800 Subject: [PATCH 20/51] change pipe to plus sign for two meta inputs --- .../src/main/java/com/android/adbkeyboard/AdbIME.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index 0cb13b8..4c688e5 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -106,8 +106,8 @@ public void onReceive(Context context, Intent intent) { for (i = 0; i < mcodes.length - 1; i = i + 2) { if (ic != null) { KeyEvent ke; - if (mcodes[i].contains("|")) { // Check metaState if more than one. - String[] arrCode = mcodes[i].split("\\|"); // Get metaState if more than one. + if (mcodes[i].contains("+")) { // Check metaState if more than one. + String[] arrCode = mcodes[i].split("\\+"); // Get metaState if more than one. ke = new KeyEvent( 0, 0, From 804a77c3585971fdeb9211e19e17df2d6deaf385 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 20:55:08 +0800 Subject: [PATCH 21/51] Update README.md change to + sign --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05daac9..272d11a 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ adb shell am broadcast -a ADB_INPUT_CHARS --eia chars '128568,32,67,97,116' To send Ctrl + A as below: (4096 is META_CONTROL_ON, 8192 is META_CONTROL_LEFT_ON, 29 is KEYCODE_A) adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096,29' // one metaState. or -adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096^|^8192,29' // two metaState. +adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096^+^8192,29' // two metaState. 6. CLEAR all text (starting from v2.0) From ad86b55b8506e82ff1513ff261335423e31af201 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 21:03:42 +0800 Subject: [PATCH 22/51] remove adhoc release in root dir, moved to github release --- ADBKeyboard.apk | Bin 17368 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ADBKeyboard.apk diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk deleted file mode 100644 index 8007a8272679bd690a900937a4ba91f4965e7337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17368 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 From 4f75ce4ddbd45b46de953e4c607b7d53cdb768a8 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 21:06:21 +0800 Subject: [PATCH 23/51] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 272d11a..51682ff 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,10 @@ is not going to work. ADBKeyboard will help in these cases, especially in device automation and testings. +Download APK from release page +--------------------- +* APK download: [https://github.com/senzhk/ADBKeyBoard/releases] + Build and install APK --------------------- From a98a4252ff3b41075c0410add98b5efa89008b5f Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 21:22:33 +0800 Subject: [PATCH 24/51] rollback --- ADBKeyboard.apk | Bin 0 -> 17368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ADBKeyboard.apk diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk new file mode 100644 index 0000000000000000000000000000000000000000..8007a8272679bd690a900937a4ba91f4965e7337 GIT binary patch literal 17368 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 literal 0 HcmV?d00001 From 6f220f4548c4b71fdf59a120a622cc85cca49f27 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 21:33:44 +0800 Subject: [PATCH 25/51] Update android.yml --- .github/workflows/android.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 800e96a..1b5e66a 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -13,6 +13,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + ref: main - name: set up JDK 11 uses: actions/setup-java@v2 with: From 4ae7b3754504da99e3e84431d2c74cac93f29964 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 21:36:37 +0800 Subject: [PATCH 26/51] Update android.yml --- .github/workflows/android.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 1b5e66a..a5ca28a 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -13,7 +13,8 @@ jobs: steps: - uses: actions/checkout@v2 - with: + with: + fetch-depth: 0 ref: main - name: set up JDK 11 uses: actions/setup-java@v2 From 8ca1829fa0efb94642678f4a4499a363c530652f Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 21:37:19 +0800 Subject: [PATCH 27/51] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a5ca28a..89811ad 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v2 with: fetch-depth: 0 - ref: main + ref: master - name: set up JDK 11 uses: actions/setup-java@v2 with: From 5ab13246fe2b33ae647310ea0077fb545f8b7028 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 22:07:29 +0800 Subject: [PATCH 28/51] Update android.yml --- .github/workflows/android.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 89811ad..bb1b124 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -16,6 +16,7 @@ jobs: with: fetch-depth: 0 ref: master + - run: git log --pretty=oneline | head -n 15 - name: set up JDK 11 uses: actions/setup-java@v2 with: From 402de3ead607164da54d10e761a1e79114facd48 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 22:11:50 +0800 Subject: [PATCH 29/51] Update android.yml test --- .github/workflows/android.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index bb1b124..6a20167 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,6 +25,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle + run: ./gradlew clean run: ./gradlew build - name: Upload All Pack From 10d3b4abd807636c0c42eeda2b8ecfcfebd7265c Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 22:12:24 +0800 Subject: [PATCH 30/51] Update android.yml --- .github/workflows/android.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 6a20167..d3bafff 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,8 +25,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew clean - run: ./gradlew build + run: ./gradlew clean && ./gradlew build - name: Upload All Pack uses: actions/upload-artifact@v2 From 9c1c0c3d1a9c4848421355591ea0af778bc534a4 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 22:15:36 +0800 Subject: [PATCH 31/51] Update AdbIME.java update comment. --- .../src/main/java/com/android/adbkeyboard/AdbIME.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index 4c688e5..1a2de7c 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -106,7 +106,7 @@ public void onReceive(Context context, Intent intent) { for (i = 0; i < mcodes.length - 1; i = i + 2) { if (ic != null) { KeyEvent ke; - if (mcodes[i].contains("+")) { // Check metaState if more than one. + if (mcodes[i].contains("+")) { // Check metaState if more than one. Use '+' as delimiter String[] arrCode = mcodes[i].split("\\+"); // Get metaState if more than one. ke = new KeyEvent( 0, From 34982684760324b136a862ab9341d4cdf438a84e Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 22:21:33 +0800 Subject: [PATCH 32/51] Update android.yml debug build issue --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d3bafff..5db32e5 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 ref: master - - run: git log --pretty=oneline | head -n 15 + - run: cat keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java | grep contains - name: set up JDK 11 uses: actions/setup-java@v2 with: From 9b9904d542166fe921fad937412effbb37672f8c Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 23:17:31 +0800 Subject: [PATCH 33/51] Update android.yml don't build apk now (the apk didn't reflect latest changes) fix later. --- .github/workflows/android.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 5db32e5..717210e 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 ref: master - - run: cat keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java | grep contains + - name: set up JDK 11 uses: actions/setup-java@v2 with: @@ -24,11 +24,7 @@ jobs: distribution: 'adopt' - name: Grant execute permission for gradlew run: chmod +x gradlew + - name: Build with Gradle - run: ./gradlew clean && ./gradlew build + run: ./gradlew build - - name: Upload All Pack - uses: actions/upload-artifact@v2 - with: - name: ADBKeyBoard - path: ADBKeyboard.apk From 989797d1c6ffd6afcf003c78736e1a511940884e Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 23:18:26 +0800 Subject: [PATCH 34/51] new apk --- ADBKeyboard.apk | Bin 17368 -> 17369 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk index 8007a8272679bd690a900937a4ba91f4965e7337..0a32d47b3ae191a8d7d09a835f1cd61894b23a07 100644 GIT binary patch delta 7010 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 delta 7009 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 From 5bb9d3594b5d070385a36eb9ff19f3dcb1273c83 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 9 Oct 2022 23:41:44 +0800 Subject: [PATCH 35/51] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51682ff..5d4dd8a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ ADBKeyboard will help in these cases, especially in device automation and testin Download APK from release page --------------------- -* APK download: [https://github.com/senzhk/ADBKeyBoard/releases] +* APK download: [https://github.com/senzhk/ADBKeyBoard/blob/master/ADBKeyboard.apk] Build and install APK --------------------- From 7375d426b1f286c103c65bb4b8b448beb8593e32 Mon Sep 17 00:00:00 2001 From: senzhk Date: Wed, 22 Nov 2023 19:41:18 +0800 Subject: [PATCH 36/51] update sdk --- keyboardservice/build.gradle | 4 ++-- keyboardservice/src/main/AndroidManifest.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/keyboardservice/build.gradle b/keyboardservice/build.gradle index d087325..7406d80 100644 --- a/keyboardservice/build.gradle +++ b/keyboardservice/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 29 + compileSdkVersion 33 buildToolsVersion '28.0.3' defaultConfig { applicationId 'com.android.adbkeyboard' minSdkVersion 15 - targetSdkVersion 29 + targetSdkVersion 33 versionCode 2 versionName "2.0" } diff --git a/keyboardservice/src/main/AndroidManifest.xml b/keyboardservice/src/main/AndroidManifest.xml index e1e3359..1b40a78 100644 --- a/keyboardservice/src/main/AndroidManifest.xml +++ b/keyboardservice/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ From 5cbf32c7066bbe36ec360fb721285a6201edc8cb Mon Sep 17 00:00:00 2001 From: senzhk Date: Wed, 22 Nov 2023 19:54:49 +0800 Subject: [PATCH 37/51] new apk for new OS vers --- ADBKeyboard.apk | Bin 17369 -> 18790 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk index 0a32d47b3ae191a8d7d09a835f1cd61894b23a07..44c3bc053a480d3d8b17177470b8ae5f7fca85fc 100644 GIT binary patch delta 2506 zcmV;*2{rcFhXLl20kDPx1Oc_5Xp^caDStabL{Nle4hW2_13ngY#LK3E9%$sD-OX!0 z{ji&z$u1caZ++8gE>OrUF$h!0 zNTc!ZAFibdoPi=pDCdA2y>$cx^2?m#5+2#Qn86ZGZd1 zxm`94Rc10A3<24h+RWn_96=GtP6kFe6DnAAj4kFKGAR>>)TVkUt%7uCDC-tPLyES1A(2wSGbK zdvNnu%e--2(08E4FSdA6B#WZ>;7ikXr$~3@2kG`QgNn#*Rsni@1`B#v@5?HSRD;*=%? z(-g7cz+eb82!0ea3R#7ruwVcZBq*ctdvG{#L5XIn^X(s&W0z1oTzg$VZI2Z`SQsy_+WaUbK1wx;Fw> z55K}fwEZXNYQ)Q_$R%pB3i5B9%NuvJrju;Cso|o})w!d#{ZS0e;(sHjYFT_a9Kd*d zwcx@!Vo=0o;>3-*^1RhEqNc2zcbfM>`~{F40tN)L5jF+{7f?$B1ONa400;mf2q6L} zZV`NZtVcdzDNCHUWV`~~_gbu^Z zWTpqv4J=$3!xyl2WnB0PEc^-=euWEndg^vHUDE?bx^ud!PTg1Cd#hdK@F52%lyIB^ zt|5LtTk}DpMBE_m5z9n{*dq>!FT{7^C*df{5{twhaX@?`e~yT+#Bbu31FRBT#1Zj> zSa5+gqC&hU4vAyp7m;CXX$06p6+47p)!<>B^BPwv_}D-Lb(z<>6H4`=$+5+ik2YW5 z$n-J#Dz!V<AuEW`e$mPXi9nUGTjaT9$w%(83F6I%x z712xXte!+#f22Q;JDXeuXWI1`XN{}3Smb49V$tIQQiwr|VDthg1}6oI?k9 zaF?Tt1(b1{vyAu-PV8p6u2ZYUwJ$lFO)%wC>rmz?mY9RbcrD`^Ug8DkD|o{3DV}i$ znCP*!%dyHFl&MvxJz2V^zH4 z*pPZ@Z`0@0DC42 zZD}7LEqVQ1G(OUn55)GE;MBh6l*Q45a84JegiFWVupTuxkl=J2x^G9UIIfyFQdS(Q zD~`~oD?J(Jcf!b}j4jQL7%pS^ggN`H(T#jwGCre6%iK5mk<5^hQC3{8aG}3ZE8j`I zL5NTKjA~u7_|hr0)_%r}pE1K_yKH5ufYF7>mUDgpz4;KLcB@H(gPwqNRv^C1yd`ZcNR<`-Hm`mJn{ed)MD zR@RA^t#{wH*Bj0_b8D`wdC&1H7b`b4zWsGNWL4Rk?^+Y{dDG;6PYZT3ln{-RjOdA+<0+N2vHIVQUBYR9SJvk9-0Naz zRlm?wnr_>2yOzsj(F^xWlTEiz_|e0 z*+2I4K^SKCt4Q8GfN{pnbJ2}=g9*5d;To?P!%LeuatU9adWVXzvONJIoJw{ogh!ww ziE51+Z;L|iXn69$&&kjWeW^X#DY5)z1UNswGYT)kRPszNUgrgDEJK0alK#Vg%H5k` z(+(%1!L}+?OmXw#Q9nmu{|qLBXPEX1#b$%Bp*{Cdwy$uwtzwPvva0?yz6~awhZgCL z4nooES!Ed*WFP4t%^ollS#%Ebz=`eyGvr?^)QwRQQM5;JF4Ue)VZ%zn_FV{0^fA}n zOw4hm&n-$?aKtMfeXtu572%HpjSREdGz$!qV?jHUF$fg1@j;*g909eTXu<&i080Y^ z01yBG00000000000001Z1Cl`^94O?D1t|jn0E7qt022TJ00000000000001xE|We% zB^(-Q#V+*&004&s000pH000000000000000>M@hRK^+qa03iq=0%E*ZpP~T(02BiN U02Gt)KpK;{LmLJTMgRZ+08R6#b^rhX delta 2489 zcmZ9Oc`zG_7RE#D%e4iq#!eI!RO?zpP(|!ZsTNgBrHI;Et&nSLf+|gFt=hMnqTEe>|DjjAtkxCO=9FQjIuZNZi=ef;TXAo1u<3vk4FgTGa zvTo(AgoF8}aq7$=x}|&*9dujC2k;ZfCzgtMxjohU3K6uY+V;M z0T!N&kte~ogfqYPKXNL*74Pk`qLY1ZGB9vs8zkS?#@G1DU-*4R+o4ca0Q$M$q^rx1 zFDn71S24`c>XoWV*DK!mTBlf%%P0C>4?wQaH)!uq(pkY7#sulwuIF9TW}c;S``}B~ zitD}`kwQ=r))omFMwIf#AAWoYhq;NOriypk1EFQlrv&C1Lc#54ch~;ZbAEO$=^>Lt zYt5*3lF3r@lptqz;}};rr*VI<40I?`M#X8mXc?nwabz=IAp1li2c^G4?vwLcO@^HY z@w`2_<=(ygw%k^>F+q6d>x&A7(|6gD$shF7Weahj8SW^9h&nh&@oPCg6$65rgd?)> zE3(Ym9ZepO&_NqYJD2xlJ2ZxuKY|VX?$#V(!)sSJSebTpGU-R|nmS`U=bZr3^WHa` zB`KIo%Ew1WiBt#D zj_%j0NV6z`wh5izI&T{VfCB{RTqD)$70=FQ6gqkRXe?Hpnquvn``EVrK#%Ye56-?1 zY3Wle51H+&m_Yo8h}yuppN=OX7!s{1RF#brHMAb22{jsSDY1C(Qrv?vW@7d$uP05h zod%Duh1#Fa<}81fQ)t3X0b#;v027{dYzgY~IQEYLDUZAo&|Pp&s<}CSMxC-akoqjL zgqzngLJW=uJ1e_ne@mL7W3@L zSuk^4UGp>IPX1NF<)HL?$R%?{hfs#`!Rjk%kV8K~qM`ow-MZMkG*?;7vW93!8}3!>kcZ%ff*n^DTbLJ5{;td>#974YBLqbm_eiJ8^gv82CMSPx(=kFv z&-H|q`j?49<6P6-+$UjM1@!?J*W=6l*iqCYrE=xzgM0q7r24ywLh>(7o2P0v2XAXS zMHRLk4-lc<LK?XIzTWuaAL!4FDI90jY z&RyV+PnUM1)o=f_3$`xKTEXpFe9VK32b&s9K}J&w7bpao3e7rf z_TCP0hE7Dy%)eP5{&_fKz+lTyG{BMJ;dl*^(BQSy@TaKz+EfE?l2q<|!-rxm{bYuV zb$=v@iN{C_INttySd?B!s1O$`ZN~JS|9Zxq(n0nnTO*|j?3CV4gDBC{X`}5>{}B`s zv9T%lp3U@cc`~Mo%PFgNCC0yz`AK4e&xtuj+$+zrf6pKcX45cBJ>d7sMcaobrEs0v zQebblzjOwFr$#%-DHhX+OYMG;9K{UBhstDhC8}kKDg|2)A<29TkQzGNlkX0hz&LUm zHolE}ov)#AZ#O0|bT%a=C?@@RytameEO%hY=mwJs*&@<*!K{NFAje;j#8(0I&U#3K9Q zLJN(%^aR0IBw@g6DQ71Z{aO~kibjT?;T`<7JX?@+!|n3IkLhn5Jjn;&2+LFU^f>Db z@TbUKaffbI-SJvNf?kS$DA4NSrLdObPPJr#a+s0v03AeZf58hcwZdu80P2EL`9MB{ z0Dhz2Ee`kUC0crVZ7<_G&duofS^*=xxf^Uc%zG-{LD^=1aaH%=<4-Z_tVQg8LL!4N zDMhO=jPC7KZ?)8(0`ncWz)Pa@cSlyDoAh*m(QeV@dNno?7TNoehWUBU_B&!XDckK; z{`4m7Bu@=?4$fa-|C2>$=b^otz-sSqH6Y$Q$aH`J8)AC#Og zW6$xz^Iz4!J5G*pY$QxjW&x2}4Rh$gznqkJehPH12K_@>1|?`1Lzp6Te@*`dIEta^ From 8dd0b6924e45ac5565f77f13cf8e8eaf47dbb1b0 Mon Sep 17 00:00:00 2001 From: senzhk Date: Fri, 24 Nov 2023 01:17:39 +0800 Subject: [PATCH 38/51] fix the meta flow broke the normal msg flow. --- ADBKeyboard.apk | Bin 18790 -> 17374 bytes .../java/com/android/adbkeyboard/AdbIME.java | 87 +++++++++--------- 2 files changed, 44 insertions(+), 43 deletions(-) diff --git a/ADBKeyboard.apk b/ADBKeyboard.apk index 44c3bc053a480d3d8b17177470b8ae5f7fca85fc..6e54ba94f5186d8946a45a45313bc3e086582c46 100644 GIT binary patch delta 5656 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 UrTQOUtuR7HlN&!);h)q00G{L1HUIzs delta 5737 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 AXaE2J diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index 1a2de7c..a8115fb 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -52,12 +52,56 @@ class AdbReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(IME_MESSAGE)) { + // normal message String msg = intent.getStringExtra("msg"); if (msg != null) { InputConnection ic = getCurrentInputConnection(); if (ic != null) ic.commitText(msg, 1); } + // meta codes + String metaCodes = intent.getStringExtra("mcode"); // Get message. + if (metaCodes != null) { + String[] mcodes = metaCodes.split(","); // Get mcodes in string. + if (mcodes != null) { + int i; + InputConnection ic = getCurrentInputConnection(); + for (i = 0; i < mcodes.length - 1; i = i + 2) { + if (ic != null) { + KeyEvent ke; + if (mcodes[i].contains("+")) { // Check metaState if more than one. Use '+' as delimiter + String[] arrCode = mcodes[i].split("\\+"); // Get metaState if more than one. + ke = new KeyEvent( + 0, + 0, + KeyEvent.ACTION_DOWN, // Action code. + Integer.parseInt(mcodes[i + 1].toString()), // Key code. + 0, // Repeat. // -1 + Integer.parseInt(arrCode[0].toString()) | Integer.parseInt(arrCode[1].toString()), // Flag + 0, // The device ID that generated the key event. + 0, // Raw device scan code of the event. + KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event. + InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD. + ); + } else { // Only one metaState. + ke = new KeyEvent( + 0, + 0, + KeyEvent.ACTION_DOWN, // Action code. + Integer.parseInt(mcodes[i + 1].toString()), // Key code. + 0, // Repeat. + Integer.parseInt(mcodes[i].toString()), // Flag + 0, // The device ID that generated the key event. + 0, // Raw device scan code of the event. + KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event. + InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD. + ); + } + ic.sendKeyEvent(ke); + } + } + } + } } if (intent.getAction().equals(IME_MESSAGE_B64)) { @@ -97,49 +141,6 @@ public void onReceive(Context context, Intent intent) { } } - if (intent.getAction().equals(IME_MESSAGE)) { - String msg = intent.getStringExtra("mcode"); // Get message. - String[] mcodes = msg.split(","); // Get mcodes in string. - if (mcodes != null) { - int i; - InputConnection ic = getCurrentInputConnection(); - for (i = 0; i < mcodes.length - 1; i = i + 2) { - if (ic != null) { - KeyEvent ke; - if (mcodes[i].contains("+")) { // Check metaState if more than one. Use '+' as delimiter - String[] arrCode = mcodes[i].split("\\+"); // Get metaState if more than one. - ke = new KeyEvent( - 0, - 0, - KeyEvent.ACTION_DOWN, // Action code. - Integer.parseInt(mcodes[i+1].toString()), // Key code. - 0, // Repeat. // -1 - Integer.parseInt(arrCode[0].toString()) | Integer.parseInt(arrCode[1].toString()), // Flag - 0, // The device ID that generated the key event. - 0, // Raw device scan code of the event. - KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event. - InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD. - ); - } else { // Only one metaState. - ke = new KeyEvent( - 0, - 0, - KeyEvent.ACTION_DOWN, // Action code. - Integer.parseInt(mcodes[i+1].toString()), // Key code. - 0, // Repeat. - Integer.parseInt(mcodes[i].toString()), // Flag - 0, // The device ID that generated the key event. - 0, // Raw device scan code of the event. - KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event. - InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD. - ); - } - ic.sendKeyEvent(ke); - } - } - } - } - if (intent.getAction().equals(IME_EDITORCODE)) { int code = intent.getIntExtra("code", -1); if (code != -1) { From 96c0422867e067bdb2c4b9661b46ad4d0ef0f142 Mon Sep 17 00:00:00 2001 From: senzhk Date: Fri, 24 Nov 2023 01:18:42 +0800 Subject: [PATCH 39/51] fix mcode --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d4dd8a..839fe09 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ adb shell am broadcast -a ADB_INPUT_CHARS --eia chars '128568,32,67,97,116' To send Ctrl + A as below: (4096 is META_CONTROL_ON, 8192 is META_CONTROL_LEFT_ON, 29 is KEYCODE_A) adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096,29' // one metaState. or -adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096^+^8192,29' // two metaState. +adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096+8192,29' // two metaState. 6. CLEAR all text (starting from v2.0) From 9466caa2dcf673609a6432e02f00b781b3b18675 Mon Sep 17 00:00:00 2001 From: senzhk Date: Fri, 24 Nov 2023 01:24:55 +0800 Subject: [PATCH 40/51] Update README.md add quick start instruciton. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 839fe09..03d6037 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,11 @@ How to Use ---------- * Enable 'ADBKeyBoard' in the Language&Input Settings OR from adb. +``` +adb install ADBKeyboard.apk +adb shell ime enable com.android.adbkeyboard/.AdbIME +adb shell ime set com.android.adbkeyboard/.AdbIME +``` * Set it as Default Keyboard OR Select it as the current input method of certain EditText view. * Sending Broadcast intent via Adb or your Android Services/Apps. From 793740a203034ff4afd720c2269656fa3f2973d8 Mon Sep 17 00:00:00 2001 From: lixr_SJTU Date: Wed, 3 Dec 2025 11:28:53 +0800 Subject: [PATCH 41/51] Add IME action shortcuts for search, go, done, next, and send --- .../java/com/android/adbkeyboard/AdbIME.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index a8115fb..b427ecb 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -10,6 +10,7 @@ import android.view.InputDevice; import android.view.KeyEvent; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; @@ -21,6 +22,11 @@ public class AdbIME extends InputMethodService { private String IME_EDITORCODE = "ADB_EDITOR_CODE"; private String IME_MESSAGE_B64 = "ADB_INPUT_B64"; private String IME_CLEAR_TEXT = "ADB_CLEAR_TEXT"; + private String IME_ACTION_SEARCH = "ADB_ACTION_SEARCH"; + private String IME_ACTION_GO = "ADB_ACTION_GO"; + private String IME_ACTION_DONE = "ADB_ACTION_DONE"; + private String IME_ACTION_NEXT = "ADB_ACTION_NEXT"; + private String IME_ACTION_SEND = "ADB_ACTION_SEND"; private BroadcastReceiver mReceiver = null; @Override @@ -35,6 +41,11 @@ public View onCreateInputView() { filter.addAction(IME_EDITORCODE); filter.addAction(IME_MESSAGE_B64); filter.addAction(IME_CLEAR_TEXT); + filter.addAction(IME_ACTION_SEARCH); + filter.addAction(IME_ACTION_GO); + filter.addAction(IME_ACTION_DONE); + filter.addAction(IME_ACTION_NEXT); + filter.addAction(IME_ACTION_SEND); mReceiver = new AdbReceiver(); registerReceiver(mReceiver, filter); } @@ -160,6 +171,42 @@ public void onReceive(Context context, Intent intent) { ic.deleteSurroundingText(beforePos.length(), afterPos.length()); } } + + // IME Actions - convenient shortcuts + if (intent.getAction().equals(IME_ACTION_SEARCH)) { + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + ic.performEditorAction(EditorInfo.IME_ACTION_SEARCH); + } + } + + if (intent.getAction().equals(IME_ACTION_GO)) { + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + ic.performEditorAction(EditorInfo.IME_ACTION_GO); + } + } + + if (intent.getAction().equals(IME_ACTION_DONE)) { + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + ic.performEditorAction(EditorInfo.IME_ACTION_DONE); + } + } + + if (intent.getAction().equals(IME_ACTION_NEXT)) { + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + ic.performEditorAction(EditorInfo.IME_ACTION_NEXT); + } + } + + if (intent.getAction().equals(IME_ACTION_SEND)) { + InputConnection ic = getCurrentInputConnection(); + if (ic != null) { + ic.performEditorAction(EditorInfo.IME_ACTION_SEND); + } + } } } } From 2931f1c23bf76e613b058bfc3ca1725efc8174e3 Mon Sep 17 00:00:00 2001 From: lixr_SJTU Date: Wed, 3 Dec 2025 11:29:06 +0800 Subject: [PATCH 42/51] Update Gradle configuration and AndroidManifest for compatibility --- build.gradle | 18 +++++++++++------- gradle/wrapper/gradle-wrapper.properties | 4 ++-- keyboardservice/build.gradle | 8 ++++---- keyboardservice/src/main/AndroidManifest.xml | 1 - 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 320d82f..b4321e2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,16 +1,20 @@ buildscript { repositories { - jcenter() + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/central' } google() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0' + classpath 'com.android.tools.build:gradle:8.1.0' } +} - allprojects { - repositories { - google() - jcenter() - } +allprojects { + repositories { + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://maven.aliyun.com/repository/central' } + google() + mavenCentral() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4e94812..6f27095 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Sep 05 14:14:30 HKT 2020 +#Wed Dec 03 11:08:02 CST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/keyboardservice/build.gradle b/keyboardservice/build.gradle index 7406d80..a65ab60 100644 --- a/keyboardservice/build.gradle +++ b/keyboardservice/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 - buildToolsVersion '28.0.3' + namespace 'com.android.adbkeyboard' + compileSdk 33 defaultConfig { applicationId 'com.android.adbkeyboard' - minSdkVersion 15 - targetSdkVersion 33 + minSdk 21 + targetSdk 33 versionCode 2 versionName "2.0" } diff --git a/keyboardservice/src/main/AndroidManifest.xml b/keyboardservice/src/main/AndroidManifest.xml index 1b40a78..4213ffe 100644 --- a/keyboardservice/src/main/AndroidManifest.xml +++ b/keyboardservice/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ From 480be4fdf3f67f931bf3cf3c5ab8fdbaef5a731c Mon Sep 17 00:00:00 2001 From: lixr_SJTU Date: Wed, 24 Dec 2025 16:37:10 +0800 Subject: [PATCH 43/51] Fix crash during IME_CLEAR_TEXT --- .../java/com/android/adbkeyboard/AdbIME.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index b427ecb..2c30257 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -164,11 +164,22 @@ public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(IME_CLEAR_TEXT)) { InputConnection ic = getCurrentInputConnection(); if (ic != null) { - //REF: stackoverflow/33082004 author: Maxime Epain - CharSequence curPos = ic.getExtractedText(new ExtractedTextRequest(), 0).text; - CharSequence beforePos = ic.getTextBeforeCursor(curPos.length(), 0); - CharSequence afterPos = ic.getTextAfterCursor(curPos.length(), 0); - ic.deleteSurroundingText(beforePos.length(), afterPos.length()); + // Try to get extracted text first + ExtractedTextRequest req = new ExtractedTextRequest(); + req.hintMaxChars = 100000; + req.hintMaxLines = 10000; + android.view.inputmethod.ExtractedText et = ic.getExtractedText(req, 0); + if (et != null && et.text != null) { + CharSequence beforePos = ic.getTextBeforeCursor(et.text.length(), 0); + CharSequence afterPos = ic.getTextAfterCursor(et.text.length(), 0); + if (beforePos != null && afterPos != null) { + ic.deleteSurroundingText(beforePos.length(), afterPos.length()); + } + } else { + // Fallback: select all and delete + ic.performContextMenuAction(android.R.id.selectAll); + ic.commitText("", 1); + } } } From f05286ad0d5847ac4b715683edae73d451eaec85 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sat, 10 Jan 2026 23:37:34 +0800 Subject: [PATCH 44/51] fix the build error --- .github/workflows/android.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 717210e..0334098 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,10 +17,10 @@ jobs: fetch-depth: 0 ref: master - - name: set up JDK 11 - uses: actions/setup-java@v2 + - name: Set up JDK 17 + uses: actions/setup-java@v4 with: - java-version: '11' + java-version: '17' distribution: 'adopt' - name: Grant execute permission for gradlew run: chmod +x gradlew From efceadf402407323283545db2f3974b40778c2a6 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sat, 10 Jan 2026 23:56:07 +0800 Subject: [PATCH 45/51] Update android.yml build apk and upload. --- .github/workflows/android.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 0334098..9e63d26 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -28,3 +28,12 @@ jobs: - name: Build with Gradle run: ./gradlew build + - name: Build Debug APK + run: ./gradlew assembleDebug + + - name: Upload APK + uses: actions/upload-artifact@v4 + with: + name: app-debug + path: "**/build/outputs/apk/debug/*.apk" + From 1c592bd146b21f8804afde01b1adad0a61a8b9ac Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 11 Jan 2026 00:02:08 +0800 Subject: [PATCH 46/51] Update android.yml try to put apk in the release too. --- .github/workflows/android.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 9e63d26..7ec08ff 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -36,4 +36,12 @@ jobs: with: name: app-debug path: "**/build/outputs/apk/debug/*.apk" - + + - name: Create Release and Upload APK + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + files: "**/build/outputs/apk/debug/*.apk" + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 98dc653e8c5e98b3bf9a69561b723545bc5fd5da Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 11 Jan 2026 00:10:09 +0800 Subject: [PATCH 47/51] fixing workflow to generate release apk --- .github/workflows/android.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 7ec08ff..26dc3e5 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -5,12 +5,15 @@ on: branches: [ master ] pull_request: branches: [ master ] - + release: + types: [published, created] + jobs: build: runs-on: ubuntu-latest - + permissions: + contents: write steps: - uses: actions/checkout@v2 with: From 7932242560d2920ebf9cfdcc80e8612660ac1c13 Mon Sep 17 00:00:00 2001 From: senzhk Date: Sun, 11 Jan 2026 00:59:35 +0800 Subject: [PATCH 48/51] Update README.md - new latest apk --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03d6037..2452f45 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ ADBKeyboard will help in these cases, especially in device automation and testin Download APK from release page --------------------- -* APK download: [https://github.com/senzhk/ADBKeyBoard/blob/master/ADBKeyboard.apk] +* [Dev] Latest APK download: [https://github.com/senzhk/ADBKeyBoard/releases/download/v2.4-dev/keyboardservice-debug.apk] +* [Old] Release APK download: [https://github.com/senzhk/ADBKeyBoard/blob/master/ADBKeyboard.apk] Build and install APK --------------------- From e286b92ef24b13477bb6f51909e2cc96384ed926 Mon Sep 17 00:00:00 2001 From: LemonNeko Date: Tue, 24 Feb 2026 16:25:27 +0800 Subject: [PATCH 49/51] chore(readme): add another script to paste from clipboard to adb --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 2452f45..f5d5968 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,9 @@ adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?' * For Mac/Linux, you can use the latest base64 input type with base64 command line tool: adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo -n '你好嗎? Hello?' | base64` +* Or try this script (provided by LemonNekoGH): +https://gist.github.com/LemonNekoGH/f7583e0f4fa83e29dfd96d8334144650 + * For Windows, please try this script (provided by ssddi456): https://gist.github.com/ssddi456/889d5e8a2571a33e8fcd0ff6f1288291 From 01a2fdea39997bf16922fc8ea12a3a73a6f45146 Mon Sep 17 00:00:00 2001 From: Rezisn Date: Thu, 23 Apr 2026 11:37:59 +0900 Subject: [PATCH 50/51] fix keyboard unusable on android-36 --- .../java/com/android/adbkeyboard/AdbIME.java | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java index 2c30257..d251a45 100644 --- a/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java +++ b/keyboardservice/src/main/java/com/android/adbkeyboard/AdbIME.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Build; import android.inputmethodservice.InputMethodService; import android.util.Base64; import android.util.Log; @@ -30,32 +31,47 @@ public class AdbIME extends InputMethodService { private BroadcastReceiver mReceiver = null; @Override - public View onCreateInputView() { - View mInputView = getLayoutInflater().inflate(R.layout.view, null); - - if (mReceiver == null) { - IntentFilter filter = new IntentFilter(IME_MESSAGE); - filter.addAction(IME_CHARS); - filter.addAction(IME_KEYCODE); - filter.addAction(IME_MESSAGE); // IME_META_KEYCODE // Change IME_MESSAGE to get more values. - filter.addAction(IME_EDITORCODE); - filter.addAction(IME_MESSAGE_B64); - filter.addAction(IME_CLEAR_TEXT); - filter.addAction(IME_ACTION_SEARCH); - filter.addAction(IME_ACTION_GO); - filter.addAction(IME_ACTION_DONE); - filter.addAction(IME_ACTION_NEXT); - filter.addAction(IME_ACTION_SEND); - mReceiver = new AdbReceiver(); + public void onCreate() { + super.onCreate(); + registerAdbReceiver(); + } + + private void registerAdbReceiver() { + if (mReceiver != null) { + return; + } + IntentFilter filter = new IntentFilter(IME_MESSAGE); + filter.addAction(IME_CHARS); + filter.addAction(IME_KEYCODE); + filter.addAction(IME_MESSAGE); // IME_META_KEYCODE // Change IME_MESSAGE to get more values. + filter.addAction(IME_EDITORCODE); + filter.addAction(IME_MESSAGE_B64); + filter.addAction(IME_CLEAR_TEXT); + filter.addAction(IME_ACTION_SEARCH); + filter.addAction(IME_ACTION_GO); + filter.addAction(IME_ACTION_DONE); + filter.addAction(IME_ACTION_NEXT); + filter.addAction(IME_ACTION_SEND); + mReceiver = new AdbReceiver(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // API 33+: required; shell/adb is another UID — must be exported. + registerReceiver(mReceiver, filter, Context.RECEIVER_EXPORTED); + } else { registerReceiver(mReceiver, filter); } + } - return mInputView; + @Override + public View onCreateInputView() { + return getLayoutInflater().inflate(R.layout.view, null); } + @Override public void onDestroy() { - if (mReceiver != null) + if (mReceiver != null) { unregisterReceiver(mReceiver); + mReceiver = null; + } super.onDestroy(); } From 4b513f3313b8392b316b37e9c08b0be2def79dda Mon Sep 17 00:00:00 2001 From: senzhk Date: Thu, 23 Apr 2026 19:32:34 +0800 Subject: [PATCH 51/51] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f5d5968..3929edf 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ ADBKeyboard will help in these cases, especially in device automation and testin Download APK from release page --------------------- -* [Dev] Latest APK download: [https://github.com/senzhk/ADBKeyBoard/releases/download/v2.4-dev/keyboardservice-debug.apk] +* [v2.5-dev] With A16 fix: [https://github.com/senzhk/ADBKeyBoard/releases/download/v2.5-dev/keyboardservice-debug.apk] +* [v2.4-dev] Stable APK download: [https://github.com/senzhk/ADBKeyBoard/releases/download/v2.4-dev/keyboardservice-debug.apk] * [Old] Release APK download: [https://github.com/senzhk/ADBKeyBoard/blob/master/ADBKeyboard.apk] Build and install APK