From a2d8bf790d557d07d0c362ae3e4ddb008acf0b8d Mon Sep 17 00:00:00 2001 From: Keeperorowner Date: Sat, 7 Dec 2024 20:32:33 +0800 Subject: [PATCH 1/6] Update build.gradle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 取消混淆 --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 16c5c3b..a4919e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { buildTypes { release { - minifyEnabled true - shrinkResources true + minifyEnabled false + shrinkResources false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } @@ -39,4 +39,4 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' implementation 'com.google.code.gson:gson:2.10.1' -} \ No newline at end of file +} From ad2768dea71c1aa51838ceab7c34a6a54dc92f9e Mon Sep 17 00:00:00 2001 From: Keeperorowner Date: Sat, 7 Dec 2024 20:36:03 +0800 Subject: [PATCH 2/6] Update android.yml --- .github/workflows/android.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d563120..681010a 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,7 +25,7 @@ jobs: run: ./gradlew :app:assembleDebug - name: Upload Debug APK - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ReTelegram-Debug path: ${{github.workspace}}/app/build/outputs/apk/debug/*.apk @@ -35,7 +35,7 @@ jobs: run: ./gradlew :app:assembleRelease - name: Upload Release APK - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ReTelegram-Release path: ${{github.workspace}}/app/build/outputs/apk/release/*.apk From 8b77525bd8145ee8e4bbf62e95c897b99de2b48d Mon Sep 17 00:00:00 2001 From: 86189 Date: Wed, 11 Dec 2024 22:42:34 +0800 Subject: [PATCH 3/6] Remove Config Setting Remove all functions except for anti recall --- app/build.gradle | 4 +- .../timeline/re_telegram/ClientChecker.java | 3 +- .../nep/timeline/re_telegram/HookInit.java | 27 +- .../application/ApplicationLoaderHook.java | 37 +- .../re_telegram/configs/ConfigManager.java | 90 ---- .../timeline/re_telegram/configs/Configs.java | 130 ----- .../features/AllowMoveAllChatFolder.java | 85 ---- .../re_telegram/features/AntiAntiForward.java | 64 --- .../features/AntiRecallWithDatabase.java | 455 ------------------ .../re_telegram/features/FakePremium.java | 12 - .../re_telegram/features/HideStories.java | 33 -- .../features/NoSponsoredMessages.java | 62 --- .../features/ProhibitChannelSwitching.java | 53 -- .../UnlockedNoPremiumAccountsLimit.java | 14 - .../features/UseSystemTypeface.java | 54 --- app/src/main/res/values/array.xml | 1 - gradle/wrapper/gradle-wrapper.properties | 3 +- 17 files changed, 25 insertions(+), 1102 deletions(-) delete mode 100644 app/src/main/java/nep/timeline/re_telegram/configs/ConfigManager.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/configs/Configs.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/AllowMoveAllChatFolder.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/AntiAntiForward.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/AntiRecallWithDatabase.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/FakePremium.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/HideStories.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/NoSponsoredMessages.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/ProhibitChannelSwitching.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/UnlockedNoPremiumAccountsLimit.java delete mode 100644 app/src/main/java/nep/timeline/re_telegram/features/UseSystemTypeface.java diff --git a/app/build.gradle b/app/build.gradle index 398c140..4c5a9cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,8 +30,8 @@ android { buildTypes { release { - minifyEnabled true - shrinkResources true + minifyEnabled false + shrinkResources false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } diff --git a/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java b/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java index 4158fd9..80aad95 100644 --- a/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java +++ b/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java @@ -16,8 +16,7 @@ public static boolean check(ClientType client) public enum ClientType { Nekogram("tw.nekomimi.nekogram"), Cherrygram("uz.unnarsx.cherrygram"), - Yukigram("me.onlyfire.yukigram.beta"), - MDgram(new String[]{ "org.telegram.mdgram" }); + Yukigram("me.onlyfire.yukigram.beta"),; final String[] packageNames; diff --git a/app/src/main/java/nep/timeline/re_telegram/HookInit.java b/app/src/main/java/nep/timeline/re_telegram/HookInit.java index 460d3e2..cb25222 100644 --- a/app/src/main/java/nep/timeline/re_telegram/HookInit.java +++ b/app/src/main/java/nep/timeline/re_telegram/HookInit.java @@ -9,17 +9,10 @@ import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; import nep.timeline.re_telegram.application.ApplicationLoaderHook; -import nep.timeline.re_telegram.features.AllowMoveAllChatFolder; -import nep.timeline.re_telegram.features.AntiAntiForward; -import nep.timeline.re_telegram.features.AntiRecallWithDatabase; -import nep.timeline.re_telegram.features.HideStories; import nep.timeline.re_telegram.features.NEWAntiRecall; -import nep.timeline.re_telegram.features.NoSponsoredMessages; -import nep.timeline.re_telegram.features.ProhibitChannelSwitching; -import nep.timeline.re_telegram.features.UseSystemTypeface; public class HookInit implements IXposedHookLoadPackage { - private static final List hookPackages = Arrays.asList("org.telegram.messenger", "org.telegram.messenger.web", "org.telegram.messenger.beta", "org.telegram.plus", "org.telegram.mdgram", + private static final List hookPackages = Arrays.asList("org.telegram.messenger", "org.telegram.messenger.web", "org.telegram.messenger.beta", "org.telegram.plus", "tw.nekomimi.nekogram", "com.cool2645.nekolite", "com.exteragram.messenger", @@ -62,26 +55,15 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr ApplicationLoaderHook.init(classLoader); - if (ClientChecker.check(ClientChecker.ClientType.Yukigram)) { - AntiRecallWithDatabase.initUI(classLoader); - - AntiRecallWithDatabase.initProcessing(classLoader); - - AntiRecallWithDatabase.init(classLoader); - } else { NEWAntiRecall.initUI(classLoader); NEWAntiRecall.initProcessing(classLoader); NEWAntiRecall.init(classLoader); - } - // FakePremium.init(classLoader); - if (!ClientChecker.check(ClientChecker.ClientType.Nekogram)) - AllowMoveAllChatFolder.init(classLoader); + //AllowMoveAllChatFolder.init(classLoader); - // UnlockedNoPremiumAccountsLimit.init(classLoader); if (ClientChecker.check(ClientChecker.ClientType.Cherrygram)) { Class checker = XposedHelpers.findClassIfExists("org.telegram.tgnet.ConnectionsManagerImpl", classLoader); @@ -89,7 +71,8 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr XposedHelpers.findAndHookMethod(checker, "g45ytgt513", XC_MethodReplacement.DO_NOTHING); } - if (!onlyNeedAR(lpparam.packageName)) +/* + if (!onlyNeedAR(lpparam.packageName)) { if (!ClientChecker.check(ClientChecker.ClientType.MDgram)) UseSystemTypeface.init(classLoader); @@ -106,6 +89,8 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) thr AntiAntiForward.init(classLoader); } + + */ } } } diff --git a/app/src/main/java/nep/timeline/re_telegram/application/ApplicationLoaderHook.java b/app/src/main/java/nep/timeline/re_telegram/application/ApplicationLoaderHook.java index 9834e9e..0f5a8fd 100644 --- a/app/src/main/java/nep/timeline/re_telegram/application/ApplicationLoaderHook.java +++ b/app/src/main/java/nep/timeline/re_telegram/application/ApplicationLoaderHook.java @@ -2,15 +2,10 @@ import android.app.Application; import android.content.Context; -import android.widget.Toast; - -import java.io.File; -import java.io.IOException; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import nep.timeline.re_telegram.Utils; -import nep.timeline.re_telegram.configs.ConfigManager; import nep.timeline.re_telegram.obfuscate.AutomationResolver; public class ApplicationLoaderHook { @@ -46,7 +41,7 @@ protected void beforeHookedMethod(MethodHookParam param) { return; } - File dir = new File(app.getFilesDir().getParentFile(), "Re-Telegram"); +/* File dir = new File(app.getFilesDir().getParentFile(), "Re-Telegram"); if (!dir.exists()) if (!dir.mkdir()) { @@ -54,28 +49,24 @@ protected void beforeHookedMethod(MethodHookParam param) { Utils.log("Cannot create " + dir.getAbsolutePath() + " dir, please create by yourself!"); return; } - //Utils.deletedMessagesSavePath = new File(dir.getAbsolutePath() + "/deletedMessages.list"); + Utils.deletedMessagesSavePath = new File(dir.getAbsolutePath() + "/deletedMessages.list"); Utils.deletedMessagesDatabasePath = new File(dir.getAbsolutePath() + "/deletedMessages.db"); ConfigManager.cfgPath = new File(dir.getAbsolutePath() + "/configs.cfg"); - try - { - if (!ConfigManager.cfgPath.exists()) - { - ConfigManager.cfgPath.createNewFile(); - ConfigManager.save(); - } + if (!ConfigManager.cfgPath.exists()) + { + ConfigManager.cfgPath.createNewFile(); + ConfigManager.save(); + } - //Utils.readDeletedMessages(); - ConfigManager.read(); - ConfigManager.save(); - HostApplicationInfo.setApplication(app); - } - catch (IOException e) - { - Utils.log(e); - } + //Utils.readDeletedMessages(); + ConfigManager.read(); + ConfigManager.save(); + + */ + HostApplicationInfo.setApplication(app); } }); + initialized = true; } } \ No newline at end of file diff --git a/app/src/main/java/nep/timeline/re_telegram/configs/ConfigManager.java b/app/src/main/java/nep/timeline/re_telegram/configs/ConfigManager.java deleted file mode 100644 index 6254552..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/configs/ConfigManager.java +++ /dev/null @@ -1,90 +0,0 @@ -package nep.timeline.re_telegram.configs; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; - -import nep.timeline.re_telegram.Utils; -import nep.timeline.re_telegram.utils.FileUtils; - -public class ConfigManager { - public static File cfgPath = null; - - public static void read() - { - if (cfgPath == null) - return; - - try - { - JsonElement valueJsonElement = JsonParser.parseReader(new BufferedReader(new FileReader(cfgPath))); - if (!valueJsonElement.isJsonNull() && valueJsonElement instanceof JsonObject) - { - JsonObject jsonObject = (JsonObject) valueJsonElement; - jsonObject.entrySet().forEach(entry -> { - JsonObject jsonModule = entry.getValue().getAsJsonObject(); - if (jsonModule.get("AntiAntiForward") != null) - Configs.setAntiAntiForward(jsonModule.get("AntiAntiForward").getAsBoolean()); - if (jsonModule.get("AntiRecall") != null) - Configs.setAntiRecall(jsonModule.get("AntiRecall").getAsBoolean()); - if (jsonModule.get("AntiRecallText") != null) - Configs.setAntiRecallText(jsonModule.get("AntiRecallText").getAsString()); - if (jsonModule.get("AntiRecallTextColorful") != null) - Configs.setAntiRecallTextColorful(jsonModule.get("AntiRecallTextColorful").getAsBoolean()); - if (jsonModule.get("AntiRecallTextRed") != null) - Configs.setAntiRecallTextRed(jsonModule.get("AntiRecallTextRed").getAsInt()); - if (jsonModule.get("AntiRecallTextGreen") != null) - Configs.setAntiRecallTextGreen(jsonModule.get("AntiRecallTextGreen").getAsInt()); - if (jsonModule.get("AntiRecallTextBlue") != null) - Configs.setAntiRecallTextBlue(jsonModule.get("AntiRecallTextBlue").getAsInt()); - if (jsonModule.get("NoSponsoredMessages") != null) - Configs.setNoSponsoredMessages(jsonModule.get("NoSponsoredMessages").getAsBoolean()); - if (jsonModule.get("ProhibitChannelSwitching") != null) - Configs.setProhibitChannelSwitching(jsonModule.get("ProhibitChannelSwitching").getAsBoolean()); - if (jsonModule.get("AllowMoveAllChatFolder") != null) - Configs.setAllowMoveAllChatFolder(jsonModule.get("AllowMoveAllChatFolder").getAsBoolean()); - if (jsonModule.get("UseSystemTypeface") != null) - Configs.setUseSystemTypeface(jsonModule.get("UseSystemTypeface").getAsBoolean()); - if (jsonModule.get("HideStories") != null) - Configs.setHideStories(jsonModule.get("HideStories").getAsBoolean()); - //if (jsonModule.get("UnlockedNoPremiumAccountsLimit") != null) - // Configs.setUnlockedNoPremiumAccountsLimit(jsonModule.get("UnlockedNoPremiumAccountsLimit").getAsBoolean()); - }); - } - } - catch (IOException e) - { - Utils.log(e); - } - } - - public static void save() - { - if (cfgPath == null) - return; - - JsonObject valueJsonObject = new JsonObject(); - JsonObject jsonModule = new JsonObject(); - valueJsonObject.add("Re-Telegram", jsonModule); - jsonModule.add("AntiAntiForward", new JsonPrimitive(Configs.isAntiAntiForward())); - jsonModule.add("AntiRecall", new JsonPrimitive(Configs.isAntiRecall())); - jsonModule.add("AntiRecallText", new JsonPrimitive(Configs.getAntiRecallText())); - jsonModule.add("AntiRecallTextColorful", new JsonPrimitive(Configs.isAntiRecallTextColorful())); - jsonModule.add("AntiRecallTextRed", new JsonPrimitive(Configs.getAntiRecallTextRed())); - jsonModule.add("AntiRecallTextGreen", new JsonPrimitive(Configs.getAntiRecallTextGreen())); - jsonModule.add("AntiRecallTextBlue", new JsonPrimitive(Configs.getAntiRecallTextBlue())); - jsonModule.add("NoSponsoredMessages", new JsonPrimitive(Configs.isNoSponsoredMessages())); - jsonModule.add("ProhibitChannelSwitching", new JsonPrimitive(Configs.isProhibitChannelSwitching())); - jsonModule.add("AllowMoveAllChatFolder", new JsonPrimitive(Configs.isAllowMoveAllChatFolder())); - jsonModule.add("UseSystemTypeface", new JsonPrimitive(Configs.isUseSystemTypeface())); - jsonModule.add("HideStories", new JsonPrimitive(Configs.isHideStories())); - //jsonModule.add("UnlockedNoPremiumAccountsLimit", new JsonPrimitive(Configs.isUnlockedNoPremiumAccountsLimit())); - FileUtils.save(cfgPath, Utils.getBuilderGson().toJson(valueJsonObject), false); - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/configs/Configs.java b/app/src/main/java/nep/timeline/re_telegram/configs/Configs.java deleted file mode 100644 index 6710e4a..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/configs/Configs.java +++ /dev/null @@ -1,130 +0,0 @@ -package nep.timeline.re_telegram.configs; - -public class Configs { - private static boolean antiAntiForward = true; - private static boolean antiRecall = true; - private static String antiRecallText = ""; - private static boolean antiRecallTextColorful = true; - private static int antiRecallTextRed = 255; - private static int antiRecallTextGreen = 0; - private static int antiRecallTextBlue = 0; - private static boolean noSponsoredMessages = true; - private static boolean prohibitChannelSwitching = true; - private static boolean allowMoveAllChatFolder = true; - private static boolean useSystemTypeface = true; - private static boolean hideStories = false; - private static boolean unlockedNoPremiumAccountsLimit = true; - - public static boolean isAntiAntiForward() { - return antiAntiForward; - } - - public static boolean isAntiRecall() { - return antiRecall; - } - - public static String getAntiRecallText() { - return antiRecallText; - } - - public static boolean isAntiRecallTextColorful() { - return antiRecallTextColorful; - } - - public static int getAntiRecallTextRed() { - return Math.max(Math.min(255, antiRecallTextRed), 0); - } - - public static int getAntiRecallTextGreen() { - return Math.max(Math.min(255, antiRecallTextGreen), 0); - } - - public static int getAntiRecallTextBlue() { - return Math.max(Math.min(255, antiRecallTextBlue), 0); - } - - public static boolean isNoSponsoredMessages() { - return noSponsoredMessages; - } - - public static boolean isProhibitChannelSwitching() { - return prohibitChannelSwitching; - } - - public static boolean isAllowMoveAllChatFolder() { - return allowMoveAllChatFolder; - } - - public static boolean isUseSystemTypeface() { - return useSystemTypeface; - } - - public static boolean isHideStories() { - return hideStories; - } - - public static boolean isUnlockedNoPremiumAccountsLimit() { - return unlockedNoPremiumAccountsLimit; - } - - public static void setAntiAntiForward(boolean value) { - antiAntiForward = value; - ConfigManager.save(); - } - - public static void setAntiRecallText(String value) { - antiRecallText = value; - ConfigManager.save(); - } - - public static void setAntiRecallTextColorful(boolean value) { - antiRecallTextColorful = value; - } - - public static void setAntiRecallTextRed(int red) { - antiRecallTextRed = red; - } - - public static void setAntiRecallTextGreen(int green) { - antiRecallTextGreen = green; - } - - public static void setAntiRecallTextBlue(int blue) { - antiRecallTextBlue = blue; - } - - public static void setAntiRecall(boolean value) { - antiRecall = value; - ConfigManager.save(); - } - - public static void setNoSponsoredMessages(boolean value) { - noSponsoredMessages = value; - ConfigManager.save(); - } - - public static void setProhibitChannelSwitching(boolean value) { - prohibitChannelSwitching = value; - ConfigManager.save(); - } - - public static void setAllowMoveAllChatFolder(boolean value) { - allowMoveAllChatFolder = value; - ConfigManager.save(); - } - - public static void setUseSystemTypeface(boolean value) { - useSystemTypeface = value; - ConfigManager.save(); - } - - public static void setHideStories(boolean value) { - hideStories = value; - ConfigManager.save(); - } - - public static void setUnlockedNoPremiumAccountsLimit(boolean value) { - unlockedNoPremiumAccountsLimit = value; - ConfigManager.save(); - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/AllowMoveAllChatFolder.java b/app/src/main/java/nep/timeline/re_telegram/features/AllowMoveAllChatFolder.java deleted file mode 100644 index d9207ea..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/AllowMoveAllChatFolder.java +++ /dev/null @@ -1,85 +0,0 @@ -package nep.timeline.re_telegram.features; - -import java.lang.reflect.Method; - -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.ClientChecker; -import nep.timeline.re_telegram.HookUtils; -import nep.timeline.re_telegram.Utils; -import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class AllowMoveAllChatFolder { - public static void init(ClassLoader classLoader) - { - String onDefaultTabMoved = AutomationResolver.resolve("DialogsActivity", "onDefaultTabMoved", AutomationResolver.ResolverType.Method); - Class dialogsActivity = null; - String dialogsActivityName = AutomationResolver.resolve("org.telegram.ui.DialogsActivity"); - if (dialogsActivityName.equals("org.telegram.ui.DialogsActivity")) { - for (int i = 0; i < 51; i++) - { - Class dialogsActivity$ = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.DialogsActivity$" + i), classLoader); - if (dialogsActivity$ != null) - for (Method declaredMethod : dialogsActivity$.getDeclaredMethods()) { - if (declaredMethod.getName().equals(onDefaultTabMoved)) - { - dialogsActivity = dialogsActivity$; - break; - } - } - } - } - else - dialogsActivity = XposedHelpers.findClassIfExists(dialogsActivityName, classLoader); - - if (dialogsActivity != null) - { - //HookUtils.findAndHookAllMethod( - XposedHelpers.findAndHookMethod(dialogsActivity, onDefaultTabMoved, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAllowMoveAllChatFolder()) - param.setResult(null); - } - }); - } - else - { - Utils.log("Not found DialogsActivity, " + Utils.issue); - } - - if (!ClientChecker.check(ClientChecker.ClientType.Nekogram)) { - Class filtersSetupActivity = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.Components.FilterTabsView$TouchHelperCallback"), classLoader); - if (filtersSetupActivity != null) { - String run = AutomationResolver.resolve("FilterTabsView$TouchHelperCallback", "onSelectedChanged", AutomationResolver.ResolverType.Method); - - HookUtils.findAndHookMethod(filtersSetupActivity, run, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAllowMoveAllChatFolder()) - param.setResult(null); - } - }); - } else { - Utils.log("Not found FiltersSetupActivity, " + Utils.issue); - } - } - else - { - Class filtersSetupActivity = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.FiltersSetupActivity$TouchHelperCallback"), classLoader); - if (filtersSetupActivity != null) { - String onSelectedChanged = AutomationResolver.resolve("FiltersSetupActivity$TouchHelperCallback", "resetDefaultPosition", AutomationResolver.ResolverType.Method); - XposedHelpers.findAndHookMethod(filtersSetupActivity, onSelectedChanged, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAllowMoveAllChatFolder()) - param.setResult(null); - } - }); - } else { - Utils.log("Not found FiltersSetupActivity$TouchHelperCallback, you maybe using an unsupported Nekogram version."); - } - } - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/AntiAntiForward.java b/app/src/main/java/nep/timeline/re_telegram/features/AntiAntiForward.java deleted file mode 100644 index c74e2ed..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/AntiAntiForward.java +++ /dev/null @@ -1,64 +0,0 @@ -package nep.timeline.re_telegram.features; - -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.HookUtils; -import nep.timeline.re_telegram.Utils; -import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class AntiAntiForward { - public static void init(ClassLoader classLoader) - { - Class messagesController = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.MessagesController"), classLoader); - if (messagesController != null) - { - String isChatNoForwardsMethod = AutomationResolver.resolve("MessagesController", "isChatNoForwards", AutomationResolver.ResolverType.Method); - HookUtils.findAndHookAllMethod(messagesController, isChatNoForwardsMethod, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiAntiForward()) - param.setResult(false); - } - }); - } - else - { - Utils.log("Not found MessagesController, " + Utils.issue); - } - - Class chatActivity = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.ChatActivity"), classLoader); - if (chatActivity != null) - { - String hasSelectedNoforwardsMessageMethod = AutomationResolver.resolve("ChatActivity", "hasSelectedNoforwardsMessage", AutomationResolver.ResolverType.Method); - XposedHelpers.findAndHookMethod(chatActivity, hasSelectedNoforwardsMessageMethod, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiAntiForward()) - param.setResult(false); - } - }); - } - else - { - Utils.log("Not found ChatActivity, " + Utils.issue); - } - - Class messageObject = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.MessageObject"), classLoader); - if (messageObject != null) - { - String canForwardMessageMethod = AutomationResolver.resolve("MessageObject", "canForwardMessage", AutomationResolver.ResolverType.Method); - XposedHelpers.findAndHookMethod(messageObject, canForwardMessageMethod, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiAntiForward()) - param.setResult(true); - } - }); - } - else - { - Utils.log("Not found MessageObject, " + Utils.issue); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/nep/timeline/re_telegram/features/AntiRecallWithDatabase.java b/app/src/main/java/nep/timeline/re_telegram/features/AntiRecallWithDatabase.java deleted file mode 100644 index 6170adc..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/AntiRecallWithDatabase.java +++ /dev/null @@ -1,455 +0,0 @@ -package nep.timeline.re_telegram.features; - -import android.content.ContentValues; -import android.database.Cursor; -import android.database.sqlite.SQLiteConstraintException; -import android.database.sqlite.SQLiteDatabase; -import android.text.SpannableStringBuilder; -import android.text.TextPaint; - -import java.io.File; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.CopyOnWriteArrayList; - -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.HookInit; -import nep.timeline.re_telegram.Utils; -import nep.timeline.re_telegram.application.HostApplicationInfo; -import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.language.Language; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; -import nep.timeline.re_telegram.structs.DeletedMessageInfo; -import nep.timeline.re_telegram.utils.FieldUtils; -import nep.timeline.re_telegram.virtuals.MessageObject; -import nep.timeline.re_telegram.virtuals.OfficialChatMessageCell; -import nep.timeline.re_telegram.virtuals.TLRPC; -import nep.timeline.re_telegram.virtuals.Theme; -import nep.timeline.re_telegram.virtuals.UserConfig; -import nep.timeline.re_telegram.virtuals.nekogram.NekoChatMessageCell; - -public class AntiRecallWithDatabase { - private static final Map mDatabase = new HashMap<>(1); - private static final CopyOnWriteArrayList shouldDeletedMessageInfo = new CopyOnWriteArrayList<>(); - private static final CopyOnWriteArrayList shouldDeletedMessageInfo2 = new CopyOnWriteArrayList<>(); - - private static final Object lock = new Object(); - - private static SQLiteDatabase ensureDatabase(int slot) { - if (!(slot >= 0 && slot < Short.MAX_VALUE)) { - throw new IllegalArgumentException("invalid slot: " + slot); - } - if (mDatabase.containsKey(slot)) { - return mDatabase.get(slot); - } - File databaseFile = Utils.deletedMessagesDatabasePath; - boolean createTable = !databaseFile.exists(); - SQLiteDatabase database = SQLiteDatabase.openDatabase( - databaseFile.getAbsolutePath(), - null, - SQLiteDatabase.OPEN_READWRITE | (createTable ? SQLiteDatabase.CREATE_IF_NECESSARY : 0) - ); - synchronized (lock) { - database.beginTransaction(); - try { - database.rawQuery("PRAGMA secure_delete = ON", null).close(); - database.rawQuery("PRAGMA temp_store = MEMORY", null).close(); - database.rawQuery("PRAGMA journal_mode = WAL", null).close(); - database.rawQuery("PRAGMA journal_size_limit = 10485760", null).close(); - database.rawQuery("PRAGMA busy_timeout = 5000", null).close(); - database.setTransactionSuccessful(); - } finally { - database.endTransaction(); - } - } - database.execSQL(""" - CREATE TABLE IF NOT EXISTS t_deleted_messages ( - message_id INTEGER NOT NULL, - dialog_id INTEGER NOT NULL - );"""); - database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_combined ON t_deleted_messages (message_id, dialog_id)"); - mDatabase.put(slot, database); - return database; - } - - private static boolean messageIsDeleted(int messageId, long dialogId) { - int currentSlot = UserConfig.getSelectedAccount(); - if (currentSlot < 0) { - Utils.log("message_is_delete: no active account"); - return false; - } - SQLiteDatabase database = ensureDatabase(currentSlot); - Cursor cursor = null; - boolean result; - - try { - String[] columns = {"message_id", "dialog_id"}; - String selection = "message_id = ? AND dialog_id = ?"; - String[] selectionArgs = {String.valueOf(messageId), String.valueOf(dialogId)}; - cursor = database.query("t_deleted_messages", columns, selection, selectionArgs, null, null, null); - - result = (cursor.getCount() > 0); - } finally { - if (cursor != null) { - cursor.close(); - } - } - - return result; - } - - private static void insertDeletedMessage(ArrayList messageIds, long dialogId) { - int currentSlot = UserConfig.getSelectedAccount(); - if (currentSlot < 0) { - Utils.log("message_is_delete: no active account"); - return; - } - SQLiteDatabase database = ensureDatabase(currentSlot); - database.beginTransaction(); - try { - for (Integer messageId : messageIds) { - if (messageIsDeleted(messageId, dialogId)) - continue; - - ContentValues values = new ContentValues(); - values.put("message_id", messageId); - values.put("dialog_id", dialogId); - - database.insert("t_deleted_messages", null, values); - } - database.setTransactionSuccessful(); - } catch (Exception e) { - if (!(e instanceof SQLiteConstraintException)) { - Utils.log("failed to insert deleted message: " + e.getMessage()); - } - } finally { - database.endTransaction(); - } - } - - private static DeletedMessageInfo isShouldDeletedMessage(long channelID, int messageId) { - for (DeletedMessageInfo deletedMessagesId : shouldDeletedMessageInfo) - if (deletedMessagesId.getSelectedAccount() == UserConfig.getSelectedAccount() && deletedMessagesId.getChannelID() == channelID && deletedMessagesId.getMessageIds().contains(messageId)) - return deletedMessagesId; - return null; - } - - private static DeletedMessageInfo isShouldDeletedMessage2(long channelID, int messageId) { - for (DeletedMessageInfo deletedMessagesId : shouldDeletedMessageInfo2) - if (deletedMessagesId.getSelectedAccount() == UserConfig.getSelectedAccount() && deletedMessagesId.getChannelID() == channelID && deletedMessagesId.getMessageIds().contains(messageId)) - return deletedMessagesId; - return null; - } - - private static void addShouldDeletedMessage(long channelID, Integer messageId) { - boolean needInit = true; - DeletedMessageInfo info = null; - for (DeletedMessageInfo deletedMessagesId : shouldDeletedMessageInfo) { - if (deletedMessagesId.getSelectedAccount() == UserConfig.getSelectedAccount() && deletedMessagesId.getChannelID() == channelID) - { - info = deletedMessagesId; - needInit = false; - break; - } - } - if (needInit) - shouldDeletedMessageInfo.add(new DeletedMessageInfo(UserConfig.getSelectedAccount(), channelID, messageId)); - else - { - if (!info.getMessageIds().contains(messageId)) // No duplication - info.insertMessageId(messageId); - } - } - - private static void addShouldDeletedMessage2(long channelID, Integer messageId) { - boolean needInit = true; - DeletedMessageInfo info = null; - for (DeletedMessageInfo deletedMessagesId : shouldDeletedMessageInfo2) { - if (deletedMessagesId.getSelectedAccount() == UserConfig.getSelectedAccount() && deletedMessagesId.getChannelID() == channelID) - { - info = deletedMessagesId; - needInit = false; - break; - } - } - if (needInit) - shouldDeletedMessageInfo2.add(new DeletedMessageInfo(UserConfig.getSelectedAccount(), channelID, messageId)); - else - { - if (!info.getMessageIds().contains(messageId)) // No duplication - info.insertMessageId(messageId); - } - } - - private static String getCurrentTimeStringClassName(Object chatMessageCellInstance) - { - Object currentTimeString = FieldUtils.getFieldClassOfClass(chatMessageCellInstance, "currentTimeString"); - assert currentTimeString != null; - return currentTimeString.getClass().getSimpleName(); - } - - public static void initUI(ClassLoader classLoader) - { - Class chatMessageCell = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.Cells.ChatMessageCell"), classLoader); - - if (chatMessageCell != null) { - XposedHelpers.findAndHookMethod(chatMessageCell, AutomationResolver.resolve("ChatMessageCell", "measureTime", AutomationResolver.ResolverType.Method), AutomationResolver.resolve("org.telegram.messenger.MessageObject"), new AbstractMethodHook() { - @Override - protected void afterMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) { - String text = Language.resolve(HostApplicationInfo.getApplication().getResources().getConfiguration().locale, "antirecall.message.deleted"); - Object msgObj = param.args[0]; - if (msgObj == null) - return; - MessageObject messageObject = new MessageObject(msgObj); - if (messageObject == null) - return; - TLRPC.Message owner = messageObject.getMessageOwner(); - if (owner == null) - return; - int id = owner.getID(); - long channel_id = -owner.getPeerID().getChannelID(); - if (messageIsDeleted(id, channel_id)) { - if (getCurrentTimeStringClassName(param.thisObject).equals("SpannableStringBuilder")) { - NekoChatMessageCell cell = new NekoChatMessageCell(param.thisObject); - SpannableStringBuilder time = cell.getCurrentTimeString(); - String delta = "(" + text + ") "; - SpannableStringBuilder newDelta = new SpannableStringBuilder(); - newDelta.append(delta).append(time); - time = newDelta; - cell.setCurrentTimeString(time); - TextPaint paint = Theme.getTextPaint(classLoader); - if (paint != null) - { - int deltaWidth = (int) Math.ceil(paint.measureText(delta)); - cell.setTimeTextWidth(deltaWidth + cell.getTimeTextWidth()); - cell.setTimeWidth(deltaWidth + cell.getTimeWidth()); - } - } else { - OfficialChatMessageCell cell = new OfficialChatMessageCell(param.thisObject); - String time = (String) cell.getCurrentTimeString(); - String delta = "(" + text + ") "; - time = delta + time; - cell.setCurrentTimeString(time); - TextPaint paint = Theme.getTextPaint(classLoader); - if (paint != null) - { - int deltaWidth = (int) Math.ceil(paint.measureText(delta)); - cell.setTimeTextWidth(deltaWidth + cell.getTimeTextWidth()); - cell.setTimeWidth(deltaWidth + cell.getTimeWidth()); - } - } - } - } - } - }); - } else { - Utils.log("Not found ChatMessageCell, " + Utils.issue); - } - } - - public static void init(ClassLoader classLoader) - { - Class messagesController = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.MessagesController"), classLoader); - if (messagesController != null) { - Method[] messagesControllerMethods = messagesController.getDeclaredMethods(); - List methodNames = new ArrayList<>(); - - for (Method method : messagesControllerMethods) - if (method.getParameterCount() == 5 && method.getParameterTypes()[0] == ArrayList.class && method.getParameterTypes()[1] == ArrayList.class && method.getParameterTypes()[2] == ArrayList.class && method.getParameterTypes()[3] == boolean.class && method.getParameterTypes()[4] == int.class) - methodNames.add(method.getName()); - - if (methodNames.size() != 1) - Utils.log("Failed to hook processUpdateArray! Reason: " + (methodNames.isEmpty() ? "No method found" : "Multiple methods found") + ", " + Utils.issue); - else { - String methodName = methodNames.get(0); - - XposedHelpers.findAndHookMethod(messagesController, methodName, ArrayList.class, ArrayList.class, ArrayList.class, boolean.class, int.class, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) - { - Class TL_updateDeleteMessages = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.tgnet.TLRPC$TL_updateDeleteMessages"), classLoader); - Class TL_updateDeleteChannelMessages = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.tgnet.TLRPC$TL_updateDeleteChannelMessages"), classLoader); - //Class TL_updateDeleteScheduledMessages = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.tgnet.TLRPC$TL_updateDeleteScheduledMessages"), classLoader); - CopyOnWriteArrayList updates = new CopyOnWriteArrayList<>(Utils.castList(param.args[0], Object.class)); - if (updates != null && !updates.isEmpty()) { - //ArrayList newUpdates = new ArrayList<>(); - - for (Object item : updates) { - //if (!item.getClass().equals(TL_updateDeleteChannelMessages) && !item.getClass().equals(TL_updateDeleteMessages))// && !item.getClass().equals(TL_updateDeleteScheduledMessages)) - //newUpdates.add(item); - - //if (item.getClass().equals(TL_updateDeleteScheduledMessages)) - // AntiRecall.insertDeletedMessage(new TLRPC.TL_updateDeleteScheduledMessages(item).getMessages()); - - if (item.getClass().equals(TL_updateDeleteChannelMessages)) - { - TLRPC.TL_updateDeleteChannelMessages channelMessages = new TLRPC.TL_updateDeleteChannelMessages(item); - insertDeletedMessage(channelMessages.getMessages(), -channelMessages.getChannelID()); - } - - if (item.getClass().equals(TL_updateDeleteMessages)) - insertDeletedMessage(new TLRPC.TL_updateDeleteMessages(item).getMessages(), DeletedMessageInfo.NOT_CHANNEL); - - if (HookInit.DEBUG_MODE && (item.getClass().equals(TL_updateDeleteMessages) || item.getClass().equals(TL_updateDeleteChannelMessages))) - Utils.log("Protected message! event: " + item.getClass()); - } - - //param.args[0] = newUpdates; - } - } - } - }); - } - } - else - { - Utils.log("Not found MessagesController, " + Utils.issue); - } - } - - public static void initProcessing(ClassLoader classLoader) { - Class messagesStorage = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.MessagesStorage"), classLoader); - Class notificationCenter = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.NotificationCenter"), classLoader); - Class notificationsController = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.NotificationsController"), classLoader); - - List markMessagesAsDeletedMethods = new ArrayList<>(); - for (Method method : messagesStorage.getDeclaredMethods()) { - if (method.getName().equals(AutomationResolver.resolve("MessagesStorage", "markMessagesAsDeleted", AutomationResolver.ResolverType.Method))) { - markMessagesAsDeletedMethods.add(method); - } - } - - if (markMessagesAsDeletedMethods.isEmpty()) { - Utils.log("Failed to hook markMessagesAsDeleted! Reason: No method found, " + Utils.issue); - return; - } - - for (Method markMessagesAsDeletedMethod : markMessagesAsDeletedMethods) { - XposedBridge.hookMethod(markMessagesAsDeletedMethod, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) { - ArrayList deletedMessages = new ArrayList<>(); - - ArrayList original = Utils.castList(param.args[1], Integer.class); - - if (original.isEmpty()) - return; - - long channel_id = (long) param.args[0]; - if (channel_id > 0) - channel_id = 0; - - for (Integer msgId : original) { - DeletedMessageInfo shouldDeletedMessage = isShouldDeletedMessage(channel_id, msgId); - DeletedMessageInfo shouldDeletedMessage2 = isShouldDeletedMessage2(channel_id, msgId); - if (shouldDeletedMessage2 != null || !messageIsDeleted(msgId, channel_id)) { - deletedMessages.add(msgId); - if (shouldDeletedMessage != null) - shouldDeletedMessageInfo.remove(shouldDeletedMessage); - if (shouldDeletedMessage2 != null) - shouldDeletedMessageInfo2.remove(shouldDeletedMessage2); - } - } - - if (deletedMessages.isEmpty()) - param.setResult(null); - else { - ((ArrayList) param.args[1]).clear(); - ((ArrayList) param.args[1]).addAll(deletedMessages); - } - } - } - }); - } - - Method updateDialogsWithDeletedMessagesMethod = null; - for (Method method : messagesStorage.getDeclaredMethods()) { - if (method.getName().equals(AutomationResolver.resolve("MessagesStorage", "updateDialogsWithDeletedMessages", AutomationResolver.ResolverType.Method)) && Objects.equals(method.getParameterTypes()[2], ArrayList.class)) { - updateDialogsWithDeletedMessagesMethod = method; - } - } - - if (updateDialogsWithDeletedMessagesMethod == null) { - Utils.log("Failed to hook updateDialogsWithDeletedMessages! Reason: No method found, " + Utils.issue); - return; - } - - XposedBridge.hookMethod(updateDialogsWithDeletedMessagesMethod, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (param.args[2] instanceof ArrayList) - { - long channelID = -((long) param.args[1]); - if (channelID > 0) - channelID = 0; - - ArrayList deletedMessages = new ArrayList<>(); - - ArrayList original = Utils.castList(param.args[2], Integer.class); - if (original.isEmpty()) - return; - - for (Integer msgId : original) { - if (isShouldDeletedMessage(channelID, msgId) == null) - if (messageIsDeleted(msgId, channelID)) - addShouldDeletedMessage(channelID, msgId); - else - deletedMessages.remove(msgId); - else if (isShouldDeletedMessage2(channelID, msgId) == null) - if (messageIsDeleted(msgId, channelID)) - addShouldDeletedMessage2(channelID, msgId); - else - deletedMessages.remove(msgId); - else - deletedMessages.add(msgId); - } - - ((ArrayList) param.args[2]).clear(); - ((ArrayList) param.args[2]).addAll(deletedMessages); - //param.setResult(null); - } - } - }); - - int messagesDeletedValue = (int) XposedHelpers.getStaticObjectField(notificationCenter, AutomationResolver.resolve("NotificationCenter", "messagesDeleted", AutomationResolver.ResolverType.Field)); - - XposedHelpers.findAndHookMethod(notificationCenter, AutomationResolver.resolve("NotificationCenter", "postNotificationName", AutomationResolver.ResolverType.Method), int.class, Object[].class, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - int id = (int) param.args[0]; - if (Configs.isAntiRecall() && id == messagesDeletedValue) { - //Object[] args = (Object[]) param.args[1]; - //long dialogID = (long) args[1]; - //ArrayList arrayList = Utils.castList(args[0], Integer.class); - param.setResult(null); - //insertDeletedMessage(arrayList, dialogID); - } - } - }); - - Method removeDeletedMessagesFromNotifications = null; - for (Method method : notificationsController.getDeclaredMethods()) - if (method.getName().equals(AutomationResolver.resolve("NotificationsController", "removeDeletedMessagesFromNotifications", AutomationResolver.ResolverType.Method))) - removeDeletedMessagesFromNotifications = method; - - if (removeDeletedMessagesFromNotifications == null) - Utils.log("Failed to hook removeDeletedMessagesFromNotifications! Reason: No method found, " + Utils.issue); - else - XposedBridge.hookMethod(removeDeletedMessagesFromNotifications, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) - param.setResult(null); - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/nep/timeline/re_telegram/features/FakePremium.java b/app/src/main/java/nep/timeline/re_telegram/features/FakePremium.java deleted file mode 100644 index f70751c..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/FakePremium.java +++ /dev/null @@ -1,12 +0,0 @@ -package nep.timeline.re_telegram.features; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class FakePremium { - public static void init(ClassLoader classLoader) - { - XposedHelpers.findAndHookMethod(AutomationResolver.resolve("org.telegram.messenger.UserConfig"), classLoader, AutomationResolver.resolve("isPremium"), XC_MethodReplacement.returnConstant(true)); - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/HideStories.java b/app/src/main/java/nep/timeline/re_telegram/features/HideStories.java deleted file mode 100644 index 6ace17d..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/HideStories.java +++ /dev/null @@ -1,33 +0,0 @@ -package nep.timeline.re_telegram.features; - -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class HideStories { - public static void init(ClassLoader classLoader) - { - Class StoriesController = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.Stories.StoriesController"), classLoader); - if (StoriesController != null) - XposedHelpers.findAndHookMethod(StoriesController, AutomationResolver.resolve("StoriesController", "hasStories", AutomationResolver.ResolverType.Method), new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam methodHookParam) - { - if (Configs.isHideStories()) - methodHookParam.setResult(false); - } - }); - - Class MessagesController = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.MessagesController"), classLoader); - if (MessagesController != null) - XposedHelpers.findAndHookMethod(MessagesController, AutomationResolver.resolve("MessagesController", "storiesEnabled", AutomationResolver.ResolverType.Method), new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam methodHookParam) - { - if (Configs.isHideStories()) - methodHookParam.setResult(false); - } - }); - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/NoSponsoredMessages.java b/app/src/main/java/nep/timeline/re_telegram/features/NoSponsoredMessages.java deleted file mode 100644 index ebb1e5b..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/NoSponsoredMessages.java +++ /dev/null @@ -1,62 +0,0 @@ -package nep.timeline.re_telegram.features; - -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.ClientChecker; -import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class NoSponsoredMessages { - public static void init(ClassLoader classLoader) - { - Class messagesController = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.MessagesController"), classLoader); - Class chatActivity = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.ChatActivity"), classLoader); - - if (ClientChecker.check(ClientChecker.ClientType.Yukigram)) { - XposedHelpers.findAndHookMethod(chatActivity, AutomationResolver.resolve("ChatActivity", "addSponsoredMessages", AutomationResolver.ResolverType.Method), boolean.class, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isNoSponsoredMessages()) - param.setResult(null); - } - }); - } else { - XposedHelpers.findAndHookMethod(chatActivity, AutomationResolver.resolve("ChatActivity", "addSponsoredMessages", AutomationResolver.ResolverType.Method), boolean.class, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isNoSponsoredMessages()) - param.setResult(null); - } - }); - - XposedHelpers.findAndHookMethod(messagesController, AutomationResolver.resolve("MessagesController", "getSponsoredMessages", AutomationResolver.ResolverType.Method), long.class, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isNoSponsoredMessages()) - param.setResult(null); - } - }); - /*List methods = new ArrayList<>(); - - for (Method method : messagesController.getDeclaredMethods()) { - if (method.getName().contains("SponsoredMessages")) - methods.add(method); - } - - for (Method method : chatActivity.getDeclaredMethods()) { - if (method.getName().contains("SponsoredMessages")) - methods.add(method); - } - - for (Method method : methods) { - XposedBridge.hookMethod(method, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isNoSponsoredMessages()) - param.setResult(null); - } - }); - }*/ - } - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/ProhibitChannelSwitching.java b/app/src/main/java/nep/timeline/re_telegram/features/ProhibitChannelSwitching.java deleted file mode 100644 index 05b7d46..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/ProhibitChannelSwitching.java +++ /dev/null @@ -1,53 +0,0 @@ -package nep.timeline.re_telegram.features; - -import java.lang.reflect.Method; - -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.ClientChecker; -import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class ProhibitChannelSwitching { - public static void init(ClassLoader classLoader) { - Class chatPullingDownDrawable = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.ui.ChatPullingDownDrawable"), classLoader); - for (Method method : chatPullingDownDrawable.getDeclaredMethods()) - { - if (method.getName().equals(AutomationResolver.resolve("ChatPullingDownDrawable", "getNextUnreadDialog", AutomationResolver.ResolverType.Method)) - || method.getName().equals(AutomationResolver.resolve("ChatPullingDownDrawable", "drawBottomPanel", AutomationResolver.ResolverType.Method)) - || method.getName().equals(AutomationResolver.resolve("ChatPullingDownDrawable", "draw", AutomationResolver.ResolverType.Method))) - { - XposedBridge.hookMethod(method, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isProhibitChannelSwitching()) - param.setResult(null); - } - }); - } - - if (method.getName().equals(AutomationResolver.resolve("ChatPullingDownDrawable", "showBottomPanel", AutomationResolver.ResolverType.Method))) - { - XposedBridge.hookMethod(method, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isProhibitChannelSwitching()) - param.args[0] = false; - } - }); - } - - if (!ClientChecker.check(ClientChecker.ClientType.Nekogram) && method.getName().equals(AutomationResolver.resolve("ChatPullingDownDrawable", "needDrawBottomPanel", AutomationResolver.ResolverType.Method))) - { - XposedBridge.hookMethod(method, new AbstractMethodHook() { - @Override - protected void beforeMethod(MethodHookParam param) { - if (Configs.isProhibitChannelSwitching()) - param.setResult(false); - } - }); - } - } - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/UnlockedNoPremiumAccountsLimit.java b/app/src/main/java/nep/timeline/re_telegram/features/UnlockedNoPremiumAccountsLimit.java deleted file mode 100644 index dc871ce..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/UnlockedNoPremiumAccountsLimit.java +++ /dev/null @@ -1,14 +0,0 @@ -package nep.timeline.re_telegram.features; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; - -public class UnlockedNoPremiumAccountsLimit { - public static void init(ClassLoader classLoader) - { - if (Configs.isUnlockedNoPremiumAccountsLimit()) - XposedHelpers.findAndHookMethod(AutomationResolver.resolve("org.telegram.messenger.UserConfig"), classLoader, AutomationResolver.resolve("hasPremiumOnAccounts"), XC_MethodReplacement.returnConstant(true)); - } -} diff --git a/app/src/main/java/nep/timeline/re_telegram/features/UseSystemTypeface.java b/app/src/main/java/nep/timeline/re_telegram/features/UseSystemTypeface.java deleted file mode 100644 index c87bbca..0000000 --- a/app/src/main/java/nep/timeline/re_telegram/features/UseSystemTypeface.java +++ /dev/null @@ -1,54 +0,0 @@ -package nep.timeline.re_telegram.features; - -import android.graphics.Typeface; -import android.os.Build; - -import java.lang.reflect.InvocationTargetException; -import java.util.Hashtable; - -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import nep.timeline.re_telegram.base.AbstractReplaceHook; -import nep.timeline.re_telegram.configs.Configs; -import nep.timeline.re_telegram.obfuscate.AutomationResolver; -import nep.timeline.re_telegram.utils.FieldUtils; - -public class UseSystemTypeface { - public static void init(ClassLoader classLoader) - { - Class androidUtilities = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.messenger.AndroidUtilities"), classLoader); - XposedHelpers.findAndHookMethod(androidUtilities, AutomationResolver.resolve("AndroidUtilities", "getTypeface", AutomationResolver.ResolverType.Method), String.class, new AbstractReplaceHook() { - @Override - protected Object replaceMethod(MethodHookParam param) throws Throwable { - Object typefaceCache = FieldUtils.getFieldFromMultiName(androidUtilities, AutomationResolver.resolve("AndroidUtilities", "typefaceCache", AutomationResolver.ResolverType.Field), Hashtable.class).get(param.thisObject); - synchronized (typefaceCache) { - String assetPath = (String) param.args[0]; - if (Configs.isUseSystemTypeface() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (assetPath.contains("medium") && assetPath.contains("italic")) { - return Typeface.create("sans-serif-medium", Typeface.ITALIC); - } - if (assetPath.contains("medium")) { - return Typeface.create("sans-serif-medium", Typeface.NORMAL); - } - if (assetPath.contains("italic")) { - return Typeface.create((Typeface) null, Typeface.ITALIC); - } - if (assetPath.contains("mono")) { - return Typeface.MONOSPACE; - } - if (assetPath.contains("mw_bold")) { - return Typeface.create("serif", Typeface.BOLD); - } - // return Typeface.create((Typeface) null, Typeface.NORMAL); - } - - try { - return XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args); - } catch (InvocationTargetException ex) { - throw ex.getTargetException(); - } - } - } - }); - } -} diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index e8f46b3..1deb9e1 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -5,7 +5,6 @@ org.telegram.messenger.web org.telegram.messenger.beta org.telegram.plus - org.telegram.mdgram xyz.nextalone.nagram com.xtaolabs.pagergram xyz.nextalone.nnngram diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72..26f1e43 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ +#Sun Dec 08 23:54:24 CST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From ef3849b16fac88b037ad30cc12e4088c1b5e0644 Mon Sep 17 00:00:00 2001 From: 86189 Date: Wed, 11 Dec 2024 22:58:13 +0800 Subject: [PATCH 4/6] Remove Config Setting Remove all functions except for anti recall --- app/src/main/AndroidManifest.xml | 2 +- .../nep/timeline/re_telegram/HookInit.java | 1 - .../re_telegram/features/NEWAntiRecall.java | 93 ++++++++----------- 3 files changed, 42 insertions(+), 54 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9f53d93..8214b3c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ android:value="true" /> + android:value="A Telegram anti recall xposed module." /> diff --git a/app/src/main/java/nep/timeline/re_telegram/HookInit.java b/app/src/main/java/nep/timeline/re_telegram/HookInit.java index cb25222..41fc125 100644 --- a/app/src/main/java/nep/timeline/re_telegram/HookInit.java +++ b/app/src/main/java/nep/timeline/re_telegram/HookInit.java @@ -26,7 +26,6 @@ public class HookInit implements IXposedHookLoadPackage { "it.octogram.android", "xyz.nextalone.nnngram", "it.belloworld.mercurygram"); - private static final List notNeedHideStories = Arrays.asList("tw.nekomimi.nekogram", "com.exteragram.messenger", "uz.unnarsx.cherrygram"); private static final List hookPackagesCustomization = Arrays.asList("xyz.nextalone.nagram", "nekox.messenger", "com.xtaolabs.pagergram", "nekox.messenger.broken"); public static final boolean DEBUG_MODE = false; diff --git a/app/src/main/java/nep/timeline/re_telegram/features/NEWAntiRecall.java b/app/src/main/java/nep/timeline/re_telegram/features/NEWAntiRecall.java index 9afe730..fae90a2 100644 --- a/app/src/main/java/nep/timeline/re_telegram/features/NEWAntiRecall.java +++ b/app/src/main/java/nep/timeline/re_telegram/features/NEWAntiRecall.java @@ -25,7 +25,6 @@ import nep.timeline.re_telegram.Utils; import nep.timeline.re_telegram.application.HostApplicationInfo; import nep.timeline.re_telegram.base.AbstractMethodHook; -import nep.timeline.re_telegram.configs.Configs; import nep.timeline.re_telegram.language.Language; import nep.timeline.re_telegram.obfuscate.AutomationResolver; import nep.timeline.re_telegram.structs.DeletedMessageInfo; @@ -131,7 +130,7 @@ private static void addShouldDeletedMessage(long channelID, Integer messageId) { shouldDeletedMessageInfo.add(new DeletedMessageInfo(UserConfig.getSelectedAccount(), channelID, messageId)); else { - if (!info.getMessageIds().contains(messageId)) // No duplication + if (!info.getMessageIds().contains(messageId)) info.insertMessageId(messageId); } } @@ -151,7 +150,7 @@ private static void addShouldDeletedMessage2(long channelID, Integer messageId) shouldDeletedMessageInfo2.add(new DeletedMessageInfo(UserConfig.getSelectedAccount(), channelID, messageId)); else { - if (!info.getMessageIds().contains(messageId)) // No duplication + if (!info.getMessageIds().contains(messageId)) info.insertMessageId(messageId); } } @@ -177,11 +176,10 @@ public static void initUI(ClassLoader classLoader) XposedHelpers.findAndHookMethod(chatMessageCell, AutomationResolver.resolve("ChatMessageCell", "setVisibleOnScreen", AutomationResolver.ResolverType.Method), boolean.class, float.class, float.class, new AbstractMethodHook() { @Override protected void afterMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) { boolean visible = (boolean) param.args[0]; if (visible) currentMessageObject = new MessageObject(XposedHelpers.getObjectField(param.thisObject, AutomationResolver.resolve("ChatMessageCell", "currentMessageObject", AutomationResolver.ResolverType.Field))); - } + } }); @@ -189,9 +187,8 @@ protected void afterMethod(MethodHookParam param) { @Override protected void afterMethod(MethodHookParam param) { try { - if (Configs.isAntiRecall()) { lastVisibleTime = System.currentTimeMillis(); - String text = Configs.getAntiRecallText().isEmpty() ? ("(" + Language.resolve(HostApplicationInfo.getApplication().getResources().getConfiguration().locale, "antirecall.message.deleted") + ")") : Configs.getAntiRecallText(); + String text = "(" + Language.resolve(HostApplicationInfo.getApplication().getResources().getConfiguration().locale, "antirecall.message.deleted") + ")"; Object msgObj = param.args[0]; if (msgObj == null) return; @@ -202,45 +199,42 @@ protected void afterMethod(MethodHookParam param) { if (owner == null) return; int flags = owner.getFlags(); - if ((flags & FLAG_DELETED) != 0) { - if (getCurrentTimeStringClassName(param.thisObject).equals("SpannableStringBuilder")) { - NekoChatMessageCell cell = new NekoChatMessageCell(param.thisObject); - SpannableStringBuilder time = cell.getCurrentTimeString(); - SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); - if (Configs.isAntiRecallTextColorful()) - spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.rgb(Configs.getAntiRecallTextRed(), Configs.getAntiRecallTextGreen(), Configs.getAntiRecallTextBlue())), 0, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - spannableStringBuilder.append(" "); - time.insert(0, spannableStringBuilder); - cell.setCurrentTimeString(time); - TextPaint paint = Theme.getTextPaint(classLoader); - if (paint != null) { - int ceil = (int) Math.ceil(paint.measureText(spannableStringBuilder, 0, spannableStringBuilder.length())); - cell.setTimeTextWidth(ceil + cell.getTimeTextWidth()); - cell.setTimeWidth(ceil + cell.getTimeWidth()); - } - } else { - OfficialChatMessageCell cell = new OfficialChatMessageCell(param.thisObject); - SpannableStringBuilder time = convertToStringBuilder(cell.getCurrentTimeString()); - if (time == null) - return; - SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); - if (Configs.isAntiRecallTextColorful()) - spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.rgb(Configs.getAntiRecallTextRed(), Configs.getAntiRecallTextGreen(), Configs.getAntiRecallTextBlue())), 0, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - spannableStringBuilder.append(" "); - time.insert(0, spannableStringBuilder); - cell.setCurrentTimeString(time); - TextPaint paint = Theme.getTextPaint(classLoader); - if (paint != null) { - int ceil = (int) Math.ceil(paint.measureText(spannableStringBuilder, 0, spannableStringBuilder.length())); - cell.setTimeTextWidth(ceil + cell.getTimeTextWidth()); - cell.setTimeWidth(ceil + cell.getTimeWidth()); - } + if ((flags & FLAG_DELETED) != 0) { + if (getCurrentTimeStringClassName(param.thisObject).equals("SpannableStringBuilder")) { + NekoChatMessageCell cell = new NekoChatMessageCell(param.thisObject); + SpannableStringBuilder time = cell.getCurrentTimeString(); + SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); + spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.RED), 0, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableStringBuilder.append(" "); + time.insert(0, spannableStringBuilder); + cell.setCurrentTimeString(time); + TextPaint paint = Theme.getTextPaint(classLoader); + if (paint != null) { + int ceil = (int) Math.ceil(paint.measureText(spannableStringBuilder, 0, spannableStringBuilder.length())); + cell.setTimeTextWidth(ceil + cell.getTimeTextWidth()); + cell.setTimeWidth(ceil + cell.getTimeWidth()); } } else { + OfficialChatMessageCell cell = new OfficialChatMessageCell(param.thisObject); + SpannableStringBuilder time = convertToStringBuilder(cell.getCurrentTimeString()); + if (time == null) + return; + SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); + spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.RED), 0, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableStringBuilder.append(" "); + time.insert(0, spannableStringBuilder); + cell.setCurrentTimeString(time); + TextPaint paint = Theme.getTextPaint(classLoader); + if (paint != null) { + int ceil = (int) Math.ceil(paint.measureText(spannableStringBuilder, 0, spannableStringBuilder.length())); + cell.setTimeTextWidth(ceil + cell.getTimeTextWidth()); + cell.setTimeWidth(ceil + cell.getTimeWidth()); + } + } + } else { TextPaint paint = Theme.getTextPaint(classLoader); paint.setShadowLayer(0, 0, 0, Color.WHITE); } - } } catch (Throwable throwable) { Utils.log(throwable); } @@ -271,8 +265,6 @@ public static void init(ClassLoader classLoader) @Override protected void beforeMethod(MethodHookParam param) { try { - if (Configs.isAntiRecall()) - { Class TL_updateDeleteMessages = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.tgnet.TLRPC$TL_updateDeleteMessages"), classLoader); Class TL_updateDeleteChannelMessages = XposedHelpers.findClassIfExists(AutomationResolver.resolve("org.telegram.tgnet.TLRPC$TL_updateDeleteChannelMessages"), classLoader); CopyOnWriteArrayList updates = new CopyOnWriteArrayList<>(Utils.castList(param.args[0], Object.class)); @@ -320,8 +312,9 @@ protected void beforeMethod(MethodHookParam param) { } param.args[0] = newUpdates; } - } - } catch (Throwable throwable) { + + } + catch (Throwable throwable) { Utils.log(throwable); } } @@ -341,7 +334,6 @@ public static void initProcessing(ClassLoader classLoader) { XposedHelpers.findAndHookMethod(messagesStorage, AutomationResolver.resolve("MessagesStorage", "markMessagesAsDeletedInternal", AutomationResolver.ResolverType.Method), long.class, ArrayList.class, boolean.class, int.class, int.class, new AbstractMethodHook() { @Override protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) { long dialogId = (long) param.args[0]; if (currentMessageObject != null && (System.currentTimeMillis() - lastVisibleTime) < 1500) { long objectId = currentMessageObject.getDialogId(); @@ -383,14 +375,13 @@ protected void beforeMethod(MethodHookParam param) { ((ArrayList) param.args[1]).clear(); ((ArrayList) param.args[1]).addAll(deletedMessages); } - } + } }); XposedHelpers.findAndHookMethod(messagesStorage, AutomationResolver.resolve("MessagesStorage", "updateDialogsWithDeletedMessagesInternal", AutomationResolver.ResolverType.Method), long.class, long.class, ArrayList.class, ArrayList.class, new AbstractMethodHook() { @Override protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) { long dialogId = (long) param.args[0]; if (currentMessageObject != null && (System.currentTimeMillis() - lastVisibleTime) < 1500) { long objectId = currentMessageObject.getDialogId(); @@ -438,7 +429,7 @@ else if (isShouldDeletedMessage2(channelID, msgId) == null) ((ArrayList) param.args[2]).clear(); ((ArrayList) param.args[2]).addAll(deletedMessages); } - } + } }); @@ -457,7 +448,6 @@ else if (isShouldDeletedMessage2(channelID, msgId) == null) XposedBridge.hookMethod(updateDialogsWithDeletedMessagesMethod, new AbstractMethodHook() { @Override protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) { long dialogId = (long) param.args[0]; if (currentMessageObject != null && (System.currentTimeMillis() - lastVisibleTime) < 1500) { long objectId = currentMessageObject.getDialogId(); @@ -506,7 +496,7 @@ else if (isShouldDeletedMessage2(channelID, msgId) == null) ((ArrayList) param.args[2]).clear(); ((ArrayList) param.args[2]).addAll(deletedMessages); } - } + } }); @@ -521,7 +511,6 @@ else if (isShouldDeletedMessage2(channelID, msgId) == null) XposedBridge.hookMethod(removeDeletedMessagesFromNotifications, new AbstractMethodHook() { @Override protected void beforeMethod(MethodHookParam param) { - if (Configs.isAntiRecall()) param.setResult(null); } }); From ff8d82c72704bb6693422577bbe877ccc3188298 Mon Sep 17 00:00:00 2001 From: 86189 Date: Wed, 11 Dec 2024 23:15:05 +0800 Subject: [PATCH 5/6] Remove Config Setting Remove all functions except for anti recall --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8214b3c..171df2a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ android:value="true" /> + android:value="A Telegram anti recall module." /> From 9f9e0a4d5ffb1398b9840579960782ceeab30700 Mon Sep 17 00:00:00 2001 From: 86189 Date: Wed, 11 Dec 2024 23:17:01 +0800 Subject: [PATCH 6/6] Remove Config Setting Remove all functions except for anti recall --- .../main/java/nep/timeline/re_telegram/ClientChecker.java | 5 ----- app/src/main/java/nep/timeline/re_telegram/HookInit.java | 7 +------ 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java b/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java index 80aad95..ee19819 100644 --- a/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java +++ b/app/src/main/java/nep/timeline/re_telegram/ClientChecker.java @@ -25,11 +25,6 @@ public enum ClientType { this.packageNames = new String[]{ packageName }; } - ClientType(String[] packageNames) - { - this.packageNames = packageNames; - } - public String[] getPackageNames() { return packageNames; diff --git a/app/src/main/java/nep/timeline/re_telegram/HookInit.java b/app/src/main/java/nep/timeline/re_telegram/HookInit.java index 41fc125..7104ab3 100644 --- a/app/src/main/java/nep/timeline/re_telegram/HookInit.java +++ b/app/src/main/java/nep/timeline/re_telegram/HookInit.java @@ -37,13 +37,8 @@ public final List getHookPackages() return hookPackagesLocal; } - private boolean onlyNeedAR(String pkgName) - { - return hookPackagesCustomization.contains(pkgName); - } - @Override - public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) { if (getHookPackages().contains(lpparam.packageName)) { if (DEBUG_MODE)