11package com .wmods .wppenhacer .xposed .features .privacy ;
22
33
4- import android .view .View ;
5-
64import androidx .annotation .NonNull ;
75
86import com .wmods .wppenhacer .xposed .core .Feature ;
97import com .wmods .wppenhacer .xposed .core .components .FMessageWpp ;
108import com .wmods .wppenhacer .xposed .core .devkit .Unobfuscator ;
11- import com .wmods .wppenhacer .xposed .utils .ReflectionUtils ;
129
1310import de .robv .android .xposed .XC_MethodHook ;
14- import de .robv .android .xposed .XC_MethodReplacement ;
1511import de .robv .android .xposed .XSharedPreferences ;
1612import de .robv .android .xposed .XposedBridge ;
17- import de .robv .android .xposed .XposedHelpers ;
1813
1914public class ViewOnce extends Feature {
2015 private boolean isFromMe ;
@@ -28,54 +23,20 @@ public void doHook() throws Exception {
2823 if (!prefs .getBoolean ("viewonce" , false )) return ;
2924
3025 var methods = Unobfuscator .loadViewOnceMethod (classLoader );
31- var classViewOnce = Unobfuscator .loadViewOnceClass (classLoader );
32- logDebug (classViewOnce );
33- var viewOnceStoreMethod = Unobfuscator .loadViewOnceStoreMethod (classLoader );
34- logDebug (Unobfuscator .getMethodDescriptor (viewOnceStoreMethod ));
35- var viewOnceChangeMethod = Unobfuscator .loadViewOnceChangeMethod (classLoader );
36-
37- XposedBridge .hookMethod (viewOnceStoreMethod , new XC_MethodHook () {
38- @ Override
39- protected void beforeHookedMethod (MethodHookParam param ) throws Throwable {
40- isFromMe = false ;
41- var messageObject = param .args [0 ];
42- if (messageObject == null ) return ;
43- isFromMe = new FMessageWpp (messageObject ).getKey ().isFromMe ;
44- }
45- });
4626
4727 for (var method : methods ) {
4828 logDebug (Unobfuscator .getMethodDescriptor (method ));
4929 XposedBridge .hookMethod (method , new XC_MethodHook () {
5030 @ Override
51- protected void afterHookedMethod (MethodHookParam param ) {
52- int returnValue = (int ) param .getResult ();
53- if (returnValue != 2 ) {
54- if (ReflectionUtils .isCalledFromClass (classViewOnce )) {
55- param .setResult (0 );
56- } else if (!isFromMe && (ReflectionUtils .isCalledFromClass (viewOnceStoreMethod .getDeclaringClass ()))) {
57- param .setResult (0 );
58- }
31+ protected void beforeHookedMethod (MethodHookParam param ) {
32+ int returnValue = (int ) param .args [0 ];
33+ var fMessage = new FMessageWpp (param .thisObject );
34+ if (returnValue == 1 && !fMessage .getKey ().isFromMe ) {
35+ param .args [0 ] = 0 ;
5936 }
6037 }
6138 });
6239 }
63- // This prevents view audio once from being set to previewed
64- XposedBridge .hookMethod (viewOnceChangeMethod ,
65- new XC_MethodHook () {
66- private Unhook unhook ;
67-
68- @ Override
69- protected void beforeHookedMethod (MethodHookParam param ) throws Throwable {
70- unhook = XposedHelpers .findAndHookMethod (View .class , "postDelayed" , Runnable .class , long .class , XC_MethodReplacement .returnConstant (false ));
71- }
72-
73- @ Override
74- protected void afterHookedMethod (MethodHookParam param ) throws Throwable {
75- unhook .unhook ();
76- }
77- });
78-
7940 }
8041
8142 @ NonNull
0 commit comments