3232import com .wmods .wppenhacer .xposed .utils .ResId ;
3333import com .wmods .wppenhacer .xposed .utils .Utils ;
3434
35+ import java .lang .reflect .Field ;
3536import java .lang .reflect .Method ;
3637import java .util .ArrayList ;
3738import 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