From 3b6cdacf968327f8fae11191cd9e67d80b090b95 Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Sun, 31 Jul 2022 22:26:36 +0300 Subject: [PATCH 01/12] req dumper --- .../com/vk/api/gifts/GiftGetByStickerId.java | 35 +++++ .../ru/vtosters/lite/hooks/RequestDumper.java | 26 ++++ .../com/vk/api/base/ApiRequest.smali | 12 +- .../vk/api/gifts/GiftGetByStickerId$a.smali | 37 ------ .../com/vk/api/gifts/GiftGetByStickerId.smali | 121 ------------------ 5 files changed, 66 insertions(+), 165 deletions(-) create mode 100644 app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java create mode 100644 app/src/main/java/ru/vtosters/lite/hooks/RequestDumper.java delete mode 100644 smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId$a.smali delete mode 100644 smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId.smali diff --git a/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java b/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java new file mode 100644 index 000000000..0111560cf --- /dev/null +++ b/app/src/main/java/com/vk/api/gifts/GiftGetByStickerId.java @@ -0,0 +1,35 @@ +package com.vk.api.gifts; + +import android.content.Context; + +import com.vk.api.base.ApiRequest; +import com.vk.dto.gift.CatalogedGift; + +import org.json.JSONException; +import org.json.JSONObject; + +public class GiftGetByStickerId extends ApiRequest { + public static class a { + public final int a; + public final CatalogedGift b; + + public a(int i, CatalogedGift catalogedGift) { + this.a = i; + this.b = catalogedGift; + } + } + + public GiftGetByStickerId(Context context, int i) { + super("execute.getGiftByStickerId"); + b("sticker_id", i); + c("no_inapp", "0"); + b("force_payment", 1); + } + + @Override // com.vk.api.sdk.o.VKRequest + public GiftGetByStickerId.a a(JSONObject jSONObject) throws JSONException { + JSONObject jSONObject2 = jSONObject.getJSONObject("response"); + return new a(jSONObject2.optInt("balance"), + new CatalogedGift(jSONObject2.getJSONObject("gift"))); + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/vtosters/lite/hooks/RequestDumper.java b/app/src/main/java/ru/vtosters/lite/hooks/RequestDumper.java new file mode 100644 index 000000000..f3f10576d --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/hooks/RequestDumper.java @@ -0,0 +1,26 @@ +package ru.vtosters.lite.hooks; +import static ru.vtosters.lite.utils.Preferences.dev; + +import android.util.Log; + +import com.vk.api.internal.MethodCall; + +import java.util.LinkedHashMap; + +public class RequestDumper{ + public static void addParams(MethodCall.a paramslist, String method, LinkedHashMap params, String apiver) { + if (method.contains("execute.getGiftByStickerId")) { + apiver = "5.187"; + } + + if (dev()) { + Log.d("RequestDumper", "Method: " + method); + Log.d("RequestDumper", "API version: " + apiver); + Log.d("RequestDumper", "Params: " + params); + } + + paramslist.a(method); + paramslist.a(params); + paramslist.b(apiver); + } +} diff --git a/smali/smali_classes2/com/vk/api/base/ApiRequest.smali b/smali/smali_classes2/com/vk/api/base/ApiRequest.smali index 243d92b16..2843e024c 100644 --- a/smali/smali_classes2/com/vk/api/base/ApiRequest.smali +++ b/smali/smali_classes2/com/vk/api/base/ApiRequest.smali @@ -827,25 +827,23 @@ invoke-direct {v0}, Lcom/vk/api/internal/MethodCall$a;->()V + invoke-virtual {p0}, Lcom/vk/api/sdk/o/VKRequest;->a()Ljava/lang/String; move-result-object v1 - invoke-virtual {v0, v1}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a; - .line 9 invoke-virtual {p0}, Lcom/vk/api/sdk/o/VKRequest;->b()Ljava/util/LinkedHashMap; - move-result-object v1 - - invoke-virtual {v0, v1}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/util/Map;)Lcom/vk/api/internal/MethodCall$a; + move-result-object v2 .line 10 invoke-virtual {p0}, Lcom/vk/api/base/ApiRequest;->f()Ljava/lang/String; - move-result-object v1 + move-result-object v3 + + invoke-static {v0, v1, v2, v3}, Lru/vtosters/lite/hooks/RequestDumper;->addParams(Lcom/vk/api/internal/MethodCall$a;Ljava/lang/String;Ljava/util/LinkedHashMap;Ljava/lang/String;)V - invoke-virtual {v0, v1}, Lcom/vk/api/internal/MethodCall$a;->b(Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a; .line 11 iget-boolean v1, p0, Lcom/vk/api/base/ApiRequest;->g:Z diff --git a/smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId$a.smali b/smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId$a.smali deleted file mode 100644 index 019ebdc25..000000000 --- a/smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId$a.smali +++ /dev/null @@ -1,37 +0,0 @@ -.class public Lcom/vk/api/gifts/GiftGetByStickerId$a; -.super Ljava/lang/Object; -.source "GiftGetByStickerId.java" - - -# annotations -.annotation system Ldalvik/annotation/EnclosingClass; - value = Lcom/vk/api/gifts/GiftGetByStickerId; -.end annotation - -.annotation system Ldalvik/annotation/InnerClass; - accessFlags = 0x9 - name = "a" -.end annotation - - -# instance fields -.field public final a:I - -.field public final b:Lcom/vk/dto/gift/CatalogedGift; - - -# direct methods -.method public constructor (ILcom/vk/dto/gift/CatalogedGift;)V - .locals 0 - - .line 1 - invoke-direct {p0}, Ljava/lang/Object;->()V - - .line 2 - iput p1, p0, Lcom/vk/api/gifts/GiftGetByStickerId$a;->a:I - - .line 3 - iput-object p2, p0, Lcom/vk/api/gifts/GiftGetByStickerId$a;->b:Lcom/vk/dto/gift/CatalogedGift; - - return-void -.end method diff --git a/smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId.smali b/smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId.smali deleted file mode 100644 index f25452270..000000000 --- a/smali/smali_classes2/com/vk/api/gifts/GiftGetByStickerId.smali +++ /dev/null @@ -1,121 +0,0 @@ -.class public Lcom/vk/api/gifts/GiftGetByStickerId; -.super Lcom/vk/api/base/ApiRequest; -.source "GiftGetByStickerId.java" - - -# annotations -.annotation system Ldalvik/annotation/MemberClasses; - value = { - Lcom/vk/api/gifts/GiftGetByStickerId$a; - } -.end annotation - -.annotation system Ldalvik/annotation/Signature; - value = { - "Lcom/vk/api/base/ApiRequest<", - "Lcom/vk/api/gifts/GiftGetByStickerId$a;", - ">;" - } -.end annotation - - -# direct methods -.method public constructor (Landroid/content/Context;I)V - .locals 1 - - const-string v0, "execute.getGiftByStickerId" - - .line 1 - invoke-direct {p0, v0}, Lcom/vk/api/base/ApiRequest;->(Ljava/lang/String;)V - - const-string v0, "sticker_id" - - .line 2 - invoke-virtual {p0, v0, p2}, Lcom/vk/api/base/ApiRequest;->b(Ljava/lang/String;I)Lcom/vk/api/base/ApiRequest; - - .line 3 - invoke-static {p1}, Lcom/google/android/gms/common/GooglePlayServicesUtil;->isGooglePlayServicesAvailable(Landroid/content/Context;)I - - move-result p1 - - if-eqz p1, :cond_0 - - const-string p1, "1" - - goto :goto_0 - - :cond_0 - const-string p1, "0" - - :goto_0 - const-string p2, "no_inapp" - - invoke-virtual {p0, p2, p1}, Lcom/vk/api/base/ApiRequest;->c(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/base/ApiRequest; - - const/4 p1, 0x1 - - const-string p2, "force_payment" - - .line 4 - invoke-virtual {p0, p2, p1}, Lcom/vk/api/base/ApiRequest;->b(Ljava/lang/String;I)Lcom/vk/api/base/ApiRequest; - - return-void -.end method - - -# virtual methods -.method public a(Lorg/json/JSONObject;)Lcom/vk/api/gifts/GiftGetByStickerId$a; - .locals 3 - .annotation system Ldalvik/annotation/Throws; - value = { - Lorg/json/JSONException; - } - .end annotation - - const-string v0, "response" - - .line 2 - invoke-virtual {p1, v0}, Lorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject; - - move-result-object p1 - - .line 3 - new-instance v0, Lcom/vk/dto/gift/CatalogedGift; - - const-string v1, "gift" - - invoke-virtual {p1, v1}, Lorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject; - - move-result-object v1 - - invoke-direct {v0, v1}, Lcom/vk/dto/gift/CatalogedGift;->(Lorg/json/JSONObject;)V - - .line 4 - new-instance v1, Lcom/vk/api/gifts/GiftGetByStickerId$a; - - const-string v2, "balance" - - invoke-virtual {p1, v2}, Lorg/json/JSONObject;->optInt(Ljava/lang/String;)I - - move-result p1 - - invoke-direct {v1, p1, v0}, Lcom/vk/api/gifts/GiftGetByStickerId$a;->(ILcom/vk/dto/gift/CatalogedGift;)V - - return-object v1 -.end method - -.method public bridge synthetic a(Lorg/json/JSONObject;)Ljava/lang/Object; - .locals 0 - .annotation system Ldalvik/annotation/Throws; - value = { - Ljava/lang/Exception; - } - .end annotation - - .line 1 - invoke-virtual {p0, p1}, Lcom/vk/api/gifts/GiftGetByStickerId;->a(Lorg/json/JSONObject;)Lcom/vk/api/gifts/GiftGetByStickerId$a; - - move-result-object p1 - - return-object p1 -.end method From ca27776aaf76b05d70a81a099bff813c3b767617 Mon Sep 17 00:00:00 2001 From: Erik Kiznov <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 17:14:30 +0500 Subject: [PATCH 02/12] Don't translate mentions Don't translate mentions in MessagesHook --- .../ru/vtosters/lite/hooks/MessagesHook.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index dfb273fd2..162f6ce3e 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -15,18 +15,54 @@ import com.vk.api.internal.MethodCall; import ru.vtosters.lite.translators.BaseTranslator; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.ArrayList; + public class MessagesHook { public static String injectOwnText(String oldText) { if (!autotranslate() || TextUtils.isEmpty(oldText)) return oldText; - return BaseTranslator.getInstance().getTranslation(oldText); + var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])").matcher(oldText); + var instance = BaseTranslator.getInstance(); + + if (!matcher.matches()) return instance.getTranslation(oldText); + + return replaceMentions(oldText, matcher, instance); } public static String injectOwnTextAll(String oldText) { if (!autoalltranslate() || TextUtils.isEmpty(oldText)) { return oldText; } - return BaseTranslator.getInstance().getTranslation(oldText); + var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])").matcher(oldText); + var instance = BaseTranslator.getInstance(); + + if (!matcher.matches()) return instance.getTranslation(oldText); + + return replaceMentions(oldText, matcher, instance); + } + + public static String replaceMentions(String oldText, Matcher matcher, Object instance) { + var mentionsCount = 0; + + var textBuffer = new StringBuffer(); + var mentions = new ArrayList(); + while (matcher.find()) { + mentions.add(matcher.group(1)); + matcher.appendReplacement(textBuffer, "%vtl_mention" + mentionsCount + "%"); ++mentionsCount; + } + matcher.appendTail(textBuffer); + + var translatedText = instance.getTranslation(textBuffer.toString()); + + var matcherMentions = Pattern.compile("%vtl_mention(\\d+)%").matcher(translatedText); + + translatedText = matcherMentions.replaceAll(mr -> { + return mentions.get(Integer.parseInt(mr.group(1))); + }); + + return translatedText; } public static void onLongClick(View view) { From 09443d6ec1d2a97f07206500bf76caa8d9e8b3f6 Mon Sep 17 00:00:00 2001 From: Erik Kiznov <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 18:21:49 +0500 Subject: [PATCH 03/12] Refactoring --- .../ru/vtosters/lite/hooks/MessagesHook.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index 162f6ce3e..81752e848 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -5,7 +5,6 @@ import static ru.vtosters.lite.ui.dialogs.MessageSettings.bombCount; import static ru.vtosters.lite.ui.dialogs.MessageSettings.isSilentEnabled; import static ru.vtosters.lite.utils.Preferences.autoalltranslate; import static ru.vtosters.lite.utils.Preferences.autotranslate; -import static ru.vtosters.lite.utils.Preferences.getBoolValue; import static ru.vtosters.lite.utils.Preferences.savemsgsett; import android.text.TextUtils; @@ -28,7 +27,7 @@ public class MessagesHook { if (!matcher.matches()) return instance.getTranslation(oldText); - return replaceMentions(oldText, matcher, instance); + return replaceMentions(matcher, instance); } public static String injectOwnTextAll(String oldText) { @@ -40,29 +39,30 @@ public class MessagesHook { if (!matcher.matches()) return instance.getTranslation(oldText); - return replaceMentions(oldText, matcher, instance); + return replaceMentions(matcher, instance); } - public static String replaceMentions(String oldText, Matcher matcher, Object instance) { + // TODO: Rewrite to Matcher.replaceAll + public static String replaceMentions(Matcher matcher, BaseTranslator instance) { var mentionsCount = 0; - var textBuffer = new StringBuffer(); + var textBuff = new StringBuffer(); var mentions = new ArrayList(); while (matcher.find()) { mentions.add(matcher.group(1)); - matcher.appendReplacement(textBuffer, "%vtl_mention" + mentionsCount + "%"); ++mentionsCount; + matcher.appendReplacement(textBuff, "%vtl_mention" + mentionsCount + "%"); ++mentionsCount; } - matcher.appendTail(textBuffer); - - var translatedText = instance.getTranslation(textBuffer.toString()); + matcher.appendTail(textBuff); + var translatedText = instance.getTranslation(textBuff.toString()); var matcherMentions = Pattern.compile("%vtl_mention(\\d+)%").matcher(translatedText); + var retTextBuff = new StringBuffer(); + while (matcherMentions.find()) { + matcherMentions.appendReplacement(retTextBuff, mentions.get(Integer.parseInt(matcherMentions.group(1)))); + } + matcherMentions.appendTail(retTextBuff); - translatedText = matcherMentions.replaceAll(mr -> { - return mentions.get(Integer.parseInt(mr.group(1))); - }); - - return translatedText; + return retTextBuff.toString(); } public static void onLongClick(View view) { From 3a354b359a5b2cc51d3bba5baf7074553ea3e975 Mon Sep 17 00:00:00 2001 From: Erik Kiznov <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 19:01:38 +0500 Subject: [PATCH 04/12] Fix bug --- .../main/java/ru/vtosters/lite/hooks/MessagesHook.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index 81752e848..69a1206bf 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -25,8 +25,6 @@ public class MessagesHook { var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])").matcher(oldText); var instance = BaseTranslator.getInstance(); - if (!matcher.matches()) return instance.getTranslation(oldText); - return replaceMentions(matcher, instance); } @@ -35,14 +33,11 @@ public class MessagesHook { return oldText; } var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])").matcher(oldText); - var instance = BaseTranslator.getInstance(); - - if (!matcher.matches()) return instance.getTranslation(oldText); + var instance = BaseTranslator.getInstance(); return replaceMentions(matcher, instance); } - - // TODO: Rewrite to Matcher.replaceAll + public static String replaceMentions(Matcher matcher, BaseTranslator instance) { var mentionsCount = 0; From 94667ac741fe05a6259fadabb042aa9e04ee264c Mon Sep 17 00:00:00 2001 From: Erik Kiznov <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 19:33:23 +0500 Subject: [PATCH 05/12] Add @ support --- .../ru/vtosters/lite/hooks/MessagesHook.java | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index 69a1206bf..7fe2456d1 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -22,42 +22,49 @@ public class MessagesHook { public static String injectOwnText(String oldText) { if (!autotranslate() || TextUtils.isEmpty(oldText)) return oldText; - var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])").matcher(oldText); + var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])|(@[^\\s]+)").matcher(oldText); var instance = BaseTranslator.getInstance(); - return replaceMentions(matcher, instance); + return replaceMentions(oldText, matcher, instance); } public static String injectOwnTextAll(String oldText) { if (!autoalltranslate() || TextUtils.isEmpty(oldText)) { return oldText; } - var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])").matcher(oldText); + var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])|(@[^\\s]+)").matcher(oldText); var instance = BaseTranslator.getInstance(); - return replaceMentions(matcher, instance); + return replaceMentions(oldText, matcher, instance); } - - public static String replaceMentions(Matcher matcher, BaseTranslator instance) { - var mentionsCount = 0; - var textBuff = new StringBuffer(); - var mentions = new ArrayList(); - while (matcher.find()) { - mentions.add(matcher.group(1)); - matcher.appendReplacement(textBuff, "%vtl_mention" + mentionsCount + "%"); ++mentionsCount; + public static String replaceMentions(String oldText, Matcher matcher, BaseTranslator instance) { + try { + var mentionsCount = 0; + + var textBuff = new StringBuffer(); + var mentions = new ArrayList(); + while (matcher.find()) { + mentions.add(matcher.group()); + matcher.appendReplacement(textBuff, "%vtl_mention" + mentionsCount + "%"); ++mentionsCount; + } + matcher.appendTail(textBuff); + + var translatedText = instance.getTranslation(textBuff.toString()); + var matcherMentions = Pattern.compile("%vtl_mention(\\d+)%").matcher(translatedText); + var retTextBuff = new StringBuffer(); + while (matcherMentions.find()) { + matcherMentions.appendReplacement(retTextBuff, mentions.get( + Integer.parseInt(matcherMentions.group(1)) + )); + } + matcherMentions.appendTail(retTextBuff); + + return retTextBuff.toString(); + } catch(Exception e) { + e.printStackTrace(); + return oldText; } - matcher.appendTail(textBuff); - - var translatedText = instance.getTranslation(textBuff.toString()); - var matcherMentions = Pattern.compile("%vtl_mention(\\d+)%").matcher(translatedText); - var retTextBuff = new StringBuffer(); - while (matcherMentions.find()) { - matcherMentions.appendReplacement(retTextBuff, mentions.get(Integer.parseInt(matcherMentions.group(1)))); - } - matcherMentions.appendTail(retTextBuff); - - return retTextBuff.toString(); } public static void onLongClick(View view) { From 9bc87a1d79df1301272200c3ebb3e4b813140b5d Mon Sep 17 00:00:00 2001 From: Erik Kiznov <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 19:41:10 +0500 Subject: [PATCH 06/12] Another refactoring... --- .../main/java/ru/vtosters/lite/hooks/MessagesHook.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index 7fe2456d1..bb2daebfd 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -22,24 +22,23 @@ public class MessagesHook { public static String injectOwnText(String oldText) { if (!autotranslate() || TextUtils.isEmpty(oldText)) return oldText; - var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])|(@[^\\s]+)").matcher(oldText); var instance = BaseTranslator.getInstance(); - return replaceMentions(oldText, matcher, instance); + return replaceMentions(oldText, instance); } public static String injectOwnTextAll(String oldText) { if (!autoalltranslate() || TextUtils.isEmpty(oldText)) { return oldText; } - var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])|(@[^\\s]+)").matcher(oldText); var instance = BaseTranslator.getInstance(); - return replaceMentions(oldText, matcher, instance); + return replaceMentions(oldText, instance); } - public static String replaceMentions(String oldText, Matcher matcher, BaseTranslator instance) { + public static String replaceMentions(String oldText, BaseTranslator instance) { try { + var matcher = Pattern.compile("(\\[(?:club|id|public)\\d+\\|[^]]+\\])|(@[^\\s]+)").matcher(oldText); var mentionsCount = 0; var textBuff = new StringBuffer(); From 3df51d0685c4926668662d3deb4bdce8c30c7d20 Mon Sep 17 00:00:00 2001 From: k1zn <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 19:52:50 +0500 Subject: [PATCH 07/12] Remove % The percentage in the text breaks the translation process, so I remove it. --- app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index bb2daebfd..a5cdd78d4 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -45,12 +45,12 @@ public class MessagesHook { var mentions = new ArrayList(); while (matcher.find()) { mentions.add(matcher.group()); - matcher.appendReplacement(textBuff, "%vtl_mention" + mentionsCount + "%"); ++mentionsCount; + matcher.appendReplacement(textBuff, "vtl_mention" + mentionsCount + ""); ++mentionsCount; } matcher.appendTail(textBuff); var translatedText = instance.getTranslation(textBuff.toString()); - var matcherMentions = Pattern.compile("%vtl_mention(\\d+)%").matcher(translatedText); + var matcherMentions = Pattern.compile("vtl_mention(\\d+)").matcher(translatedText); var retTextBuff = new StringBuffer(); while (matcherMentions.find()) { matcherMentions.appendReplacement(retTextBuff, mentions.get( From 55dbb029c03a5b939e56c80d73378be351d1f09c Mon Sep 17 00:00:00 2001 From: k1zn <46452865+k1zn@users.noreply.github.com> Date: Sun, 31 Jul 2022 20:04:50 +0500 Subject: [PATCH 08/12] Add translate function to catch --- app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index a5cdd78d4..59eb29a4a 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -62,7 +62,7 @@ public class MessagesHook { return retTextBuff.toString(); } catch(Exception e) { e.printStackTrace(); - return oldText; + return instance.getTranslation(oldText); } } From 83d13dce1e8797ed0d3f61632a0db9f770fa064a Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Mon, 1 Aug 2022 00:38:54 +0300 Subject: [PATCH 09/12] read to feature --- .../java/com/vk/im/ui/components/common/MsgAction.java | 3 ++- .../com/vk/im/ui/components/common/MsgActionHelper.java | 1 + app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java | 6 ++++++ app/src/main/java/ru/vtosters/lite/dnr/DNRModule.java | 9 +++++++++ smali/res/values-ru/strings.xml | 1 + smali/res/values/strings.xml | 1 + 6 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/vk/im/ui/components/common/MsgAction.java b/app/src/main/java/com/vk/im/ui/components/common/MsgAction.java index 6a91b4272..fe03de846 100644 --- a/app/src/main/java/com/vk/im/ui/components/common/MsgAction.java +++ b/app/src/main/java/com/vk/im/ui/components/common/MsgAction.java @@ -10,5 +10,6 @@ public enum MsgAction { SPAM, PIN, UNPIN, - TRANSLATE + TRANSLATE, + READTO } \ No newline at end of file diff --git a/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java b/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java index 28f441fed..50207886c 100644 --- a/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java +++ b/app/src/main/java/com/vk/im/ui/components/common/MsgActionHelper.java @@ -33,6 +33,7 @@ public final class MsgActionHelper { CollectionExt.a(arrayList, MsgAction.PIN, MsgPermissionHelper.b.e(aVar)); CollectionExt.a(arrayList, MsgAction.UNPIN, MsgPermissionHelper.b.i(aVar)); CollectionExt.a(arrayList, MsgAction.TRANSLATE, true); + CollectionExt.a(arrayList, MsgAction.READTO, true); return arrayList; } diff --git a/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java b/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java index 559e0f6f5..b64f577fd 100644 --- a/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java +++ b/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java @@ -96,6 +96,7 @@ public class DNRInjector { public static LinkedHashMap injectToHashMapMsg(LinkedHashMap hashMap) { hashMap.put(MsgAction.valueOf("TRANSLATE"), new DelegateMsg.a.a(getIdentifier("translator", "string"))); + hashMap.put(MsgAction.valueOf("READTO"), new DelegateMsg.a.a(getIdentifier("readto", "string"))); return hashMap; } @@ -104,6 +105,11 @@ public class DNRInjector { var fullMsg = ((MsgFromUser) msg).j2(); // text + reply var reply = fullMsg.substring(text.length() + 1); + if (action == MsgAction.valueOf("READTO")) { + DNRModule.hookReadStartMsgTo(msg); + return true; + } + var isTextExist = !text.isEmpty() && !text.equals(" "); var isReplyExist = !reply.isEmpty() && !reply.equals(" "); diff --git a/app/src/main/java/ru/vtosters/lite/dnr/DNRModule.java b/app/src/main/java/ru/vtosters/lite/dnr/DNRModule.java index df4520cf2..a3f56dffd 100644 --- a/app/src/main/java/ru/vtosters/lite/dnr/DNRModule.java +++ b/app/src/main/java/ru/vtosters/lite/dnr/DNRModule.java @@ -4,8 +4,11 @@ import static ru.vtosters.lite.net.Request.makeRequest; import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken; import static ru.vtosters.lite.utils.ProxyUtils.getApi; +import android.util.Log; + import com.vk.im.engine.commands.messages.SetUserActivityCmd; import com.vk.im.engine.models.dialogs.Dialog; +import com.vk.im.engine.models.messages.Msg; import java.util.List; @@ -54,6 +57,12 @@ public class DNRModule { }); } + public static void hookReadStartMsgTo(Msg dialog) { + Log.d("DNR", "hookReadStartMsgTo: " + dialog.C1() + " " + dialog.v1()); + makeRequest("https://" + getApi() + "/method/messages.markAsRead?start_message_id=" + dialog.C1() + "&peer_id=" + dialog.v1() + "&v=5.119&access_token=" + getUserToken(), response -> { + }); + } + public static void hookDNR(int peerId) { mDoNotReadDBHelper.setEnabledForPeerId(peerId, !mDoNotReadDBHelper.isEnabledForPeerId(peerId)); } diff --git a/smali/res/values-ru/strings.xml b/smali/res/values-ru/strings.xml index 31a965ae0..f67694f71 100644 --- a/smali/res/values-ru/strings.xml +++ b/smali/res/values-ru/strings.xml @@ -5795,6 +5795,7 @@ Поддержи проект донатом и получи бонусы Обои + Прочитать до Перевести diff --git a/smali/res/values/strings.xml b/smali/res/values/strings.xml index 555175c29..4ed6a438e 100644 --- a/smali/res/values/strings.xml +++ b/smali/res/values/strings.xml @@ -5955,6 +5955,7 @@ May look like a fake leaving the online" Wallpapers Translate + Read to Disable protection VK has started blocking the use of third-party applications, so for the stable operation of all parts of the application, it is necessary to disable Protection from suspicious applications \n\nVK ID -> Security and Login -> Protection from suspicious applications From 4d0573ffe58d01ca59949f344a3f656aeaf1f89c Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Mon, 1 Aug 2022 00:48:58 +0300 Subject: [PATCH 10/12] some fixes --- .../com/vk/im/ui/components/common/DialogActionsHelper.java | 6 +++--- app/src/main/java/ru/vtosters/lite/foaf/FoafBase.java | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java b/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java index 06994f35c..d2849a2e3 100644 --- a/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java +++ b/app/src/main/java/com/vk/im/ui/components/common/DialogActionsHelper.java @@ -98,9 +98,9 @@ public final class DialogActionsHelper { DNRInjector.inject(dialog, arrayList); - if (dialog.hasUnread()) { - arrayList.add(DialogAction.MARK_AS_READ); - } +// if (dialog.hasUnread()) { + arrayList.add(DialogAction.MARK_AS_READ); +// } if (!dialog.W1()) { arrayList.add(DialogAction.CREATE_SHORTCUT); diff --git a/app/src/main/java/ru/vtosters/lite/foaf/FoafBase.java b/app/src/main/java/ru/vtosters/lite/foaf/FoafBase.java index e5304d6f4..b26c1a4e3 100644 --- a/app/src/main/java/ru/vtosters/lite/foaf/FoafBase.java +++ b/app/src/main/java/ru/vtosters/lite/foaf/FoafBase.java @@ -2,6 +2,7 @@ package ru.vtosters.lite.foaf; import static android.widget.Toast.LENGTH_SHORT; import static android.widget.Toast.makeText; +import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier; import static ru.vtosters.lite.utils.AndroidUtils.getString; import static ru.vtosters.lite.utils.ProxyUtils.apiproxy; @@ -100,7 +101,7 @@ public class FoafBase { a2.setMessage(getString("foafid") + " " + i + getString("foafregdate") + " " + normalHumanDate + getString("foafdate") + " " + daysPassedFromFoafDate(normalHumanDate)).setPositiveButton(17039370, null).create().show(); } catch (Exception e) { e.printStackTrace(); - makeText(context, getString("foaferr"), LENGTH_SHORT).show(); + makeText(getGlobalContext(), getString("foaferr"), LENGTH_SHORT).show(); } } From 7299c9e33afd3d8a24b2a49ac6d8bf671d763b94 Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Mon, 1 Aug 2022 01:53:50 +0300 Subject: [PATCH 11/12] some vkui improvements --- .../java/ru/vtosters/lite/hooks/VKUIHook.java | 7 +++++++ smali/assets/vt_ui_accent.css | 16 ++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java b/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java index 513b5375a..27b2865b4 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java @@ -5,8 +5,10 @@ import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; import static ru.vtosters.lite.utils.Preferences.getBoolValue; import static ru.vtosters.lite.utils.ThemesUtils.getAccentColor; +import static ru.vtosters.lite.utils.ThemesUtils.getAttrId; import static ru.vtosters.lite.utils.ThemesUtils.getBackgroundContent; import static ru.vtosters.lite.utils.ThemesUtils.getBackgroundPage; +import static ru.vtosters.lite.utils.ThemesUtils.getColorFromAttr; import static ru.vtosters.lite.utils.ThemesUtils.getHeaderBackground; import static ru.vtosters.lite.utils.ThemesUtils.getHeaderText; import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr; @@ -59,8 +61,13 @@ public class VKUIHook { .replace("%header_text%", hex(getHeaderText())) .replace("%accent%", hex(getAccentColor())) .replace("%background_page%", hex(getBackgroundPage())) + .replace("%content_tint_background%", hex(getColorFromAttr(getAttrId("content_tint_background")))) + .replace("%button_primary_background%", hex(getColorFromAttr(getAttrId("button_primary_background")))) + .replace("%button_outline_foreground%", hex(getColorFromAttr(getAttrId("button_outline_foreground")))) + .replace("%button_outline_border%", hex(getColorFromAttr(getAttrId("button_outline_border")))) .replace("%text_primary%", hex(getTextAttr())); + loadedCSSAmoled = load("vt_ui_oled.css"); isLoaded = true; } diff --git a/smali/assets/vt_ui_accent.css b/smali/assets/vt_ui_accent.css index 43ab44a2e..82b5fd501 100644 --- a/smali/assets/vt_ui_accent.css +++ b/smali/assets/vt_ui_accent.css @@ -11,9 +11,9 @@ body[scheme=bright_light] { --attach_picker_tab_active_background: %accent% !important; --attach_picker_tab_active_text: %accent% !important; --button_muted_foreground: %accent% !important; - --button_outline_border: %accent% !important; - --button_outline_foreground: %accent% !important; - --button_primary_background: %accent% !important; + --button_outline_border: %button_outline_border% !important; + --button_outline_foreground: %button_outline_foreground% !important; + --button_primary_background: %button_primary_background% !important; --button_secondary_foreground: %accent% !important; --button_tertiary_foreground: %accent% !important; --cell_button_foreground: %accent% !important; @@ -40,7 +40,7 @@ body[scheme=bright_light] { /* backgrounds */ --background_content: %background_content% !important; --background_page: %background_page% !important; - --content_tint_background: %background_page% !important; + --content_tint_background: %content_tint_background% !important; --loader_background: %background_page% !important; --header_background: %header_background% !important; --header_background_before_blur: %header_background% !important; @@ -62,9 +62,9 @@ body[scheme=space_gray] { --attach_picker_tab_active_background: %accent% !important; --attach_picker_tab_active_text: %accent% !important; --button_muted_foreground: %accent% !important; - --button_outline_border: %accent% !important; - --button_outline_foreground: %accent% !important; - --button_primary_background: %accent% !important; + --button_outline_border: %button_outline_border% !important; + --button_outline_foreground: %button_outline_foreground% !important; + --button_primary_background: %button_primary_background% !important; --button_secondary_foreground: %accent% !important; --button_tertiary_foreground: %accent% !important; --cell_button_foreground: %accent% !important; @@ -90,7 +90,7 @@ body[scheme=space_gray] { --dynamic_blue: %accent% !important; --background_content: %background_content% !important; --background_page: %background_page% !important; - --content_tint_background: %background_page% !important; + --content_tint_background: %content_tint_background% !important; --loader_background: %background_page% !important; --header_background: %header_background% !important; --header_background_before_blur: %header_background% !important; From e499d98050a8d6f1daf133fe4888ea4645363e1a Mon Sep 17 00:00:00 2001 From: Vologhat <47892605+Vologhat@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:33:58 +0300 Subject: [PATCH 12/12] added "likes on right" displaying mode for posts and viewers --- .../ru/vtosters/lite/hooks/PostViewHook.java | 67 +++++++++++++++++++ .../lite/ui/fragments/InterfaceFragment.java | 1 + .../ru/vtosters/lite/utils/Preferences.java | 4 ++ smali/res/xml/preferences_interface.xml | 4 ++ .../vk/libvideo/ui/VideoBottomPanelView.smali | 2 + .../newsfeed/holders/BaseFooterHolder.smali | 2 + .../photoviewer/BottomPanelController.smali | 2 + 7 files changed, 82 insertions(+) create mode 100644 app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java diff --git a/app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java b/app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java new file mode 100644 index 000000000..50b4d722b --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/hooks/PostViewHook.java @@ -0,0 +1,67 @@ +package ru.vtosters.lite.hooks; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; + +import androidx.recyclerview.widget.RecyclerView; + +import com.vk.newsfeed.holders.BaseFooterHolder; +import com.vtosters.lite.R; + +import ru.vtosters.lite.utils.Preferences; + +public class PostViewHook { + + /** + * For displaying child elements with custom direction in rtl container we should remove their, set layout direction and add again */ + private static void saveChildDirectionForRlt(ViewGroup container) { + var children = new View[container.getChildCount()]; + for (int i = 0; i < container.getChildCount(); i++) { + var child = container.getChildAt(i); + child.setLayoutDirection(View.LAYOUT_DIRECTION_LTR); + children[i] = child; + } + container.removeAllViews(); + for (View child : children) { + container.addView(child); + } + container.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); + } + + // res/layout/likes_panel.xml + public static void injectBaseFooterHolder(BaseFooterHolder baseFooterHolder) { + if (!Preferences.isLikesOnRightEnabled()) + return; + try { + var container = (ViewGroup) ((RecyclerView.ViewHolder) baseFooterHolder).itemView; + saveChildDirectionForRlt((ViewGroup) container.getChildAt(1)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // res/layout/photo_viewer_bottom.xml + public static void injectPhotoViewer(View container) { + if (!Preferences.isLikesOnRightEnabled()) + return; + try { + var bottomPanel = (ViewGroup) container.findViewById(R.id.photo_viewer_bottom_panel); + saveChildDirectionForRlt(bottomPanel); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // res/layout/video_bottom_view.xml + public static void injectVideoView(RelativeLayout container) { + if (!Preferences.isLikesOnRightEnabled()) + return; + try { + var bottomBar = (ViewGroup) container.findViewById(R.id.bottom_bar); + saveChildDirectionForRlt(bottomBar); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java index fbbbd5fad..cc46175ef 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java @@ -20,6 +20,7 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment { private void prefs() { findPreference("stories").setOnPreferenceClickListener(new restart()); findPreference("swipe").setOnPreferenceClickListener(new restart()); + findPreference("is_likes_on_right").setOnPreferenceClickListener(new restart()); } public boolean restart(Preference preference) { diff --git a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java index 2147789f7..f535b2cf3 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java +++ b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java @@ -356,6 +356,10 @@ public class Preferences { return isPrometheus(AccountManagerUtils.getUserId()); } + public static boolean isLikesOnRightEnabled() { + return getBoolValue("is_likes_on_right", false); + } + public static long getSizeForDelete() { switch (getPrefsValue("clearcache")) { case "100mb": diff --git a/smali/res/xml/preferences_interface.xml b/smali/res/xml/preferences_interface.xml index ace298ee3..22f5bf091 100644 --- a/smali/res/xml/preferences_interface.xml +++ b/smali/res/xml/preferences_interface.xml @@ -15,6 +15,10 @@ android:key="whatsnew" android:summary="Блок написания поста в ленте" android:title="Показывать блок поста" /> + inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View; + invoke-static/range {p0 .. p0}, Lru/vtosters/lite/hooks/PostViewHook;->injectVideoView(Landroid/widget/RelativeLayout;)V + .line 5 sget p2, Lcom/vk/libvideo/g;->subtitle:I diff --git a/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali b/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali index a240eca23..60be23bd1 100644 --- a/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali +++ b/smali/smali_classes3/com/vk/newsfeed/holders/BaseFooterHolder.smali @@ -62,6 +62,8 @@ .line 1 invoke-direct {p0, p1, p2}, Lcom/vk/newsfeed/holders/BaseNewsEntryHolder;->(ILandroid/view/ViewGroup;)V + invoke-static/range {p0 .. p0}, Lru/vtosters/lite/hooks/PostViewHook;->injectBaseFooterHolder(Lcom/vk/newsfeed/holders/BaseFooterHolder;)V + .line 2 iget-object p1, p0, Landroidx/recyclerview/widget/RecyclerView$ViewHolder;->itemView:Landroid/view/View; diff --git a/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali b/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali index e755e8c3b..9eb751b48 100644 --- a/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali +++ b/smali/smali_classes4/com/vk/ui/photoviewer/BottomPanelController.smali @@ -102,6 +102,8 @@ move-result-object v0 + invoke-static/range {v0 .. v0}, Lru/vtosters/lite/hooks/PostViewHook;->injectPhotoViewer(Landroid/view/View;)V + const-string v1, "LayoutInflater.from(cont\u2026hoto_viewer_bottom, null)" invoke-static {v0, v1}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V