From f73b880b6d09f0f064af081fd9c767ae2a36f9d6 Mon Sep 17 00:00:00 2001 From: Vologhat <47892605+Vologhat@users.noreply.github.com> Date: Sat, 30 Jul 2022 10:35:58 +0300 Subject: [PATCH] added messages hook and base class for translators --- .../ru/vtosters/lite/hooks/MessagesHook.java | 17 +++++++++++++ .../lite/translators/BaseTranslator.java | 21 ++++++++++++++++ .../lite/translators/YandexTranslator.java | 25 ++++++++++++++----- .../vtosters/lite/ui/dialogs/Translate.java | 3 ++- .../engine/models/messages/MsgFromUser.smali | 4 +++ 5 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java create mode 100644 app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java new file mode 100644 index 000000000..3d4980418 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -0,0 +1,17 @@ +package ru.vtosters.lite.hooks; + +import android.text.TextUtils; + +import ru.vtosters.lite.translators.BaseTranslator; + +public class MessagesHook { + + public static String injectOwnText(String oldText) { + var translator = BaseTranslator.getInstance(); + if (!TextUtils.isEmpty(oldText)) + return translator.translate(oldText); + return oldText; + } + + +} diff --git a/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java b/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java new file mode 100644 index 000000000..80f609873 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java @@ -0,0 +1,21 @@ +package ru.vtosters.lite.translators; + +import androidx.annotation.NonNull; + +import ru.vtosters.lite.utils.AndroidUtils; + +public abstract class BaseTranslator { + + private static final int YANDEX_CODE = 0; + + @NonNull + public abstract String translate(String text); + + public static BaseTranslator getInstance() { + switch (AndroidUtils.getPreferences().getInt("translator", 0)) { + case YANDEX_CODE: + return YandexTranslator.getInstance(); + } + return null; + } +} diff --git a/app/src/main/java/ru/vtosters/lite/translators/YandexTranslator.java b/app/src/main/java/ru/vtosters/lite/translators/YandexTranslator.java index b6f66a572..467684771 100644 --- a/app/src/main/java/ru/vtosters/lite/translators/YandexTranslator.java +++ b/app/src/main/java/ru/vtosters/lite/translators/YandexTranslator.java @@ -1,5 +1,9 @@ package ru.vtosters.lite.translators; +import android.util.Log; + +import androidx.annotation.NonNull; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -14,23 +18,32 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; -public class YandexTranslator { +public class YandexTranslator extends BaseTranslator { private static final OkHttpClient client = new OkHttpClient(); + private static YandexTranslator instance; - static String uuid = UUID.randomUUID().toString().replace("-", ""); + private static String uuid = UUID.randomUUID().toString().replace("-", ""); - public static String translate(String text) { + public static YandexTranslator getInstance() { + if (instance == null) + instance = new YandexTranslator(); + return instance; + } + + @NonNull + public String translate(String text) { try { var request = new Request.a() - .b("https://translate.yandex.net/api/v1/tr.json/translate?id=" + uuid + "-0-0&srv=android") + .b("https://translate.yandex.net/api/v1/tr.json/translate?&srv=android&id=" + uuid + "-0-0") .a(RequestBody.a(MediaType.a("application/x-www-form-urlencoded"), "lang=" + Locale.getDefault().getLanguage() + "&text=" + URLEncoder.encode(text, "UTF-8"))) .a(); var payload = client.a(request).execute().a().g(); var json = new JSONObject(payload); if (!json.has("text") && json.has("message")) { - throw new IOException(json.getString("message")); + Log.d("YandexTranslator", json.getString("message")); + return text; } JSONArray array = json.getJSONArray("text"); StringBuilder sb = new StringBuilder(); @@ -42,6 +55,6 @@ public class YandexTranslator { } catch (IOException | JSONException e) { e.printStackTrace(); } - return ""; + return text; } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java index fd62d3c60..d715d700d 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java @@ -6,13 +6,14 @@ import android.os.Handler; import android.os.Looper; import android.util.Log; +import ru.vtosters.lite.hooks.MessagesHook; import ru.vtosters.lite.translators.YandexTranslator; public class Translate { public static void showTranslatedText(Context context, String text) { new Thread(() -> { try { - var translation = YandexTranslator.translate(text); + var translation = MessagesHook.injectOwnText(text); new Handler(Looper.getMainLooper()).post(() -> { showDialog(context, translation); }); diff --git a/smali/smali_classes3/com/vk/im/engine/models/messages/MsgFromUser.smali b/smali/smali_classes3/com/vk/im/engine/models/messages/MsgFromUser.smali index 13898dc32..6f415ccb4 100644 --- a/smali/smali_classes3/com/vk/im/engine/models/messages/MsgFromUser.smali +++ b/smali/smali_classes3/com/vk/im/engine/models/messages/MsgFromUser.smali @@ -1493,6 +1493,10 @@ .locals 0 .line 1 + invoke-static/range {p1 .. p1}, Lru/vtosters/lite/hooks/MessagesHook;->injectOwnText(Ljava/lang/String;)Ljava/lang/String; + + move-result-object p1 + iput-object p1, p0, Lcom/vk/im/engine/models/messages/MsgFromUser;->P:Ljava/lang/String; return-void