From 6b95c6b9d138e92665bc694c929ae6b999f649c1 Mon Sep 17 00:00:00 2001 From: sspanak Date: Sun, 11 Feb 2024 17:41:40 +0200 Subject: [PATCH] added a hack for sending with OK in Google Chat --- .../sspanak/tt9/ime/helpers/AppHacks.java | 71 ++++++++++++++----- .../tt9/preferences/SettingsStore.java | 4 ++ app/src/main/res/values-bg/strings.xml | 4 +- app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values-iw/strings.xml | 2 + app/src/main/res/values-nl/strings.xml | 2 + app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values-uk/strings.xml | 4 +- app/src/main/res/values/strings.xml | 4 +- app/src/main/res/xml/prefs_screen_setup.xml | 12 +++- 14 files changed, 88 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java index bcbf8d24..a53f83d3 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java @@ -59,6 +59,14 @@ public class AppHacks { } + private boolean isGoogleChat() { + return isAppField( + "com.google.android.apps.dynamite", + EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES | EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT + ); + } + + /** * isAppField * Detects a particular input field of a particular application. @@ -114,6 +122,8 @@ public class AppHacks { return true; } else if (isMessenger()) { return onEnterFbMessenger(); + } else if (isGoogleChat()) { + return onEnterGoogleChat(); } return onEnterDefault(); @@ -161,28 +171,46 @@ public class AppHacks { /** * onEnterFbMessenger - * Once we have detected the chat message field we apply the appropriate key combo to send the message. + * Messenger responds only to ENTER, but not DPAD_CENTER, so we make sure to send the correct code, + * no matter how the hardware key is implemented. In case the hack is disabled, we just type a new line, + * as one would expect. */ private boolean onEnterFbMessenger() { - if (textField == null) { + if (inputConnection == null || textField == null || !textField.isThereText()) { return false; } - // in case the setting is disabled, just type a new line as one would expect - if (!settings.getFbMessengerHack()) { - inputConnection.commitText("\n", 1); - return true; - } - - // do not send any commands if the user has not typed anything or the field is invalid - if (!textField.isThereText()) { - return false; - } - - if (isMessenger()) { - // Messenger responds only to ENTER, but not DPAD_CENTER, so we make sure to send the correct code, - // no matter how the hardware key is implemented. + if (settings.getFbMessengerHack()) { sendDownUpKeyEvents(KeyEvent.KEYCODE_ENTER); + } else { + // in case the setting is disabled, just type a new line as one would expect + inputConnection.commitText("\n", 1); + } + + return true; + } + + /** + * onEnterGoogleChat + * Google Chat does not seem to respond consistently to ENTER. So we trick it by selecting + * the send button it, then going back to the text field, so that one can continue typing. + * If the hack is disabled, we just type a new line. + */ + private boolean onEnterGoogleChat() { + if (inputConnection == null || textField == null || !textField.isThereText()) { + return false; + } + + if (settings.getGoogleChatHack()) { + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB); + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB); + sendDownUpKeyEvents(KeyEvent.KEYCODE_ENTER); + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB, true); + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB, true); + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB, true); + sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB, true); + } else { + inputConnection.commitText("\n", 1); } return true; @@ -190,9 +218,16 @@ public class AppHacks { private void sendDownUpKeyEvents(int keyCode) { + sendDownUpKeyEvents(keyCode, false); + } + + + private void sendDownUpKeyEvents(int keyCode, boolean shift) { if (inputConnection != null) { - inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode)); - inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode)); + KeyEvent downEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0, shift ? KeyEvent.META_SHIFT_ON : 0); + KeyEvent upEvent = new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode, 0, shift ? KeyEvent.META_SHIFT_ON : 0); + inputConnection.sendKeyEvent(downEvent); + inputConnection.sendKeyEvent(upEvent); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java b/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java index 97180072..d5027592 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java @@ -300,4 +300,8 @@ public class SettingsStore { public boolean getFbMessengerHack() { return prefs.getBoolean("pref_hack_fb_messenger", false); } + + public boolean getGoogleChatHack() { + return prefs.getBoolean("pref_hack_google_chat", false); + } } diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 55c8a678..f753ccee 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -28,8 +28,8 @@ Съвместимост Облик Бутони за бърз достъп - Изпращай съобщения с ОК в Messenger - Позволява изпращането на съобщения с бутона ОК във Facebook Messenger. + Изпращай с „ОК“ във Facebook Messenger + Изпращай съобщения с „ОК“ в Google Chat Бутони на екрана Назад Зелена слушалка diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 35c3c7d3..ca39a9c6 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -32,4 +32,6 @@ Automatisch Spenden Wenn Ihnen %1$s gefällt, könnten Sie die Entwicklung auf %2$s unterstützen. + Mit \"OK\" in Facebook Messenger senden + Nachrichten mit \"OK\" in Google Chat senden diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c302c3d3..a1a1d6d5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -76,4 +76,6 @@ Automática Donar Si te gusta %1$s, podrías apoyar su desarrollo en: %2$s. + Enviar con «OK» en Facebook Messenger + Enviar mensajes con «OK» en Google Chat diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9d615608..0da2264c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -28,8 +28,8 @@ Apparance Echec du chargement. Mot inadmissible «%1$s» à la ligne %2$d de langue «%3$s». Le dictionaire est supprimé avec succès. - Envoyer des messages avec OK dans Messenger - La touche OK servira pour envoyer des messages dans Facebook Messenger. + Envoyer avec «OK» dans Facebook Messenger + Envoyer des messages avec «OK» dans Google Chat Boutons à l\'écran Chargement du dictionnaire Chargement est annulé. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 817b1d90..30d92fb8 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -41,5 +41,7 @@ Automatica Donare Se ti piace %1$s, potresti supportarne lo sviluppo su: %2$s. + Inviare con \"OK\" su Facebook Messenger + Inviare messaggi con \"OK\" su Google Chat diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 823b6b3f..763b2021 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -69,4 +69,6 @@ אוטומטי לִתְרוֹם אם אתה אוהב את %1$s, תוכל לתמוך בפיתוח שלו בכתובת: %2$s + שלח עם \"OK\" ב-Facebook Messenger. + שלח הודעות עם \"OK\" ב-Google Chat diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 38033804..a881c27a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -32,4 +32,6 @@ Automatisch Doneer Als je %1$s leuk vindt, zou je de ontwikkeling kunnen ondersteunen op: %2$s. + Verstuur met \"OK\" in Facebook Messenger + Stuur berichten met \"OK\" in Google Chat diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3d60cc1e..a8120a3b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -65,4 +65,6 @@ Automático Doar Se você gosta de %1$s, você poderia apoiar o seu desenvolvimento em: %2$s. + Enviar com \"OK\" no Facebook Messenger + Enviar mensagens com \"OK\" no Google Chat diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index de73772f..545ecb99 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -42,8 +42,7 @@ Авто заглавные буквы Автоматически начинать предложение с заглавной буквы. Символ при двойном нажатии клавиши 0 - Отправка сообщения с «ОК» в Messenger - Позволяет отправлять сообщения с помощью кнопки «ОК» в Facebook Messenger. + Отправка с «ОК» в Messenger Кнопки на экране Не удалось загрузить словарь. Проблема в слове «%1$s» в строке %2$d для языка «%3$s». Отсутствует словарь для языка «%1$s». Вы можете загрузить его в Настройках. @@ -82,4 +81,5 @@ Добавить слово «%1$s» в %2$s? Поддержать Если вам нравится %1$s, вы можете поддержать его разработку по: %2$s. + Отправка сообщения с «ОК» в Google Chat diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index bdcbcce5..82e58f31 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -41,8 +41,7 @@ Авто заголовні букви Автоматично починати речення з заголовної букви. Символ при подвійному натисканні клавіші 0 - Надсилати повідомлення з «ОК» до Messenger - Дозволяє надсилати повідомлення за допомогою клавіші «ОК» у Facebook Messenger. + Надсилати з «ОК» до Messenger Кнопки на екрані Назад Виклик @@ -82,4 +81,5 @@ Додати слово «%1$s» до %2$s? Підтримуйте Якщо вам подобається %1$s, ви можете підтримати його розробку за: %2$s. + Надсилати повідомлення з «ОК» до Google Chat diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1185726d..400850c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,8 +45,8 @@ No Auto Character for Double 0-key Press - Send messages with OK in Messenger - Allows sending messages with the OK key in Facebook Messenger. + Send messages with \"OK\" in Google Chat + Send with \"OK\" in Facebook Messenger Show On-Screen Keys Show On-Screen Numpad (BETA) diff --git a/app/src/main/res/xml/prefs_screen_setup.xml b/app/src/main/res/xml/prefs_screen_setup.xml index a4fc1ea2..d409f017 100644 --- a/app/src/main/res/xml/prefs_screen_setup.xml +++ b/app/src/main/res/xml/prefs_screen_setup.xml @@ -1,5 +1,6 @@ - + + + app:title="@string/pref_hack_fb_messenger"/>