Skip to content

Commit 81e19b3

Browse files
authored
Merge pull request #174 from frknkrc44/feat-23-xx-support
feat: Add initial 23.xx support
2 parents 4bba0b2 + 253bd69 commit 81e19b3

File tree

5 files changed

+63
-17
lines changed

5 files changed

+63
-17
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,9 @@ public static String getCurrentRawJID() {
303303
var conversation = getCurrentConversation();
304304
if (conversation == null) return null;
305305
var chatField = XposedHelpers.getObjectField(conversation, convChatField.getName());
306+
if (chatField == null) return null;
306307
var chatJidObj = XposedHelpers.getObjectField(chatField, chatJidField.getName());
308+
if (chatJidObj == null) return null;
307309
return getRawString(chatJidObj);
308310
}
309311

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,12 +324,38 @@ public synchronized static Method loadIconTabMethod(ClassLoader classLoader) thr
324324
});
325325
}
326326

327+
public synchronized static Field loadPreIconTabField(ClassLoader classLoader) throws Exception {
328+
return UnobfuscatorCache.getInstance().getField(classLoader, () -> {
329+
Class<?> cls = loadIconTabMethod(classLoader).getDeclaringClass();
330+
Class<?> clsType = findFirstClassUsingStringsFilter(classLoader, "X.", StringMatchType.Contains, "Tried to set badge");
331+
if (clsType == null) throw new Exception("PreIconTabField not found");
332+
Field result = null;
333+
for (var field1 : cls.getFields()) {
334+
Object checkResult = Arrays.stream(field1.getType().getFields()).filter(f -> f.getType().equals(clsType)).findFirst().orElse(null);
335+
if (checkResult != null) {
336+
result = field1;
337+
break;
338+
}
339+
}
340+
if (result == null) throw new Exception("PreIconTabField not found 2");
341+
return result;
342+
});
343+
}
344+
327345
public synchronized static Field loadIconTabField(ClassLoader classLoader) throws Exception {
328346
return UnobfuscatorCache.getInstance().getField(classLoader, () -> {
329347
Class<?> cls = loadIconTabMethod(classLoader).getDeclaringClass();
330348
Class<?> clsType = findFirstClassUsingStringsFilter(classLoader, "X.", StringMatchType.Contains, "Tried to set badge");
349+
if (clsType == null) throw new Exception("IconTabField not found");
331350
var result = Arrays.stream(cls.getFields()).filter(f -> f.getType().equals(clsType)).findFirst().orElse(null);
332-
if (result == null) throw new Exception("IconTabField not found");
351+
// for 23.xx, the result is null
352+
if (result == null) {
353+
for (var field1 : cls.getFields()) {
354+
result = Arrays.stream(field1.getType().getFields()).filter(f -> f.getType().equals(clsType)).findFirst().orElse(null);
355+
if (result != null) break;
356+
}
357+
}
358+
if (result == null) throw new Exception("IconTabField not found 2");
333359
return result;
334360
});
335361
}
@@ -845,7 +871,7 @@ public synchronized static Method loadSendPresenceMethod(ClassLoader loader) thr
845871
.matcher(MethodMatcher.create().returnType(groupJidClass)))
846872
.singleOrNull();
847873
if (classCheckMethod == null) {
848-
var newMethod = methodData.getCallers().firstOrNull();
874+
var newMethod = methodData.getCallers().singleOrNull(method1 -> method1.getParamCount() == 4);
849875
if (newMethod == null) throw new Exception("SendPresence method not found 2");
850876
return newMethod.getMethodInstance(loader);
851877
}

app/src/main/java/com/wmods/wppenhacer/xposed/features/customization/FilterGroups.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,17 @@ private void setFilter(int position) {
197197
var list = (List<Object>) ReflectionUtils.getField(listField, mFilterInstance);
198198
if (list == null) return;
199199
var name = position == 0 ? "CONTACTS_FILTER" : "GROUP_FILTER";
200-
var result = list.stream().filter(item -> Objects.equals(XposedHelpers.getObjectField(item, "A01"), name)).findFirst();
201-
if (result.isEmpty()) return;
202-
var index = list.indexOf(result.get());
200+
Object result = null;
201+
for (var item : list) {
202+
for (var field : item.getClass().getFields()) {
203+
if (Objects.equals(XposedHelpers.getObjectField(item, field.getName()), name)) {
204+
result = item;
205+
break;
206+
}
207+
}
208+
}
209+
if (result == null) return;
210+
var index = list.indexOf(result);
203211
ReflectionUtils.callMethod(methodSetFilter, mFilterInstance, index);
204212
} catch (Exception e) {
205213
logDebug(e);

app/src/main/java/com/wmods/wppenhacer/xposed/features/customization/SeparateGroup.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,26 @@ private void hookTabIcon() throws Exception {
143143
@SuppressLint("ResourceType")
144144
@Override
145145
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
146-
var superClass = param.thisObject.getClass().getSuperclass();
147-
if (superClass != null && superClass == iconTabMethod.getDeclaringClass()) {
148-
var field1 = superClass.getDeclaredField(iconField.getName()).get(param.thisObject);
149-
var field2 = getObjectField(field1, iconFrameField.getName());
150-
if (field2 == null) return;
151-
var menu = (Menu) getObjectField(field2, iconMenuField.getName());
152-
if (menu == null) return;
153-
// add Icon to menu
154-
var menuItem = (MenuItem) menu.findItem(GROUPS);
155-
if (menuItem != null) {
156-
menuItem.setIcon(Utils.getID("home_tab_communities_selector", "drawable"));
157-
}
146+
var obj = param.thisObject;
147+
var superClass = obj.getClass().getSuperclass();
148+
149+
// for 23.xx, superClass != iconTabMethod.getDeclaringClass()
150+
if (!(superClass != null && superClass == iconTabMethod.getDeclaringClass())) {
151+
var preIconTabField = Unobfuscator.loadPreIconTabField(classLoader);
152+
var field0 = getObjectField(obj, preIconTabField.getName());
153+
superClass = field0.getClass().getSuperclass();
154+
obj = field0;
155+
}
156+
157+
var field1 = superClass.getDeclaredField(iconField.getName()).get(obj);
158+
var field2 = getObjectField(field1, iconFrameField.getName());
159+
if (field2 == null) return;
160+
var menu = (Menu) getObjectField(field2, iconMenuField.getName());
161+
if (menu == null) return;
162+
// add Icon to menu
163+
var menuItem = (MenuItem) menu.findItem(GROUPS);
164+
if (menuItem != null) {
165+
menuItem.setIcon(Utils.getID("home_tab_communities_selector", "drawable"));
158166
}
159167
}
160168
});

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
<item>2.24.20.xx</item>
123123
<item>2.24.21.xx</item>
124124
<item>2.24.22.xx</item>
125+
<item>2.24.23.xx</item>
125126
</string-array>
126127
<string-array name="supported_versions_business">
127128
<item>2.24.16.xx</item>
@@ -131,6 +132,7 @@
131132
<item>2.24.20.xx</item>
132133
<item>2.24.21.xx</item>
133134
<item>2.24.22.xx</item>
135+
<item>2.24.23.xx</item>
134136
</string-array>
135137
<string-array name="image_picker">
136138
<item>image/*</item>

0 commit comments

Comments
 (0)