|
1 | 1 | package de.binarynoise.AlwaysAllowChargingFeedback |
2 | 2 |
|
| 3 | +import java.util.concurrent.atomic.AtomicBoolean |
3 | 4 | import android.content.Context |
4 | 5 | import android.provider.Settings |
| 6 | +import android.util.Log |
5 | 7 | import de.robv.android.xposed.IXposedHookLoadPackage |
| 8 | +import de.robv.android.xposed.XC_MethodHook |
6 | 9 | import de.robv.android.xposed.XC_MethodReplacement |
| 10 | +import de.robv.android.xposed.XposedBridge |
7 | 11 | import de.robv.android.xposed.XposedHelpers |
8 | 12 | import de.robv.android.xposed.callbacks.XC_LoadPackage |
9 | 13 |
|
10 | 14 | class Hook : IXposedHookLoadPackage { |
11 | 15 |
|
| 16 | + private val TAG = "Logger" |
| 17 | + |
12 | 18 | override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { |
| 19 | + XposedBridge.log("attempting to hook ${lpparam.packageName} @ ${lpparam.processName}") |
13 | 20 | if (lpparam.packageName != "android") return |
14 | 21 |
|
15 | 22 | val NotifierClass = XposedHelpers.findClass("com.android.server.power.Notifier", lpparam.classLoader) |
| 23 | + |
16 | 24 | XposedHelpers.findAndHookMethod(NotifierClass, "isChargingFeedbackEnabled", Int::class.java, object : XC_MethodReplacement() { |
17 | 25 | 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 | + |
18 | 32 | val userId = param.args[0] as Int |
19 | 33 | val context = XposedHelpers.getObjectField(param.thisObject, "mContext") as Context |
20 | 34 | // charging_sounds_enabled comes from Settings.Secure.CHARGING_SOUNDS_ENABLED which is @hide |
21 | | - return XposedHelpers.callStaticMethod( |
| 35 | + val charging_sounds_enabled = XposedHelpers.callStaticMethod( |
22 | 36 | Settings.Secure::class.java, "getIntForUser", context.contentResolver, "charging_sounds_enabled", 1, userId |
23 | 37 | ) != 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 | + |
24 | 51 | } |
25 | 52 | }) |
| 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}") |
26 | 76 | } |
27 | 77 | } |
0 commit comments