Skip to content

Commit 49ffbcb

Browse files
committed
Fix bug in Hide Archive chat on WA 2.25.13.XX
Signed-off-by: Dev4Mod <[email protected]>
1 parent 82862ab commit 49ffbcb

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/core/devkit/Unobfuscator.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -834,19 +834,11 @@ public synchronized static Method loadBlueOnReplayWaJobManagerMethod(ClassLoader
834834
});
835835
}
836836

837-
public synchronized static Method[] loadArchiveHideViewMethod(ClassLoader loader) throws Exception {
838-
return UnobfuscatorCache.getInstance().getMethods(loader, () -> {
839-
if (cache.containsKey("ArchiveHideView"))
840-
return (Method[]) cache.get("ArchiveHideView");
841-
var methods = findAllMethodUsingStrings(loader, StringMatchType.Contains, "archive/set-content-indicator-to-empty");
842-
if (methods.length == 0) throw new Exception("ArchiveHideView method not found");
843-
ArrayList<Method> result = new ArrayList<>();
844-
for (var m : methods) {
845-
result.add(m.getDeclaringClass().getMethod("setVisibility", boolean.class));
846-
}
847-
var resultArray = result.toArray(new Method[0]);
848-
cache.put("ArchiveHideView", resultArray);
849-
return resultArray;
837+
public synchronized static Class loadArchiveChatClass(ClassLoader loader) throws Exception {
838+
return UnobfuscatorCache.getInstance().getClass(loader, () -> {
839+
var clazz = findFirstClassUsingStrings(loader, StringMatchType.Contains, "archive/set-content-indicator-to-empty");
840+
if (clazz == null) throw new Exception("ArchiveHideView method not found");
841+
return clazz;
850842
});
851843
}
852844

app/src/main/java/com/wmods/wppenhacer/xposed/features/general/NewChat.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.wmods.wppenhacer.xposed.features.general;
22

3-
import static de.robv.android.xposed.XposedHelpers.findClass;
4-
53
import android.app.Activity;
64
import android.content.Intent;
75
import android.net.Uri;
@@ -34,6 +32,7 @@ public NewChat(@NonNull ClassLoader loader, @NonNull XSharedPreferences preferen
3432
public void doHook() {
3533
var homeActivity = WppCore.getHomeActivityClass(classLoader);
3634
var action = prefs.getBoolean("buttonaction", true);
35+
3736
if (!prefs.getBoolean("newchat", true)) return;
3837

3938
XposedHelpers.findAndHookMethod(homeActivity, "onCreateOptionsMenu", Menu.class, new XC_MethodHook() {
@@ -52,7 +51,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
5251
if (action) {
5352
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
5453
}
54+
5555
item.setOnMenuItemClickListener(item1 -> {
56+
5657
var view = new LinearLayout(activity);
5758
view.setGravity(Gravity.CENTER);
5859
view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
@@ -63,6 +64,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
6364
edt.setTransformationMethod(null);
6465
edt.setHint(ResId.string.number_with_country_code);
6566
view.addView(edt);
67+
6668
new AlertDialogWpp(activity)
6769
.setTitle(activity.getString(ResId.string.new_chat))
6870
.setView(view)
@@ -76,6 +78,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
7678
})
7779
.setNegativeButton(activity.getString(ResId.string.cancel), null)
7880
.show();
81+
7982
return true;
8083
});
8184
}

app/src/main/java/com/wmods/wppenhacer/xposed/features/privacy/HideChat.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.wmods.wppenhacer.xposed.features.privacy;
22

3+
import android.view.View;
4+
35
import androidx.annotation.NonNull;
46

57
import com.wmods.wppenhacer.xposed.core.Feature;
68
import com.wmods.wppenhacer.xposed.core.devkit.Unobfuscator;
9+
import com.wmods.wppenhacer.xposed.utils.ReflectionUtils;
710

811
import java.util.Objects;
912

@@ -24,16 +27,25 @@ public void doHook() throws Throwable {
2427

2528
if (!Objects.equals(prefs.getString("typearchive", "0"), "0")) {
2629

27-
var archiveHideViewMethod = Unobfuscator.loadArchiveHideViewMethod(classLoader);
28-
for (var method : archiveHideViewMethod) {
29-
logDebug(Unobfuscator.getMethodDescriptor(method));
30-
XposedBridge.hookMethod(method, new XC_MethodHook() {
31-
@Override
32-
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
33-
param.args[0] = false;
34-
}
35-
});
36-
}
30+
var loadArchiveChatClass = Unobfuscator.loadArchiveChatClass(classLoader);
31+
32+
var setVisibilityMethod = View.class.getDeclaredMethod("setVisibility", int.class);
33+
var viewField = ReflectionUtils.getFieldByType(loadArchiveChatClass, View.class);
34+
35+
XposedBridge.hookAllConstructors(loadArchiveChatClass, new XC_MethodHook() {
36+
@Override
37+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
38+
Object thiz = param.thisObject;
39+
XposedBridge.hookMethod(setVisibilityMethod, new XC_MethodHook() {
40+
@Override
41+
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
42+
Object view = viewField.get(thiz);
43+
if (view != param.thisObject) return;
44+
param.args[0] = View.GONE;
45+
}
46+
});
47+
}
48+
});
3749

3850
}
3951

@@ -79,6 +91,6 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
7991
@NonNull
8092
@Override
8193
public String getPluginName() {
82-
return "Hide Archive";
94+
return "Hide Chats";
8395
}
8496
}

0 commit comments

Comments
 (0)