Skip to content

Commit d4318b4

Browse files
committed
Refactor message handling and add support for version 2.25.37
1 parent b83ca17 commit d4318b4

File tree

5 files changed

+43
-16
lines changed

5 files changed

+43
-16
lines changed

app/src/main/java/com/wmods/wppenhacer/adapter/IGStatusAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup
146146
return convertView;
147147
}
148148

149-
public IGStatusAdapter(@NonNull Context context, @NonNull Class<?> statusInfoClazz) {
149+
public IGStatusAdapter(@NonNull Context context, @NonNull Class<?> statusInfoClazz) throws Exception {
150150
super(context, 0);
151-
this.clazzImageStatus = XposedHelpers.findClass("com.whatsapp.status.ContactStatusThumbnail", this.getContext().getClassLoader());
151+
this.clazzImageStatus = Unobfuscator.findFirstClassUsingName(this.getContext().getClassLoader(), StringMatchType.EndsWith, ".ContactStatusThumbnail");
152152
this.statusInfoClazz = statusInfoClazz;
153153
this.setCountStatus = ReflectionUtils.findMethodUsingFilter(this.clazzImageStatus, m -> m.getParameterCount() == 3 && Arrays.equals(new Class[]{int.class, int.class, int.class}, m.getParameterTypes()));
154154
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,16 @@ public synchronized static Field loadBroadcastTagField(ClassLoader classLoader)
308308
}
309309

310310
public synchronized static Class<?> loadForwardClassMethod(ClassLoader classLoader) throws Exception {
311-
return UnobfuscatorCache.getInstance().getClass(classLoader, () -> findFirstClassUsingStrings(classLoader, StringMatchType.Contains, "UserActions/userActionForwardMessage"));
311+
return UnobfuscatorCache.getInstance().getClass(classLoader, () -> {
312+
for (var s : new String[]{
313+
"UserActions/userActionForwardMessage",
314+
"UserActionsMessageForwarding/userActionForwardMessage"
315+
}) {
316+
var cls = findFirstClassUsingStrings(classLoader, StringMatchType.Contains, s);
317+
if (cls != null) return cls;
318+
}
319+
throw new ClassNotFoundException("ForwardClass method not found");
320+
});
312321
}
313322

314323

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

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.widget.Toast;
66

77
import androidx.annotation.NonNull;
8+
import androidx.annotation.Nullable;
89

910
import com.wmods.wppenhacer.xposed.core.Feature;
1011
import com.wmods.wppenhacer.xposed.core.WppCore;
@@ -13,6 +14,7 @@
1314
import com.wmods.wppenhacer.xposed.core.db.MessageStore;
1415
import com.wmods.wppenhacer.xposed.core.devkit.Unobfuscator;
1516
import com.wmods.wppenhacer.xposed.core.devkit.UnobfuscatorCache;
17+
import com.wmods.wppenhacer.xposed.utils.DebugUtils;
1618
import com.wmods.wppenhacer.xposed.utils.ReflectionUtils;
1719
import com.wmods.wppenhacer.xposed.utils.ResId;
1820
import com.wmods.wppenhacer.xposed.utils.Utils;
@@ -95,17 +97,7 @@ protected void afterHookedMethod(MethodHookParam param) {
9597
@Override
9698
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
9799
Object obj = ReflectionUtils.getArg(param.args, param.method.getDeclaringClass(), 0);
98-
var objFMessage = param.args[0];
99-
if (!FMessageWpp.TYPE.isInstance(objFMessage)) {
100-
var field = ReflectionUtils.findFieldUsingFilter(objFMessage.getClass(), f -> f.getType() == FMessageWpp.TYPE);
101-
if (field != null) {
102-
objFMessage = field.get(objFMessage);
103-
} else {
104-
var field1 = ReflectionUtils.findFieldUsingFilter(objFMessage.getClass(), f -> f.getType() == FMessageWpp.Key.TYPE);
105-
var key = field1.get(objFMessage);
106-
objFMessage = WppCore.getFMessageFromKey(key);
107-
}
108-
}
100+
var objFMessage = findObjectFMessage(param);
109101
var field = ReflectionUtils.getFieldByType(param.method.getDeclaringClass(), statusPlaybackClass);
110102

111103
Object objView = field.get(obj);
@@ -127,6 +119,30 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
127119

128120
}
129121

122+
@Nullable
123+
private static Object findObjectFMessage(XC_MethodHook.MethodHookParam param) throws IllegalAccessException {
124+
if (FMessageWpp.TYPE.isInstance(param.args[0]))
125+
return param.args[0];
126+
127+
if (param.args.length > 1) {
128+
if (FMessageWpp.TYPE.isInstance(param.args[1]))
129+
return param.args[1];
130+
var FMessageField = ReflectionUtils.findFieldUsingFilterIfExists(param.args[1].getClass(), f -> FMessageWpp.TYPE.isAssignableFrom(f.getType()));
131+
if (FMessageField != null) {
132+
return FMessageField.get(param.args[1]);
133+
}
134+
}
135+
136+
var field = ReflectionUtils.findFieldUsingFilterIfExists(param.args[0].getClass(), f -> f.getType() == FMessageWpp.TYPE);
137+
if (field != null)
138+
return field.get(param.args[0]);
139+
140+
var field1 = ReflectionUtils.findFieldUsingFilter(param.args[0].getClass(), f -> f.getType() == FMessageWpp.Key.TYPE);
141+
var key = field1.get(param.args[0]);
142+
return WppCore.getFMessageFromKey(key);
143+
144+
}
145+
130146
@NonNull
131147
@Override
132148
public String getPluginName() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public static JSONObject getJSON(String number) {
5858
public void doHook() throws Throwable {
5959
if (Objects.equals(Utils.xprefs.getString("custom_privacy_type", "0"), "0")) return;
6060

61-
Class<?> ContactInfoActivityClass = Unobfuscator.findFirstClassUsingName(classLoader, StringMatchType.EndsWith, "ContactInfoActivity");
62-
Class<?> GroupInfoActivityClass = Unobfuscator.findFirstClassUsingName(classLoader, StringMatchType.EndsWith, "GroupChatInfoActivity");
61+
Class<?> ContactInfoActivityClass = Unobfuscator.findFirstClassUsingName(classLoader, StringMatchType.EndsWith, ".ContactInfoActivity");
62+
Class<?> GroupInfoActivityClass = Unobfuscator.findFirstClassUsingName(classLoader, StringMatchType.EndsWith, ".GroupChatInfoActivity");
6363
Class<?> userJidClass = Unobfuscator.findFirstClassUsingName(classLoader, StringMatchType.EndsWith, "jid.UserJid");
6464
Class<?> groupJidClass = Unobfuscator.findFirstClassUsingName(classLoader, StringMatchType.EndsWith, "jid.GroupJid");
6565

app/src/main/res/values/arrays.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
<item>2.25.34.xx</item>
132132
<item>2.25.35.xx</item>
133133
<item>2.25.36.xx</item>
134+
<item>2.25.37.xx</item>
134135
</string-array>
135136
<string-array name="supported_versions_business">
136137
<item>2.25.25.xx</item>
@@ -145,6 +146,7 @@
145146
<item>2.25.34.xx</item>
146147
<item>2.25.35.xx</item>
147148
<item>2.25.36.xx</item>
149+
<item>2.25.37.xx</item>
148150
</string-array>
149151
<string-array name="image_picker">
150152
<item>image/*</item>

0 commit comments

Comments
 (0)