Skip to content

Commit 800278d

Browse files
committed
fix recreate fragment
1 parent 54c29d1 commit 800278d

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -187,23 +187,25 @@ private void hookTabInstance(Class<?> cFrag) throws Exception {
187187

188188
var recreateFragmentMethod = Unobfuscator.loadRecreateFragmentConstructor(classLoader);
189189

190+
var pattern = Pattern.compile("android:switcher:\\d+:(\\d+)");
191+
192+
Class<?> FragmentClass = classLoader.loadClass("androidx.fragment.app.Fragment");
193+
190194
XposedBridge.hookMethod(recreateFragmentMethod, new XC_MethodHook() {
191195
@Override
192196
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
193-
var object = param.args[2];
194-
var desc = XposedHelpers.getObjectField(object, "A06");
195-
if (desc == null) return;
196-
var split = desc.toString().split(":");
197-
var id = 0;
198-
try {
199-
id = Integer.parseInt(split[split.length - 1]);
200-
} catch (Exception ignored) {
201-
return;
202-
}
203-
if (id == GROUPS || id == CHATS) {
204-
var convFragment = XposedHelpers.getObjectField(param.thisObject, "A02");
205-
tabInstances.remove(id);
206-
tabInstances.put(id, convFragment);
197+
var bundle = (Bundle) param.args[0];
198+
var state = bundle.getParcelable("state");
199+
var string = state.toString();
200+
var matcher = pattern.matcher(string);
201+
if (matcher.find()) {
202+
var tabId = Integer.parseInt(matcher.group(1));
203+
if (tabId == GROUPS || tabId == CHATS) {
204+
var fragmentField = ReflectionUtils.getFieldByType(param.thisObject.getClass(), FragmentClass);
205+
var convFragment = ReflectionUtils.getObjectField(fragmentField, param.thisObject);
206+
tabInstances.remove(tabId);
207+
tabInstances.put(tabId, convFragment);
208+
}
207209
}
208210
}
209211
});

0 commit comments

Comments
 (0)