Skip to content

Commit 5ef1676

Browse files
implement disable applyKeepScreenOnFlag
1 parent d7ed780 commit 5ef1676

2 files changed

Lines changed: 65 additions & 12 deletions

File tree

AntiWakeLock/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ android {
1111
targetSdk = 36
1212
}
1313
}
14+
15+
dependencies {
16+
implementation(project(":logger"))
17+
}
Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,78 @@
11
package com.programminghoch10.AntiWakeLock
22

3-
import android.util.Log
3+
import android.os.Build
4+
import android.view.SurfaceView
5+
import android.view.View
46
import android.view.Window
57
import android.view.WindowManager
8+
import de.binarynoise.logger.Logger.log
69
import de.robv.android.xposed.IXposedHookLoadPackage
710
import de.robv.android.xposed.XC_MethodHook
11+
import de.robv.android.xposed.XC_MethodReplacement.DO_NOTHING
812
import de.robv.android.xposed.XposedHelpers
913
import de.robv.android.xposed.callbacks.XC_LoadPackage
1014

1115
class WindowHook : IXposedHookLoadPackage {
12-
fun filterKeepScreenOnFlag(flags: Int) : Int {
16+
fun filterKeepScreenOnFlag(flags: Int): Int {
1317
return flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.inv()
1418
}
15-
19+
1620
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
17-
XposedHelpers.findAndHookMethod(Window::class.java, "addFlags", Int::class.java, object: XC_MethodHook() {
18-
override fun beforeHookedMethod(param: MethodHookParam) {
19-
param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int)
21+
XposedHelpers.findAndHookMethod(
22+
Window::class.java,
23+
"addFlags",
24+
Int::class.java,
25+
object : XC_MethodHook() {
26+
override fun beforeHookedMethod(param: MethodHookParam) {
27+
log("removing FLAG_KEEP_SCREEN_ON from addFlags")
28+
param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int)
29+
}
30+
},
31+
)
32+
XposedHelpers.findAndHookMethod(
33+
Window::class.java,
34+
"setFlags", Int::class.java, Int::class.java,
35+
object : XC_MethodHook() {
36+
override fun beforeHookedMethod(param: MethodHookParam) {
37+
log("removing FLAG_KEEP_SCREEN_ON from setFlags")
38+
param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int)
39+
param.args[1] = filterKeepScreenOnFlag(param.args[1] as Int)
40+
}
41+
},
42+
)
43+
44+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
45+
try {
46+
val AttachInfoClass = Class.forName(View::class.java.name + "\$AttachInfo", false, lpparam.classLoader)
47+
XposedHelpers.findAndHookMethod(
48+
SurfaceView::class.java,
49+
"performCollectViewAttributes",
50+
AttachInfoClass,
51+
Int::class.java,
52+
object : XC_MethodHook() {
53+
override fun afterHookedMethod(param: MethodHookParam) {
54+
val attachInfo = param.args[0]
55+
XposedHelpers.setBooleanField(attachInfo, "mKeepScreenOn", false)
56+
}
57+
},
58+
)
59+
} catch (e: Throwable) {
60+
log("failed to hook SurfaceView.performCollectViewAttributes", e)
2061
}
21-
})
22-
XposedHelpers.findAndHookMethod(Window::class.java, "setFlags", Int::class.java, Int::class.java, object: XC_MethodHook() {
23-
override fun beforeHookedMethod(param: MethodHookParam) {
24-
param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int)
25-
param.args[1] = filterKeepScreenOnFlag(param.args[1] as Int)
62+
}
63+
64+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
65+
try {
66+
val ViewRootImplClass = Class.forName("android.view.ViewRootImpl", false, lpparam.classLoader)
67+
XposedHelpers.findAndHookMethod(
68+
ViewRootImplClass,
69+
"applyKeepScreenOnFlag",
70+
WindowManager.LayoutParams::class.java,
71+
DO_NOTHING,
72+
)
73+
} catch (e: Throwable) {
74+
log("failed to hook ViewRootImpl.applyKeepScreenOnFlag", e)
2675
}
27-
})
76+
}
2877
}
2978
}

0 commit comments

Comments
 (0)