11package de.binarynoise.freeNotifications
22
33import android.app.NotificationChannel
4+ import de.binarynoise.logger.Logger.log
45import de.binarynoise.reflection.findDeclaredField
56import de.robv.android.xposed.IXposedHookLoadPackage
7+ import de.robv.android.xposed.XC_MethodReplacement.DO_NOTHING
8+ import de.robv.android.xposed.XC_MethodReplacement.returnConstant
69import de.robv.android.xposed.XposedBridge
710import de.robv.android.xposed.XposedHelpers
811import de.robv.android.xposed.callbacks.XC_LoadPackage
@@ -11,31 +14,53 @@ import de.robv.android.xposed.XC_MethodHook as MethodHook
1114class Hook : IXposedHookLoadPackage {
1215
1316 override fun handleLoadPackage (lpparam : XC_LoadPackage .LoadPackageParam ) {
17+ // AOSP: mBlockableSystem / setBlockable / isBlockable
18+
1419 val cls = NotificationChannel ::class .java
1520
1621 val mBlockableSystem = cls.findDeclaredField(" mBlockableSystem" )
1722
18- val setToTrue = object : MethodHook () {
19- override fun beforeHookedMethod (param : MethodHookParam ) {
20- mBlockableSystem.set(param.thisObject, true )
21- }
22-
23- override fun afterHookedMethod (param : MethodHookParam ) {
24- mBlockableSystem.set(param.thisObject, true )
25- }
23+ tryAndLog(" hook NotificationChannel constructors" ) {
24+ XposedBridge .hookAllConstructors(cls, object : MethodHook () {
25+ override fun afterHookedMethod (param : MethodHookParam ) {
26+ mBlockableSystem.set(param.thisObject, true )
27+ }
28+ })
29+ }
30+ tryAndLog(" hook setBlockable" ) {
31+ XposedHelpers .findAndHookMethod(cls, " setBlockable" , Boolean ::class .java, DO_NOTHING )
2632 }
33+ tryAndLog(" hook isBlockable" ) {
34+ XposedHelpers .findAndHookMethod(cls, " isBlockable" , returnConstant(true ))
35+ }
36+
37+ // AOSP: mImportanceLockedDefaultApp / setImportanceLockedByCriticalDeviceFunction / isImportanceLockedByCriticalDeviceFunction
2738
28- try {
29- XposedBridge .hookAllConstructors(cls, setToTrue)
30- } catch (_: Throwable ) {
39+ val mImportanceLockedDefaultApp = cls.findDeclaredField(" mImportanceLockedDefaultApp" )
40+
41+ tryAndLog(" hook constructors" ) {
42+ XposedBridge .hookAllConstructors(cls, object : MethodHook () {
43+ override fun afterHookedMethod (param : MethodHookParam ) {
44+ mImportanceLockedDefaultApp.set(param.thisObject, false )
45+ }
46+ })
3147 }
32- try {
33- XposedHelpers .findAndHookMethod(cls, " setBlockable" , Boolean ::class .java, setToTrue)
34- } catch (_: Throwable ) {
48+ tryAndLog(" hook setImportanceLockedByCriticalDeviceFunction" ) {
49+ XposedHelpers .findAndHookMethod(cls, " setImportanceLockedByCriticalDeviceFunction" , Boolean ::class .java, DO_NOTHING )
3550 }
36- try {
37- XposedHelpers .findAndHookMethod(cls, " isBlockable" , setToTrue)
38- } catch (_: Throwable ) {
51+ tryAndLog(" hook isImportanceLockedByCriticalDeviceFunction" ) {
52+ XposedHelpers .findAndHookMethod(cls, " isImportanceLockedByCriticalDeviceFunction" , returnConstant(false ))
3953 }
4054 }
4155}
56+
57+ private inline fun tryAndLog (message : String , block : () -> Unit ) {
58+ log(message)
59+ return try {
60+ block()
61+ log(" done!" )
62+ } catch (t: Throwable ) {
63+ log(" failed!" )
64+ XposedBridge .log(t)
65+ }
66+ }
0 commit comments