@@ -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