Skip to content

Commit ea1ba79

Browse files
working state for debugging LSPosed
1 parent b4b58cb commit ea1ba79

File tree

1 file changed

+51
-1
lines changed
  • AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingFeedback

1 file changed

+51
-1
lines changed
Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,77 @@
11
package de.binarynoise.AlwaysAllowChargingFeedback
22

3+
import java.util.concurrent.atomic.AtomicBoolean
34
import android.content.Context
45
import android.provider.Settings
6+
import android.util.Log
57
import de.robv.android.xposed.IXposedHookLoadPackage
8+
import de.robv.android.xposed.XC_MethodHook
69
import de.robv.android.xposed.XC_MethodReplacement
10+
import de.robv.android.xposed.XposedBridge
711
import de.robv.android.xposed.XposedHelpers
812
import de.robv.android.xposed.callbacks.XC_LoadPackage
913

1014
class Hook : IXposedHookLoadPackage {
1115

16+
private val TAG = "Logger"
17+
1218
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
19+
XposedBridge.log("attempting to hook ${lpparam.packageName} @ ${lpparam.processName}")
1320
if (lpparam.packageName != "android") return
1421

1522
val NotifierClass = XposedHelpers.findClass("com.android.server.power.Notifier", lpparam.classLoader)
23+
1624
XposedHelpers.findAndHookMethod(NotifierClass, "isChargingFeedbackEnabled", Int::class.java, object : XC_MethodReplacement() {
1725
override fun replaceHookedMethod(param: MethodHookParam): Boolean {
26+
Log.d(TAG, "replaceHookedMethod: isChargingFeedbackEnabled called")
27+
Log.e(TAG, "replaceHookedMethod: " , Throwable())
28+
val mIsPlayingChargingStartedFeedback = XposedHelpers.getObjectField(param.thisObject, "mIsPlayingChargingStartedFeedback") as AtomicBoolean
29+
mIsPlayingChargingStartedFeedback.set(false)
30+
Log.d(TAG, "replaceHookedMethod: mIsPlayingChargingStartedFeedback = ${mIsPlayingChargingStartedFeedback.get()}")
31+
1832
val userId = param.args[0] as Int
1933
val context = XposedHelpers.getObjectField(param.thisObject, "mContext") as Context
2034
// charging_sounds_enabled comes from Settings.Secure.CHARGING_SOUNDS_ENABLED which is @hide
21-
return XposedHelpers.callStaticMethod(
35+
val charging_sounds_enabled = XposedHelpers.callStaticMethod(
2236
Settings.Secure::class.java, "getIntForUser", context.contentResolver, "charging_sounds_enabled", 1, userId
2337
) != 0
38+
Log.d(TAG, "replaceHookedMethod: charging_sounds_enabled = ${charging_sounds_enabled}")
39+
return charging_sounds_enabled
40+
}
41+
})
42+
43+
XposedHelpers.findAndHookMethod(NotifierClass, "playChargingStartedFeedback",
44+
Int::class.java, Boolean::class.java,
45+
object: XC_MethodHook() {
46+
override fun beforeHookedMethod(param: MethodHookParam) {
47+
Log.d(TAG, "beforeHookedMethod: playChargingStartedFeedback")
48+
val mIsPlayingChargingStartedFeedback = XposedHelpers.getObjectField(param.thisObject, "mIsPlayingChargingStartedFeedback") as AtomicBoolean
49+
Log.d(TAG, "replaceHookedMethod: mIsPlayingChargingStartedFeedback = ${mIsPlayingChargingStartedFeedback.get()}")
50+
2451
}
2552
})
53+
54+
XposedHelpers.findAndHookMethod(NotifierClass, "showWiredChargingStarted",
55+
Int::class.java,
56+
object : XC_MethodHook() {
57+
override fun beforeHookedMethod(param: MethodHookParam) {
58+
Log.d(TAG, "beforeHookedMethod: showWiredChargingStarted")
59+
}
60+
})
61+
62+
NotifierClass.declaredMethods
63+
.filter { it.name == "playChargingStartedFeedback" || it.name == "showWiredChargingStarted"}
64+
.forEach {
65+
XposedBridge.hookMethod(it, object : XC_MethodHook() {
66+
override fun beforeHookedMethod(param: MethodHookParam) {
67+
Log.d(TAG, "beforeHookedMethod: ${param.method}")
68+
}
69+
})
70+
Log.d(TAG, "handleLoadPackage: hooked ${it}")
71+
XposedBridge.log("handleLoadPackage: hooked ${it}")
72+
}
73+
74+
Log.d(TAG, "handleLoadPackage: hooked ${lpparam.packageName}")
75+
XposedBridge.log("hooked charging stuff in ${lpparam.packageName}")
2676
}
2777
}

0 commit comments

Comments
 (0)