diff --git a/AlwaysAllowChargingFeedback/Readme.md b/AlwaysAllowChargingFeedback/Readme.md
new file mode 100644
index 0000000..2f668a2
--- /dev/null
+++ b/AlwaysAllowChargingFeedback/Readme.md
@@ -0,0 +1,4 @@
+# AlwaysAllowChargingFeedback
+
+Always allow charging feedback,
+even when the device is in Do-not-Disturb mode.
diff --git a/AlwaysAllowChargingFeedback/build.gradle.kts b/AlwaysAllowChargingFeedback/build.gradle.kts
new file mode 100644
index 0000000..8b19b6e
--- /dev/null
+++ b/AlwaysAllowChargingFeedback/build.gradle.kts
@@ -0,0 +1,15 @@
+plugins {
+ alias(libs.plugins.buildlogic.android.application)
+ alias(libs.plugins.buildlogic.kotlin.android)
+}
+
+android {
+ namespace = "de.binarynoise.AlwaysAllowChargingFeedback"
+
+ defaultConfig {
+ minSdk = 28
+ targetSdk = 36
+ }
+}
+
+dependencies {}
diff --git a/AlwaysAllowChargingFeedback/src/main/AndroidManifest.xml b/AlwaysAllowChargingFeedback/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..1a5a909
--- /dev/null
+++ b/AlwaysAllowChargingFeedback/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AlwaysAllowChargingFeedback/src/main/assets/xposed_init b/AlwaysAllowChargingFeedback/src/main/assets/xposed_init
new file mode 100644
index 0000000..ffb29ca
--- /dev/null
+++ b/AlwaysAllowChargingFeedback/src/main/assets/xposed_init
@@ -0,0 +1 @@
+de.binarynoise.AlwaysAllowChargingFeedback.Hook
diff --git a/AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingSounds/Hook.kt b/AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingSounds/Hook.kt
new file mode 100644
index 0000000..ebfc45b
--- /dev/null
+++ b/AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingSounds/Hook.kt
@@ -0,0 +1,27 @@
+package de.binarynoise.AlwaysAllowChargingFeedback
+
+import android.content.Context
+import android.provider.Settings
+import de.robv.android.xposed.IXposedHookLoadPackage
+import de.robv.android.xposed.XC_MethodReplacement
+import de.robv.android.xposed.XposedHelpers
+import de.robv.android.xposed.callbacks.XC_LoadPackage
+
+class Hook : IXposedHookLoadPackage {
+
+ override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
+ if (lpparam.packageName != "android") return
+
+ val NotifierClass = XposedHelpers.findClass("com.android.server.power.Notifier", lpparam.classLoader)
+ XposedHelpers.findAndHookMethod(NotifierClass, "isChargingFeedbackEnabled", Int::class.java, object : XC_MethodReplacement() {
+ override fun replaceHookedMethod(param: MethodHookParam): Boolean {
+ val userId = param.args[0] as Int
+ val context = XposedHelpers.getObjectField(param.thisObject, "mContext") as Context
+ // charging_sounds_enabled comes from Settings.Secure.CHARGING_SOUNDS_ENABLED which is @hide
+ return XposedHelpers.callStaticMethod(
+ Settings.Secure::class.java, "getIntForUser", context.contentResolver, "charging_sounds_enabled", 1, userId
+ ) != 0
+ }
+ })
+ }
+}
diff --git a/AlwaysAllowChargingFeedback/src/main/res/values/arrays.xml b/AlwaysAllowChargingFeedback/src/main/res/values/arrays.xml
new file mode 100644
index 0000000..db6e46a
--- /dev/null
+++ b/AlwaysAllowChargingFeedback/src/main/res/values/arrays.xml
@@ -0,0 +1,6 @@
+
+
+
+ - android
+
+
diff --git a/README.md b/README.md
index 3a7c600..6a89956 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@ A collection of small Xposed Modules.
| Module | Author | Description | Releases |
|-|-|-|-|
+| [AlwaysAllowChargingFeedback](AlwaysAllowChargingFeedback) | [@binarynoise](https://github.com/binarynoise) | Always allow charging feedback, even in DnD mode | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AlwaysAllowChargingFeedback) |
| [AlwaysAllowMultiInstanceSplit](AlwaysAllowMultiInstanceSplit) | [@binarynoise](https://github.com/binarynoise) & [@programminghoch10](https://github.com/programminghoch10) | Allow all apps to be launched twice in a split screen | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AnimationScaleMod) |
| [AnimationScaleMod](AnimationScaleMod) | [@programminghoch10](https://github.com/programminghoch10) | Add more animation scale multipliers | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AnimationScaleMod) |
| [AntiBrightnessChange](AntiBrightnessChange) | [@programminghoch10](https://github.com/programminghoch10) | Prevent apps from changing display brightness | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AntiBrightnessChange) [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/com.programminghoch10.AntiBrightnessChange) |
diff --git a/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/full_description.txt b/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/full_description.txt
new file mode 100644
index 0000000..775fa12
--- /dev/null
+++ b/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/full_description.txt
@@ -0,0 +1,2 @@
+Always allow charging feedback,
+even when the device is set into Do-not-Disturb mode.
diff --git a/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/short_description.txt b/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/short_description.txt
new file mode 100644
index 0000000..ec53190
--- /dev/null
+++ b/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/short_description.txt
@@ -0,0 +1 @@
+Always allow charging feedback, even in DnD mode
diff --git a/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/title.txt b/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/title.txt
new file mode 100644
index 0000000..83bfe24
--- /dev/null
+++ b/metadata/de.binarynoise.AlwaysAllowChargingSounds/en-US/title.txt
@@ -0,0 +1 @@
+AlwaysAllowChargingFeedback
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 667cf53..931746a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -39,6 +39,7 @@ dependencyResolutionManagement {
rootProject.name = "XposedModulets"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
+include(":AlwaysAllowChargingFeedback")
include(":AlwaysAllowMultiInstanceSplit")
include(":AnimationScaleMod")
include(":AntiBrightnessChange")