Skip to content

Commit 6802053

Browse files
committed
Refactor TagMessage to use AntiRevokeBubbleMethod
Signed-off-by: Dev4Mod <[email protected]>
1 parent ab944a5 commit 6802053

File tree

2 files changed

+19
-58
lines changed

2 files changed

+19
-58
lines changed

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

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import android.view.View;
1515
import android.view.ViewGroup;
1616
import android.widget.FrameLayout;
17-
import android.widget.ImageView;
1817
import android.widget.TextView;
1918

2019
import androidx.annotation.Nullable;
@@ -56,7 +55,6 @@
5655
import java.util.TimerTask;
5756
import java.util.stream.Collectors;
5857

59-
import de.robv.android.xposed.XposedBridge;
6058
import de.robv.android.xposed.XposedHelpers;
6159

6260
public class Unobfuscator {
@@ -301,31 +299,6 @@ public synchronized static Field loadBroadcastTagField(ClassLoader classLoader)
301299
});
302300
}
303301

304-
public synchronized static Method loadBroadcastTagMethod(ClassLoader classLoader) throws Exception {
305-
return UnobfuscatorCache.getInstance().getMethod(classLoader, () -> {
306-
var field = loadBroadcastTagField(classLoader);
307-
XposedBridge.log(DexSignUtil.getFieldDescriptor(field));
308-
var clazzData = dexkit.findClass(FindClass.create().matcher(ClassMatcher.create().addUsingString("ConversationRow/setUpUserNameInGroupView")));
309-
if (clazzData.isEmpty())
310-
throw new Exception("BroadcastTag: ConversationRow Class not found");
311-
var method = dexkit.findMethod(FindMethod.create().searchInClass(clazzData).matcher(MethodMatcher.create().addUsingField(DexSignUtil.getFieldDescriptor(field))));
312-
if (method.isEmpty()) {
313-
var findViewId = View.class.getDeclaredMethod("findViewById", int.class);
314-
var setImageResource = ImageView.class.getDeclaredMethod("setImageResource", int.class);
315-
method = dexkit.findMethod(
316-
FindMethod.create().matcher(
317-
MethodMatcher.create().addUsingField(DexSignUtil.getFieldDescriptor(field))
318-
.addInvoke(DexSignUtil.getMethodDescriptor(findViewId))
319-
.addInvoke(DexSignUtil.getMethodDescriptor(setImageResource))
320-
)
321-
);
322-
}
323-
if (method.isEmpty())
324-
throw new Exception("BroadcastTag: ConversationRow Method not found");
325-
return method.get(0).getMethodInstance(classLoader);
326-
});
327-
}
328-
329302
public synchronized static Class<?> loadForwardClassMethod(ClassLoader classLoader) throws Exception {
330303
return UnobfuscatorCache.getInstance().getClass(classLoader, () -> findFirstClassUsingStrings(classLoader, StringMatchType.Contains, "UserActions/userActionForwardMessage"));
331304
}

app/src/main/java/com/wmods/wppenhacer/xposed/features/privacy/TagMessage.java

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@
33
import android.view.View;
44
import android.view.ViewGroup;
55
import android.widget.ImageView;
6+
import android.widget.TextView;
67

78
import androidx.annotation.NonNull;
89

910
import com.wmods.wppenhacer.xposed.core.Feature;
1011
import com.wmods.wppenhacer.xposed.core.components.FMessageWpp;
1112
import com.wmods.wppenhacer.xposed.core.devkit.Unobfuscator;
13+
import com.wmods.wppenhacer.xposed.utils.DesignUtils;
1214
import com.wmods.wppenhacer.xposed.utils.ReflectionUtils;
1315
import com.wmods.wppenhacer.xposed.utils.Utils;
1416

1517
import java.lang.reflect.Method;
1618

1719
import de.robv.android.xposed.XC_MethodHook;
18-
import de.robv.android.xposed.XC_MethodReplacement;
1920
import de.robv.android.xposed.XSharedPreferences;
2021
import de.robv.android.xposed.XposedBridge;
21-
import de.robv.android.xposed.XposedHelpers;
2222

2323
public class TagMessage extends Feature {
2424
public TagMessage(ClassLoader loader, XSharedPreferences preferences) {
@@ -52,43 +52,31 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
5252
}
5353

5454
private void hookBroadcastView() throws Exception {
55-
Method method1 = Unobfuscator.loadBroadcastTagMethod(classLoader);
5655

57-
XposedBridge.hookMethod(method1, new XC_MethodHook() {
58-
private FMessageWpp.Key keyObj;
59-
private Unhook hooked;
56+
var bubbleMethod = Unobfuscator.loadAntiRevokeBubbleMethod(classLoader);
57+
logDebug(Unobfuscator.getMethodDescriptor(bubbleMethod));
6058

59+
XposedBridge.hookMethod(bubbleMethod, new XC_MethodHook() {
6160
@Override
62-
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
63-
keyObj = null;
64-
var fmessageObj = ReflectionUtils.getArg(param.args, FMessageWpp.TYPE, 0);
65-
var fmessage = new FMessageWpp(fmessageObj);
61+
protected void afterHookedMethod(MethodHookParam param) {
62+
var objMessage = param.args[2];
63+
var dateTextView = (TextView) param.args[1];
64+
if (dateTextView == null) return;
65+
var fmessage = new FMessageWpp(objMessage);
6666
var key = fmessage.getKey();
67-
if (!key.isFromMe && fmessage.isBroadcast()) {
68-
var view = (ViewGroup) (param.thisObject instanceof ViewGroup ? param.thisObject : param.args[0]);
69-
int id = Utils.getID("broadcast_icon", "id");
70-
View res = view.findViewById(id);
71-
if (res == null) {
72-
var dateWrapper = (ViewGroup) view.findViewById(Utils.getID("date_wrapper", "id"));
73-
var broadcast = new ImageView(view.getContext());
67+
var dateWrapper = (ViewGroup) dateTextView.getParent();
68+
int id = Utils.getID("broadcast_icon", "id");
69+
View res = dateWrapper.findViewById(id);
70+
if (!key.isFromMe)
71+
if (fmessage.isBroadcast() && res == null) {
72+
var broadcast = new ImageView(dateWrapper.getContext());
7473
broadcast.setId(id);
74+
broadcast.setImageDrawable(DesignUtils.getDrawableByName("broadcast_status_icon"));
7575
dateWrapper.addView(broadcast, 0);
76+
} else if (res != null) {
77+
dateWrapper.removeView(res);
7678
}
77-
key.setIsFromMe(true);
78-
keyObj = key;
79-
hooked = XposedHelpers.findAndHookMethod(key.remoteJid.getClass(), "getType", XC_MethodReplacement.returnConstant(0));
80-
}
8179
}
82-
83-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
84-
if (keyObj != null) {
85-
keyObj.setIsFromMe(false);
86-
}
87-
if (hooked != null) {
88-
hooked.unhook();
89-
}
90-
}
91-
9280
});
9381
}
9482

0 commit comments

Comments
 (0)