From 8fcdb29e068ae8954675a4535ca770e2e6c4d30b Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:16:19 +0100 Subject: [PATCH 1/4] Initial AntiWakeLock bringup --- AntiWakeLock/Readme.md | 1 + AntiWakeLock/build.gradle.kts | 13 +++++++ AntiWakeLock/src/main/AndroidManifest.xml | 20 ++++++++++ AntiWakeLock/src/main/assets/xposed_init | 1 + .../AntiWakeLock/PowerManagerHook.kt | 37 +++++++++++++++++++ .../en-US/full_description.txt | 0 .../en-US/short_description.txt | 0 .../en-US/title.txt | 0 modules.gradle.kts | 1 + 9 files changed, 73 insertions(+) create mode 100644 AntiWakeLock/Readme.md create mode 100644 AntiWakeLock/build.gradle.kts create mode 100644 AntiWakeLock/src/main/AndroidManifest.xml create mode 100644 AntiWakeLock/src/main/assets/xposed_init create mode 100644 AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt create mode 100644 metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt create mode 100644 metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt create mode 100644 metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt diff --git a/AntiWakeLock/Readme.md b/AntiWakeLock/Readme.md new file mode 100644 index 0000000..c296a5f --- /dev/null +++ b/AntiWakeLock/Readme.md @@ -0,0 +1 @@ +# Template diff --git a/AntiWakeLock/build.gradle.kts b/AntiWakeLock/build.gradle.kts new file mode 100644 index 0000000..d08b401 --- /dev/null +++ b/AntiWakeLock/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(libs.plugins.buildlogic.android.application) + alias(libs.plugins.buildlogic.kotlin.android) +} + +android { + namespace = "com.programminghoch10.AntiWakeLock" + + defaultConfig { + minSdk = 1 + targetSdk = 36 + } +} diff --git a/AntiWakeLock/src/main/AndroidManifest.xml b/AntiWakeLock/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b22e0f2 --- /dev/null +++ b/AntiWakeLock/src/main/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/AntiWakeLock/src/main/assets/xposed_init b/AntiWakeLock/src/main/assets/xposed_init new file mode 100644 index 0000000..c376e3b --- /dev/null +++ b/AntiWakeLock/src/main/assets/xposed_init @@ -0,0 +1 @@ +com.programminghoch10.AntiWakeLock.PowerManagerHook diff --git a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt new file mode 100644 index 0000000..c5deb21 --- /dev/null +++ b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt @@ -0,0 +1,37 @@ +package com.programminghoch10.AntiWakeLock + +import java.util.concurrent.* +import android.os.Build +import android.os.PowerManager +import android.os.WorkSource +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XC_MethodReplacement.DO_NOTHING +import de.robv.android.xposed.XC_MethodReplacement.returnConstant +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LoadPackage + +class PowerManagerHook : IXposedHookLoadPackage { + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + XposedHelpers.findAndHookMethod(PowerManager::class.java, "acquire", DO_NOTHING) + XposedHelpers.findAndHookMethod(PowerManager::class.java, "acquire", Int::class.java, DO_NOTHING) + + // optional hooks for completeness + XposedHelpers.findAndHookMethod(PowerManager::class.java, "isHeld", returnConstant(false)) + XposedHelpers.findAndHookMethod(PowerManager::class.java, "release", DO_NOTHING) + XposedHelpers.findAndHookMethod(PowerManager::class.java, "release", Int::class.java, DO_NOTHING) + XposedHelpers.findAndHookMethod(PowerManager::class.java, "setReferenceCounted", Boolean::class.java, DO_NOTHING) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) XposedHelpers.findAndHookMethod( + PowerManager::class.java, + "setStateListener", + Executor::class.java, + PowerManager.WakeLockStateListener::class.java, + DO_NOTHING, + ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) XposedHelpers.findAndHookMethod( + PowerManager::class.java, + "setWorkSource", + WorkSource::class.java, + DO_NOTHING, + ) + } +} diff --git a/metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt b/metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt new file mode 100644 index 0000000..e69de29 diff --git a/metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt b/metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt new file mode 100644 index 0000000..e69de29 diff --git a/metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt b/metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt new file mode 100644 index 0000000..e69de29 diff --git a/modules.gradle.kts b/modules.gradle.kts index 9b3782e..5b7a484 100644 --- a/modules.gradle.kts +++ b/modules.gradle.kts @@ -1,6 +1,7 @@ include(":AlwaysAllowChargingFeedback") include(":AnimationScaleMod") include(":AntiBrightnessChange") +include(":AntiWakeLock") include(":AutomaticAdvancedSettingsExpander") include(":BetterBluetoothDeviceSort") include(":BetterVerboseWiFiLogging") From d7ed780f37f8efd7133974b792a88120baa8c354 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:40:34 +0100 Subject: [PATCH 2/4] add Window hook hooks the KEEP_SCREEN_ON_FLAG for applications --- AntiWakeLock/src/main/assets/xposed_init | 1 + .../AntiWakeLock/WindowHook.kt | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt diff --git a/AntiWakeLock/src/main/assets/xposed_init b/AntiWakeLock/src/main/assets/xposed_init index c376e3b..d27b9d9 100644 --- a/AntiWakeLock/src/main/assets/xposed_init +++ b/AntiWakeLock/src/main/assets/xposed_init @@ -1 +1,2 @@ com.programminghoch10.AntiWakeLock.PowerManagerHook +com.programminghoch10.AntiWakeLock.WindowHook diff --git a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt new file mode 100644 index 0000000..bb7b42f --- /dev/null +++ b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt @@ -0,0 +1,29 @@ +package com.programminghoch10.AntiWakeLock + +import android.util.Log +import android.view.Window +import android.view.WindowManager +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LoadPackage + +class WindowHook : IXposedHookLoadPackage { + fun filterKeepScreenOnFlag(flags: Int) : Int { + return flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.inv() + } + + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + XposedHelpers.findAndHookMethod(Window::class.java, "addFlags", Int::class.java, object: XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int) + } + }) + XposedHelpers.findAndHookMethod(Window::class.java, "setFlags", Int::class.java, Int::class.java, object: XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int) + param.args[1] = filterKeepScreenOnFlag(param.args[1] as Int) + } + }) + } +} From 5ef16765ef6c6691beb6e277e708dac6ef222f14 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Tue, 13 Jan 2026 11:11:56 +0100 Subject: [PATCH 3/4] implement disable applyKeepScreenOnFlag --- AntiWakeLock/build.gradle.kts | 4 + .../AntiWakeLock/WindowHook.kt | 73 ++++++++++++++++--- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/AntiWakeLock/build.gradle.kts b/AntiWakeLock/build.gradle.kts index d08b401..327b7e9 100644 --- a/AntiWakeLock/build.gradle.kts +++ b/AntiWakeLock/build.gradle.kts @@ -11,3 +11,7 @@ android { targetSdk = 36 } } + +dependencies { + implementation(project(":logger")) +} diff --git a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt index bb7b42f..d165dfb 100644 --- a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt +++ b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt @@ -1,29 +1,78 @@ package com.programminghoch10.AntiWakeLock -import android.util.Log +import android.os.Build +import android.view.SurfaceView +import android.view.View import android.view.Window import android.view.WindowManager +import de.binarynoise.logger.Logger.log import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XC_MethodReplacement.DO_NOTHING import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class WindowHook : IXposedHookLoadPackage { - fun filterKeepScreenOnFlag(flags: Int) : Int { + fun filterKeepScreenOnFlag(flags: Int): Int { return flags and WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.inv() } - + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - XposedHelpers.findAndHookMethod(Window::class.java, "addFlags", Int::class.java, object: XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int) + XposedHelpers.findAndHookMethod( + Window::class.java, + "addFlags", + Int::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + log("removing FLAG_KEEP_SCREEN_ON from addFlags") + param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int) + } + }, + ) + XposedHelpers.findAndHookMethod( + Window::class.java, + "setFlags", Int::class.java, Int::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + log("removing FLAG_KEEP_SCREEN_ON from setFlags") + param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int) + param.args[1] = filterKeepScreenOnFlag(param.args[1] as Int) + } + }, + ) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + try { + val AttachInfoClass = Class.forName(View::class.java.name + "\$AttachInfo", false, lpparam.classLoader) + XposedHelpers.findAndHookMethod( + SurfaceView::class.java, + "performCollectViewAttributes", + AttachInfoClass, + Int::class.java, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + val attachInfo = param.args[0] + XposedHelpers.setBooleanField(attachInfo, "mKeepScreenOn", false) + } + }, + ) + } catch (e: Throwable) { + log("failed to hook SurfaceView.performCollectViewAttributes", e) } - }) - XposedHelpers.findAndHookMethod(Window::class.java, "setFlags", Int::class.java, Int::class.java, object: XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - param.args[0] = filterKeepScreenOnFlag(param.args[0] as Int) - param.args[1] = filterKeepScreenOnFlag(param.args[1] as Int) + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + try { + val ViewRootImplClass = Class.forName("android.view.ViewRootImpl", false, lpparam.classLoader) + XposedHelpers.findAndHookMethod( + ViewRootImplClass, + "applyKeepScreenOnFlag", + WindowManager.LayoutParams::class.java, + DO_NOTHING, + ) + } catch (e: Throwable) { + log("failed to hook ViewRootImpl.applyKeepScreenOnFlag", e) } - }) + } } } From 58b6cff17b4ff4e4a4b4206c3cc4ddf407085c80 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Tue, 13 Jan 2026 12:01:28 +0100 Subject: [PATCH 4/4] add AntiWakeLock metadata --- AntiWakeLock/Readme.md | 6 +++++- .../en-US/full_description.txt | 3 +++ .../en-US/short_description.txt | 1 + metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/AntiWakeLock/Readme.md b/AntiWakeLock/Readme.md index c296a5f..28d567b 100644 --- a/AntiWakeLock/Readme.md +++ b/AntiWakeLock/Readme.md @@ -1 +1,5 @@ -# Template +# AntiWakeLock + +Disable WAKE_LOCK and FLAG_KEEP_SCREEN_ON. + +Applies to selected apps only. diff --git a/metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt b/metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt index e69de29..d432b5b 100644 --- a/metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt +++ b/metadata/com.programminghoch10.AntiWakeLock/en-US/full_description.txt @@ -0,0 +1,3 @@ +Disable WAKE_LOCK and FLAG_KEEP_SCREEN_ON. + +Applies to selected apps only. diff --git a/metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt b/metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt index e69de29..65159ab 100644 --- a/metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt +++ b/metadata/com.programminghoch10.AntiWakeLock/en-US/short_description.txt @@ -0,0 +1 @@ +Disable WAKE_LOCK and FLAG_KEEP_SCREEN_ON. diff --git a/metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt b/metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt index e69de29..9d50a4c 100644 --- a/metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt +++ b/metadata/com.programminghoch10.AntiWakeLock/en-US/title.txt @@ -0,0 +1 @@ +AntiWakeLock