Skip to content

Commit 2b9c23d

Browse files
committed
fix bug in Seen tick button
Signed-off-by: Dev4Mod <[email protected]>
1 parent ef32d86 commit 2b9c23d

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,16 @@ public synchronized static Method loadBlueOnReplayViewButtonMethod(ClassLoader l
958958
});
959959
}
960960

961+
public synchronized static Class<?> loadBlueOnReplayViewButtonOutSideClass(ClassLoader loader) throws Exception {
962+
return UnobfuscatorCache.getInstance().getClass(loader, () -> {
963+
var clazz = loadBlueOnReplayViewButtonMethod(loader).getDeclaringClass().getName();
964+
var outClasses = dexkit.findClass(FindClass.create().matcher(ClassMatcher.create().superClass(clazz)));
965+
if (outClasses.isEmpty())
966+
throw new RuntimeException("BlueOnReplayViewButtonOutSideMethod method not found");
967+
return outClasses.get(0).getInstance(loader);
968+
});
969+
}
970+
961971
public synchronized static Method loadBlueOnReplayStatusViewMethod(ClassLoader loader) throws Exception {
962972
return UnobfuscatorCache.getInstance().getMethod(loader, () -> {
963973
var method = findFirstMethodUsingStrings(loader, StringMatchType.Contains, "StatusPlaybackPage/onViewCreated");

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.wmods.wppenhacer.xposed.utils.ResId;
3333
import com.wmods.wppenhacer.xposed.utils.Utils;
3434

35+
import java.lang.reflect.Field;
3536
import java.lang.reflect.Method;
3637
import java.util.ArrayList;
3738
import java.util.Arrays;
@@ -55,6 +56,7 @@ public class SeenTick extends Feature {
5556
private static String currentJid;
5657
private static String currentScreen = "none";
5758
private static final HashMap<String, ImageView> messageMap = new HashMap<>();
59+
private Field fMessageField;
5860

5961
public SeenTick(@NonNull ClassLoader loader, @NonNull XSharedPreferences preferences) {
6062
super(loader, preferences);
@@ -143,7 +145,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
143145
var position = (int) param.args[1];
144146
var list = (List<?>) XposedHelpers.getObjectField(param.args[0], fieldList.getName());
145147
var fMessage = new FMessageWpp(list.get(position));
146-
var messageKey = (String) fMessage.getKey().messageID;
148+
var messageKey = fMessage.getKey().messageID;
147149
var jid = WppCore.getRawString(fMessage.getUserJid());
148150
messages.clear();
149151
messages.add(new MessageInfo(fMessage, messageKey, null));
@@ -166,14 +168,32 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
166168
private void hookStatusScreen(int ticktype) throws Exception {
167169
var viewButtonMethod = Unobfuscator.loadBlueOnReplayViewButtonMethod(classLoader);
168170
logDebug(Unobfuscator.getMethodDescriptor(viewButtonMethod));
169-
171+
var viewStatusClass = Unobfuscator.loadBlueOnReplayViewButtonOutSideClass(classLoader);
170172
if (ticktype == 1) {
171173
XposedBridge.hookMethod(viewButtonMethod, new XC_MethodHook() {
172174
@Override
173175
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
174176
if (!prefs.getBoolean("hidestatusview", false)) return;
175-
var fMessageField = ReflectionUtils.getFieldByExtendType(param.thisObject.getClass(), FMessageWpp.TYPE);
176-
var fMessage = new FMessageWpp(ReflectionUtils.getObjectField(fMessageField, param.thisObject));
177+
var fMessageField = ReflectionUtils.getFieldByExtendType(viewStatusClass, FMessageWpp.TYPE);
178+
var fMessageObj = ReflectionUtils.getObjectField(fMessageField, param.thisObject);
179+
if (fMessageObj == null) {
180+
var fields = viewStatusClass.getDeclaredFields();
181+
for (Field field : fields) {
182+
if (field.getType().isPrimitive()) continue;
183+
var instance = ReflectionUtils.getObjectField(field, param.thisObject);
184+
if (instance == null) continue;
185+
fMessageField = ReflectionUtils.getFieldByExtendType(field.getType(), FMessageWpp.TYPE);
186+
if (fMessageField != null) {
187+
fMessageObj = ReflectionUtils.getObjectField(fMessageField, instance);
188+
break;
189+
}
190+
}
191+
}
192+
if (fMessageObj == null) {
193+
logDebug("Failed to find fMessageField");
194+
return;
195+
}
196+
var fMessage = new FMessageWpp(fMessageObj);
177197
var key = fMessage.getKey();
178198
if (key.isFromMe) return;
179199
var view = (View) param.getResult();

0 commit comments

Comments
 (0)