Skip to content

Commit 07f05e8

Browse files
authored
Merge pull request #278 from frknkrc44/fix-tablet-mode
improve tablet mode support
2 parents 8a17c0a + 879b788 commit 07f05e8

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/core/WppCore.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,16 @@ public static String getCurrentRawJID() {
324324
try {
325325
var conversation = getCurrentConversation();
326326
if (conversation == null) return null;
327-
var chatField = convChatField.get(conversation);
327+
Object chatField;
328+
if (conversation.getClass().getSimpleName().equals("HomeActivity")) {
329+
// tablet mode found
330+
var convFragmentMethod = Unobfuscator.loadHomeConversationFragmentMethod(conversation.getClassLoader());
331+
var convFragment = convFragmentMethod.invoke(null, conversation);
332+
var convField = Unobfuscator.loadAntiRevokeConvFragmentField(conversation.getClassLoader());
333+
chatField = convField.get(convFragment);
334+
} else {
335+
chatField = convChatField.get(conversation);
336+
}
328337
var chatJidObj = chatJidField.get(chatField);
329338
return getRawString(chatJidObj);
330339
} catch (Exception e) {

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,29 @@ public synchronized static Method loadAntiRevokeOnStartMethod(ClassLoader loader
689689
});
690690
}
691691

692+
public synchronized static Method loadHomeConversationFragmentMethod(ClassLoader loader) throws Exception {
693+
return UnobfuscatorCache.getInstance().getMethod(loader, () -> {
694+
var homeClass = WppCore.getHomeActivityClass(loader);
695+
var convFragment = XposedHelpers.findClass("com.whatsapp.ConversationFragment", loader);
696+
MethodData method = dexkit.findMethod(FindMethod.create()
697+
.searchInClass(
698+
Collections.singletonList(
699+
dexkit.getClassData(homeClass)))
700+
.matcher(MethodMatcher.create().returnType(convFragment))).singleOrNull();
701+
if (method == null) throw new Exception("HomeConversationFragmentMethod not found");
702+
return method.getMethodInstance(loader);
703+
});
704+
}
705+
706+
public synchronized static Field loadAntiRevokeConvFragmentField(ClassLoader loader) throws Exception {
707+
return UnobfuscatorCache.getInstance().getField(loader, () -> {
708+
Class<?> chatClass = findFirstClassUsingStrings(loader, StringMatchType.Contains, "conversation/createconversation");
709+
Class<?> conversation = XposedHelpers.findClass("com.whatsapp.ConversationFragment", loader);
710+
Field field = ReflectionUtils.getFieldByType(conversation, chatClass);
711+
if (field == null) throw new Exception("AntiRevokeConvChat field not found");
712+
return field;
713+
});
714+
}
692715

693716
public synchronized static Field loadAntiRevokeConvChatField(ClassLoader loader) throws Exception {
694717
return UnobfuscatorCache.getInstance().getField(loader, () -> {

0 commit comments

Comments
 (0)