diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 3fc4af8..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,12 +0,0 @@
-[*]
-charset = utf-8
-end_of_line = lf
-indent_size = 4
-indent_style = space
-insert_final_newline = true
-max_line_length = 150
-tab_width = 4
-trim_trailing_whitespace = false
-
-[{*.yml,*.yaml}]
-indent_size = 2
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index faa300a..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-*.bat text eol=crlf
-*.cmd text eol=crlf
-*.sh text eol=lf
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 5ace460..0000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-version: 2
-updates:
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: "weekly"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index d614860..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,80 +0,0 @@
-name: Build & Upload APKs
-
-on:
- push:
-
-permissions:
- contents: read
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Setup Java
- uses: actions/setup-java@v5
- with:
- distribution: temurin
- java-version: 21
-
- - name: Checkout
- uses: actions/checkout@v7
- with:
- fetch-depth: 0
-
- - name: Cache Gradle
- uses: actions/cache@v6
- with:
- path: |
- ~/.gradle/caches
- ~/.gradle/wrapper
- key: gradle-cache-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
- restore-keys: gradle-cache-
-
- - name: Prepare files
- run: |
- chmod +x gradlew
-
- - name: Compile
- run: ./gradlew assembleDebug
-
- - name: Upload Result (all APKs)
- uses: actions/upload-artifact@v7
- with:
- name: all-apks.zip
- path: '*/build/outputs/apk/debug/*-debug.apk'
- if-no-files-found: error
-
- - name: Find APKs and set matrix
- id: find_apks
- run: |
- set -euo pipefail
- apks=$(find . -type f -path "*/build/outputs/apk/debug/*-debug.apk" -printf '{"path":"%p","name":"%f"},' | sed 's/,$//' | awk '{print "[" $0 "]"}')
- if [ -z "$apks" ] || [ "$apks" = "[]" ]; then
- echo "No APKs found!"
- exit 1
- fi
- echo "artifact_paths=$apks" >> $GITHUB_OUTPUT
- cat $GITHUB_OUTPUT
-
- outputs:
- artifact-paths: ${{ steps.find_apks.outputs.artifact_paths }}
-
- upload_individual_apks:
- needs: build
- runs-on: ubuntu-latest
- strategy:
- matrix:
- apk: ${{ fromJson(needs.build.outputs.artifact-paths) }}
- steps:
- - name: Download all-apks artifact
- uses: actions/download-artifact@v8
- with:
- name: all-apks.zip
-
- - name: Upload single APK
- uses: actions/upload-artifact@v7
- with:
- name: ${{ matrix.apk.name }}
- path: ${{ matrix.apk.path }}
- archive: false
- if-no-files-found: error
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 5390d65..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,47 +0,0 @@
-# Gradle files
-.gradle
-**/build/
-!src/**/build/
-
-# Ignore Gradle GUI config
-gradle-app.setting
-
-# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
-!gradle-wrapper.jar
-
-# Avoid ignore Gradle wrappper properties
-!gradle-wrapper.properties
-
-# Local configuration file (sdk path, etc)
-local.properties
-keystore.properties
-github.properties
-
-# Log/OS Files
-*.log
-
-# Android Studio generated files and folders
-captures/
-.externalNativeBuild/
-.cxx/
-*.apk
-output.json
-.kotlin/
-
-# IntelliJ
-*.iml
-.idea/
-misc.xml
-deploymentTargetDropDown.xml
-render.experimental.xml
-!/.idea/codeStyles/*
-
-# Keystore files
-*.jks
-*.keystore
-
-# Google Services (e.g. APIs or Firebase)
-google-services.json
-
-# Android Profiling
-*.hprof
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
deleted file mode 100644
index 4d0cdf6..0000000
--- a/.idea/codeStyles/Project.xml
+++ /dev/null
@@ -1,259 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- xmlns:android
-
- ^$
-
-
-
-
-
-
-
-
- xmlns:.*
-
- ^$
-
-
- BY_NAME
-
-
-
-
-
-
- .*:id
-
- http://schemas.android.com/apk/res/android
-
-
-
-
-
-
-
-
- .*:name
-
- http://schemas.android.com/apk/res/android
-
-
-
-
-
-
-
-
- name
-
- ^$
-
-
-
-
-
-
-
-
- style
-
- ^$
-
-
-
-
-
-
-
-
- .*
-
- ^$
-
-
- BY_NAME
-
-
-
-
-
-
- .*
-
- http://schemas.android.com/apk/res/android
-
-
- ANDROID_ATTRIBUTE_ORDER
-
-
-
-
-
-
- .*
-
- .*
-
-
- BY_NAME
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
deleted file mode 100644
index 0f7bc51..0000000
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/template/metadata/package/en-US/full_description.txt b/.nojekyll
similarity index 100%
rename from template/metadata/package/en-US/full_description.txt
rename to .nojekyll
diff --git a/AlwaysAllowChargingFeedback/Readme.md b/AlwaysAllowChargingFeedback/Readme.md
deleted file mode 100644
index 2f668a2..0000000
--- a/AlwaysAllowChargingFeedback/Readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# 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
deleted file mode 100644
index 8b19b6e..0000000
--- a/AlwaysAllowChargingFeedback/build.gradle.kts
+++ /dev/null
@@ -1,15 +0,0 @@
-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
deleted file mode 100644
index 1a5a909..0000000
--- a/AlwaysAllowChargingFeedback/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AlwaysAllowChargingFeedback/src/main/assets/xposed_init b/AlwaysAllowChargingFeedback/src/main/assets/xposed_init
deleted file mode 100644
index ffb29ca..0000000
--- a/AlwaysAllowChargingFeedback/src/main/assets/xposed_init
+++ /dev/null
@@ -1 +0,0 @@
-de.binarynoise.AlwaysAllowChargingFeedback.Hook
diff --git a/AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingFeedback/Hook.kt b/AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingFeedback/Hook.kt
deleted file mode 100644
index ebfc45b..0000000
--- a/AlwaysAllowChargingFeedback/src/main/java/de/binarynoise/AlwaysAllowChargingFeedback/Hook.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-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
deleted file mode 100644
index db6e46a..0000000
--- a/AlwaysAllowChargingFeedback/src/main/res/values/arrays.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- - android
-
-
diff --git a/AnimationScaleMod/Readme.md b/AnimationScaleMod/Readme.md
deleted file mode 100644
index 63b3515..0000000
--- a/AnimationScaleMod/Readme.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# AnimationScaleMod
-
-This XPosed module adds more animation scale multipliers
-to the animation scale configuration in the development options.
-
-Before/Later Comparison: \
-
diff --git a/AnimationScaleMod/build.gradle.kts b/AnimationScaleMod/build.gradle.kts
deleted file mode 100644
index 94219c3..0000000
--- a/AnimationScaleMod/build.gradle.kts
+++ /dev/null
@@ -1,12 +0,0 @@
-plugins {
- alias(libs.plugins.buildlogic.android.application)
-}
-
-android {
- namespace = "com.programminghoch10.AnimationScaleMod"
-
- defaultConfig {
- minSdk = 24
- targetSdk = 35
- }
-}
diff --git a/AnimationScaleMod/src/main/AndroidManifest.xml b/AnimationScaleMod/src/main/AndroidManifest.xml
deleted file mode 100644
index 748ade1..0000000
--- a/AnimationScaleMod/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AnimationScaleMod/src/main/assets/xposed_init b/AnimationScaleMod/src/main/assets/xposed_init
deleted file mode 100644
index c5b7a7c..0000000
--- a/AnimationScaleMod/src/main/assets/xposed_init
+++ /dev/null
@@ -1 +0,0 @@
-com.programminghoch10.AnimationScaleMod.ScaleHook
diff --git a/AnimationScaleMod/src/main/java/com/programminghoch10/AnimationScaleMod/ScaleHook.java b/AnimationScaleMod/src/main/java/com/programminghoch10/AnimationScaleMod/ScaleHook.java
deleted file mode 100644
index 26b5248..0000000
--- a/AnimationScaleMod/src/main/java/com/programminghoch10/AnimationScaleMod/ScaleHook.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.programminghoch10.AnimationScaleMod;
-
-import android.content.res.XModuleResources;
-import android.content.res.XResources;
-
-import java.util.Arrays;
-
-import de.robv.android.xposed.IXposedHookInitPackageResources;
-import de.robv.android.xposed.IXposedHookZygoteInit;
-import de.robv.android.xposed.callbacks.XC_InitPackageResources;
-
-public class ScaleHook implements IXposedHookInitPackageResources, IXposedHookZygoteInit {
- private static final String PACKAGE_SETTINGS = "com.android.settings";
- private final static String[] arrayResourceNames = { "window_animation", "transition_animation", "animator_duration", };
- private static String modulePath = null;
-
- @Override
- public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) {
- if (!resparam.packageName.equals(PACKAGE_SETTINGS)) return;
- XResources resources = resparam.res;
- XModuleResources moduleResources = XModuleResources.createInstance(modulePath, resources);
- for (String arrayResourceName : arrayResourceNames) {
- arrayResourceName += "_scale";
- resources.setReplacement(PACKAGE_SETTINGS, "array", arrayResourceName + "_values", moduleResources.fwd(R.array.animation_scale_values));
- String animationOff = resources.getStringArray(resources.getIdentifier(arrayResourceName + "_entries", "array", PACKAGE_SETTINGS))[0];
- String[] entries = resources.getStringArray(resources.getIdentifier(arrayResourceName + "_values", "array", PACKAGE_SETTINGS));
- entries = Arrays.stream(entries).map(entry -> Float.parseFloat(entry) + "x").toArray(String[]::new);
- entries[0] = animationOff;
- resources.setReplacement(PACKAGE_SETTINGS, "array", arrayResourceName + "_entries", entries);
- }
- }
-
- @Override
- public void initZygote(StartupParam startupParam) {
- modulePath = startupParam.modulePath;
- }
-}
diff --git a/AnimationScaleMod/src/main/res/values/arrays.xml b/AnimationScaleMod/src/main/res/values/arrays.xml
deleted file mode 100644
index 713855e..0000000
--- a/AnimationScaleMod/src/main/res/values/arrays.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
- - com.android.settings
-
-
-
- - 0
- - .25
- - .5
- - .75
- - 1
- - 1.5
- - 2
- - 2.5
- - 3
- - 4
- - 5
- - 7.5
- - 10
-
-
diff --git a/AntiBrightnessChange/README.md b/AntiBrightnessChange/README.md
deleted file mode 100644
index 8e5231e..0000000
--- a/AntiBrightnessChange/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# AntiBrightnessChange
-
-This Xposed module prevents selected apps from overwriting the screen brightness.
-
-If applied to System Framework (`android`),
-it will prevent every app from changing the screen brightness.
diff --git a/AntiBrightnessChange/build.gradle.kts b/AntiBrightnessChange/build.gradle.kts
deleted file mode 100644
index 8c85853..0000000
--- a/AntiBrightnessChange/build.gradle.kts
+++ /dev/null
@@ -1,12 +0,0 @@
-plugins {
- alias(libs.plugins.buildlogic.android.application)
-}
-
-android {
- namespace = "com.programminghoch10.AntiBrightnessChange"
-
- defaultConfig {
- minSdk = 17
- targetSdk = 36
- }
-}
diff --git a/AntiBrightnessChange/src/main/AndroidManifest.xml b/AntiBrightnessChange/src/main/AndroidManifest.xml
deleted file mode 100644
index 288ffee..0000000
--- a/AntiBrightnessChange/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/AntiBrightnessChange/src/main/assets/xposed_init b/AntiBrightnessChange/src/main/assets/xposed_init
deleted file mode 100644
index bb3b42b..0000000
--- a/AntiBrightnessChange/src/main/assets/xposed_init
+++ /dev/null
@@ -1 +0,0 @@
-com.programminghoch10.AntiBrightnessChange.Hook
diff --git a/AntiBrightnessChange/src/main/java/com/programminghoch10/AntiBrightnessChange/Hook.java b/AntiBrightnessChange/src/main/java/com/programminghoch10/AntiBrightnessChange/Hook.java
deleted file mode 100644
index 0ebf37b..0000000
--- a/AntiBrightnessChange/src/main/java/com/programminghoch10/AntiBrightnessChange/Hook.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.programminghoch10.AntiBrightnessChange;
-
-import static android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
-
-import android.os.Build;
-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;
-
-public class Hook implements IXposedHookLoadPackage {
- @Override
- public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
- if (lpparam.packageName.equals("android") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- XposedHelpers.findAndHookMethod(
- "com.android.server.wm.RootWindowContainer",
- lpparam.classLoader,
- "handleNotObscuredLocked",
- "com.android.server.wm.WindowState",
- boolean.class,
- boolean.class,
- new XC_MethodHook() {
- @Override
- protected void afterHookedMethod(MethodHookParam param) {
- XposedHelpers.setFloatField(param.thisObject, "mScreenBrightnessOverride", Float.NaN);
- }
- }
- );
- return;
- }
-
- XposedHelpers.findAndHookMethod(
- WindowManager.LayoutParams.class, "copyFrom", WindowManager.LayoutParams.class, new XC_MethodHook() {
- @Override
- protected void beforeHookedMethod(MethodHookParam param) {
- WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams) param.args[0];
- layoutParams.screenBrightness = BRIGHTNESS_OVERRIDE_NONE;
- layoutParams.buttonBrightness = BRIGHTNESS_OVERRIDE_NONE;
- }
- }
- );
- }
-}
diff --git a/AntiWakeLock/Readme.md b/AntiWakeLock/Readme.md
deleted file mode 100644
index a806757..0000000
--- a/AntiWakeLock/Readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# AntiWakeLock
-
-Disable WAKE_LOCK and FLAG_KEEP_SCREEN_ON.
-
-Can be applied to selected apps or the whole system.
diff --git a/AntiWakeLock/build.gradle.kts b/AntiWakeLock/build.gradle.kts
deleted file mode 100644
index 1452cf6..0000000
--- a/AntiWakeLock/build.gradle.kts
+++ /dev/null
@@ -1,17 +0,0 @@
-plugins {
- alias(libs.plugins.buildlogic.android.application)
- alias(libs.plugins.buildlogic.kotlin.android)
-}
-
-android {
- namespace = "com.programminghoch10.AntiWakeLock"
-
- defaultConfig {
- minSdk = 14
- targetSdk = 36
- }
-}
-
-dependencies {
- implementation(projects.logger)
-}
diff --git a/AntiWakeLock/src/main/AndroidManifest.xml b/AntiWakeLock/src/main/AndroidManifest.xml
deleted file mode 100644
index 441c151..0000000
--- a/AntiWakeLock/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/AntiWakeLock/src/main/assets/xposed_init b/AntiWakeLock/src/main/assets/xposed_init
deleted file mode 100644
index db2ca61..0000000
--- a/AntiWakeLock/src/main/assets/xposed_init
+++ /dev/null
@@ -1,3 +0,0 @@
-com.programminghoch10.AntiWakeLock.PowerManagerHook
-com.programminghoch10.AntiWakeLock.PowerManagerServiceHook
-com.programminghoch10.AntiWakeLock.WindowHook
diff --git a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt
deleted file mode 100644
index d832091..0000000
--- a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerHook.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-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.WakeLock::class.java, "acquire", DO_NOTHING)
- XposedHelpers.findAndHookMethod(PowerManager.WakeLock::class.java, "acquire", Long::class.java, DO_NOTHING)
-
- // optional hooks for completeness
- XposedHelpers.findAndHookMethod(PowerManager.WakeLock::class.java, "isHeld", returnConstant(false))
- XposedHelpers.findAndHookMethod(PowerManager.WakeLock::class.java, "release", DO_NOTHING)
- XposedHelpers.findAndHookMethod(PowerManager.WakeLock::class.java, "release", Int::class.java, DO_NOTHING)
- XposedHelpers.findAndHookMethod(PowerManager.WakeLock::class.java, "setReferenceCounted", Boolean::class.java, DO_NOTHING)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) XposedHelpers.findAndHookMethod(
- PowerManager.WakeLock::class.java,
- "setStateListener",
- Executor::class.java,
- PowerManager.WakeLockStateListener::class.java,
- DO_NOTHING,
- )
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) XposedHelpers.findAndHookMethod(
- PowerManager.WakeLock::class.java,
- "setWorkSource",
- WorkSource::class.java,
- DO_NOTHING,
- )
- }
-}
diff --git a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerServiceHook.kt b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerServiceHook.kt
deleted file mode 100644
index 49976b3..0000000
--- a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/PowerManagerServiceHook.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.programminghoch10.AntiWakeLock
-
-import android.os.Build
-import de.robv.android.xposed.IXposedHookLoadPackage
-import de.robv.android.xposed.XC_MethodReplacement
-import de.robv.android.xposed.XposedBridge
-import de.robv.android.xposed.XposedHelpers
-import de.robv.android.xposed.callbacks.XC_LoadPackage
-
-class PowerManagerServiceHook : IXposedHookLoadPackage {
- fun disableMethodByName(clazz: Class<*>, name: String) {
- val method = clazz.declaredMethods.single { it.name == name }
- XposedBridge.hookMethod(method, XC_MethodReplacement.DO_NOTHING)
- }
-
- override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
- if (lpparam.packageName != "android") return
-
- val PowerManagerServiceClass = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) XposedHelpers.findClass("com.android.server.power.PowerManagerService", lpparam.classLoader)
- else XposedHelpers.findClass("com.android.server.PowerManagerService", lpparam.classLoader)
-
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
- disableMethodByName(PowerManagerServiceClass, "acquireWakeLock")
- disableMethodByName(PowerManagerServiceClass, "releaseWakeLock")
- }
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- disableMethodByName(PowerManagerServiceClass, "acquireWakeLockInternal")
- disableMethodByName(PowerManagerServiceClass, "releaseWakeLockInternal")
- }
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- val BinderServiceClass = XposedHelpers.findClass("${PowerManagerServiceClass.name}\$BinderService", lpparam.classLoader)
- disableMethodByName(BinderServiceClass, "acquireWakeLock")
- disableMethodByName(BinderServiceClass, "releaseWakeLock")
- }
- }
-}
diff --git a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt b/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt
deleted file mode 100644
index cd42e5f..0000000
--- a/AntiWakeLock/src/main/java/com/programminghoch10/AntiWakeLock/WindowHook.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.programminghoch10.AntiWakeLock
-
-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 {
- 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) {
- 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)
- }
- }
-
- 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,
- )
- log("hooked applyKeepScreenOnFlag to do nothing")
- } catch (e: Throwable) {
- log("failed to hook ViewRootImpl.applyKeepScreenOnFlag", e)
- }
- }
- }
-}
diff --git a/AutomaticAdvancedSettingsExpander/.gitignore b/AutomaticAdvancedSettingsExpander/.gitignore
deleted file mode 100644
index 42afabf..0000000
--- a/AutomaticAdvancedSettingsExpander/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/AutomaticAdvancedSettingsExpander/README.md b/AutomaticAdvancedSettingsExpander/README.md
deleted file mode 100644
index 0e164a7..0000000
--- a/AutomaticAdvancedSettingsExpander/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Automatic Advanced Settings Expander
-
-This Xposed module automatically expands the advanced settings in the Settings app by hooking PreferenceGroup and ExpandablePreference.
-I hate to always expand them myself every time.
-
-Should work on all Android versions where the Settings app uses one of
-
-- androidx.preference.PreferenceGroup
-- android.preference.PreferenceGroup
-- android.support.v7.preference.PreferenceGroup
-- com.android.settingslib.widget.ExpandablePreference
-
-Please report where it stops working so that I can edit the minSdkVersion or add missing classes.
-
-This is an Xposed module [part of the LSPosed Module Repo](https://github.com/Xposed-Modules-Repo/de.binarynoise.automaticadvancedsettingsexpander) or
-in the LSPosed App.
-
-| `before` | `after ` |
-|--------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
-|  |  |
diff --git a/AutomaticAdvancedSettingsExpander/build.gradle.kts b/AutomaticAdvancedSettingsExpander/build.gradle.kts
deleted file mode 100644
index 39d4825..0000000
--- a/AutomaticAdvancedSettingsExpander/build.gradle.kts
+++ /dev/null
@@ -1,31 +0,0 @@
-plugins {
- alias(libs.plugins.buildlogic.android.application)
- alias(libs.plugins.buildlogic.kotlin.android)
-}
-
-android {
- namespace = "de.binarynoise.AutomaticAdvancedSettingsExpander"
-
- defaultConfig {
- minSdk = 16
- targetSdk = 36
-
- buildConfigField("String", "SHARED_PREFERENCES_NAME", "\"automatic_advanced_settings_expander\"")
- }
-
- buildFeatures {
- buildConfig = true
- }
-
- signingConfigs {
- maybeCreate("release").apply {
- keyAlias = "automaticadvancedsettingsexpander"
- }
- }
-}
-
-dependencies {
- implementation(projects.logger)
-// implementation(libs.androidx.fragment.ktx)
- implementation(libs.androidx.preference.ktx)
-}
diff --git a/AutomaticAdvancedSettingsExpander/src/main/AndroidManifest.xml b/AutomaticAdvancedSettingsExpander/src/main/AndroidManifest.xml
deleted file mode 100644
index 199f9e2..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomaticAdvancedSettingsExpander/src/main/assets/xposed_init b/AutomaticAdvancedSettingsExpander/src/main/assets/xposed_init
deleted file mode 100644
index 3fa17e3..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/assets/xposed_init
+++ /dev/null
@@ -1,2 +0,0 @@
-de.binarynoise.AutomaticAdvancedSettingsExpander.ExpandablePreferenceHook
-de.binarynoise.AutomaticAdvancedSettingsExpander.PreferenceGroupChildrenHook
diff --git a/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/ExpandablePreferenceHook.kt b/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/ExpandablePreferenceHook.kt
deleted file mode 100644
index de6a545..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/ExpandablePreferenceHook.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package de.binarynoise.AutomaticAdvancedSettingsExpander
-
-import android.content.Context
-import android.os.Build
-import android.util.AttributeSet
-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 ExpandablePreferenceHook : IXposedHookLoadPackage {
- override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.BAKLAVA) return
-
- val ExpandablePreferenceClass = XposedHelpers.findClass("com.android.settingslib.widget.ExpandablePreference", lpparam.classLoader)
- XposedHelpers.findAndHookConstructor(
- ExpandablePreferenceClass, Context::class.java, AttributeSet::class.java, Int::class.java, Int::class.java,
- object : XC_MethodHook() {
- override fun afterHookedMethod(param: MethodHookParam) {
- XposedHelpers.setBooleanField(param.thisObject, "isExpanded", true)
- }
- },
- )
- }
-}
diff --git a/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/PreferenceGroupChildrenHook.kt b/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/PreferenceGroupChildrenHook.kt
deleted file mode 100644
index 6190767..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/PreferenceGroupChildrenHook.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-package de.binarynoise.AutomaticAdvancedSettingsExpander
-
-import de.binarynoise.logger.Logger.log
-import de.robv.android.xposed.IXposedHookLoadPackage
-import de.robv.android.xposed.XposedHelpers
-import de.robv.android.xposed.callbacks.XC_LoadPackage
-import de.robv.android.xposed.XC_MethodHook as MethodHook
-
-
-class PreferenceGroupChildrenHook : IXposedHookLoadPackage {
- override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
- val packages = arrayOf(
- "androidx.preference",
- "android.preference",
- "android.support.v7.preference",
- )
-
- val classes = arrayOf("PreferenceGroup")
-
- val hook = object : MethodHook() {
- override fun beforeHookedMethod(param: MethodHookParam) {
- log("expandedCount would have been set to ${param.args[0]}, but setting to Int.MAX_VALUE instead")
- param.args[0] = Int.MAX_VALUE
- }
- }
-
- packages.forEach { pkg ->
- classes.forEach { cls ->
- try {
- XposedHelpers.findAndHookMethod("$pkg.$cls", lpparam.classLoader, "setInitialExpandedChildrenCount", Int::class.java, hook)
- log("Hooked $pkg.$cls")
- } catch (_: NoSuchMethodError) {
- } catch (_: NoSuchMethodException) {
- } catch (_: XposedHelpers.ClassNotFoundError) {
- } catch (_: ClassNotFoundException) {
- } catch (e: Exception) {
- log("failed to hook", e)
- }
- }
- }
- }
-}
diff --git a/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/SettingsActivity.kt b/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/SettingsActivity.kt
deleted file mode 100644
index 6ccc296..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/java/de/binarynoise/AutomaticAdvancedSettingsExpander/SettingsActivity.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-package de.binarynoise.AutomaticAdvancedSettingsExpander
-
-import kotlin.contracts.ExperimentalContracts
-import kotlin.contracts.InvocationKind
-import kotlin.contracts.contract
-import android.os.Build
-import android.os.Bundle
-import androidx.fragment.app.FragmentActivity
-import androidx.preference.Preference
-import androidx.preference.PreferenceFragmentCompat
-import androidx.preference.PreferenceGroup
-import androidx.preference.SwitchPreference
-import androidx.preference.children
-import de.binarynoise.AutomaticAdvancedSettingsExpander.BuildConfig.SHARED_PREFERENCES_NAME
-
-class SettingsActivity : FragmentActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.settings_activity)
- if (savedInstanceState == null) {
- supportFragmentManager.beginTransaction().replace(R.id.settings, SettingsFragment()).commit()
- }
- actionBar?.setDisplayHomeAsUpEnabled(true)
- }
-
- override fun onNavigateUp(): Boolean {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- finishAndRemoveTask()
- }
- return true
- }
-
- class SettingsFragment : PreferenceFragmentCompat() {
- override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
- preferenceManager.sharedPreferencesName = SHARED_PREFERENCES_NAME
- preferenceManager.sharedPreferencesMode = MODE_WORLD_READABLE
-
- val ctx = preferenceManager.context
- preferenceScreen = preferenceManager.createPreferenceScreen(ctx)
- preferenceScreen.apply {
- addPreference(SwitchPreference(ctx)) {
- key = "PreferenceGroupChildrenHook"
- title = "Automatically show all children in PreferenceGroups"
- setDefaultValue(true)
- summary = "Found quite often in the Settings on older Androids"
- }
-
- addPreference(SwitchPreference(ctx)) {
- key = "ExpandablePreferenceHook"
- title = "Automatically expand ExpandablePreferences"
- val canUse = Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA
- setDefaultValue(canUse)
- isEnabled = canUse
- summary = "Found in newer Androids (16+) in the Notification Settings"
- }
-
- setIconSpaceReservedRecursive(false)
- }
- }
-
-
- @OptIn(ExperimentalContracts::class)
- inline fun PreferenceGroup.addPreference(preference: T, setup: T.() -> Unit) {
- contract {
- callsInPlace(setup, InvocationKind.EXACTLY_ONCE)
- }
-
- val isPreferenceGroup = preference is PreferenceGroup
-
- if (isPreferenceGroup) {
- // PreferenceGroup needs to be added to the tree before other preferences can be added to it
- addPreference(preference)
- }
-
- preference.apply(setup)
-
- if (!isPreferenceGroup) {
- // normal preferences need the setup applied before being added to the tree
- addPreference(preference)
- }
- }
-
- private fun Preference.setIconSpaceReservedRecursive(iconSpaceReserved: Boolean = false) {
- this.isIconSpaceReserved = iconSpaceReserved
- if (this is PreferenceGroup) this.children.forEach { it.setIconSpaceReservedRecursive(iconSpaceReserved) }
- }
- }
-}
diff --git a/AutomaticAdvancedSettingsExpander/src/main/res/layout/settings_activity.xml b/AutomaticAdvancedSettingsExpander/src/main/res/layout/settings_activity.xml
deleted file mode 100644
index 620409c..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/res/layout/settings_activity.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
diff --git a/AutomaticAdvancedSettingsExpander/src/main/res/values-v21/styles.xml b/AutomaticAdvancedSettingsExpander/src/main/res/values-v21/styles.xml
deleted file mode 100644
index a71c438..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/res/values-v21/styles.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
diff --git a/AutomaticAdvancedSettingsExpander/src/main/res/values/arrays.xml b/AutomaticAdvancedSettingsExpander/src/main/res/values/arrays.xml
deleted file mode 100644
index 81d714f..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/res/values/arrays.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- - de.binarynoise.AutomaticAdvancedSettingsExpander
- - com.android.settings
-
-
diff --git a/AutomaticAdvancedSettingsExpander/src/main/res/values/styles.xml b/AutomaticAdvancedSettingsExpander/src/main/res/values/styles.xml
deleted file mode 100644
index 5ca2904..0000000
--- a/AutomaticAdvancedSettingsExpander/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
diff --git a/BetterBluetoothDeviceSort/README.md b/BetterBluetoothDeviceSort/README.md
deleted file mode 100644
index 97bcbe2..0000000
--- a/BetterBluetoothDeviceSort/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Better Bluetooth device sort
-
-This Xposed module sorts Bluetooth devices by name instead of last connected to get a stable order.
-Takes effect in the settings app and the media device picker.
diff --git a/BetterBluetoothDeviceSort/build.gradle.kts b/BetterBluetoothDeviceSort/build.gradle.kts
deleted file mode 100644
index 08035d8..0000000
--- a/BetterBluetoothDeviceSort/build.gradle.kts
+++ /dev/null
@@ -1,18 +0,0 @@
-plugins {
- alias(libs.plugins.buildlogic.android.application)
- alias(libs.plugins.buildlogic.kotlin.android)
-}
-
-android {
- namespace = "de.binarynoise.betterBluetoothDeviceSort"
-
- defaultConfig {
- minSdk = 30
- targetSdk = 33
- }
-}
-
-dependencies {
- implementation(projects.logger)
- implementation(projects.reflection)
-}
diff --git a/BetterBluetoothDeviceSort/src/debug/AndroidManifest.xml b/BetterBluetoothDeviceSort/src/debug/AndroidManifest.xml
deleted file mode 100644
index 95f2315..0000000
--- a/BetterBluetoothDeviceSort/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BetterBluetoothDeviceSort/src/debug/java/RestartSettingsActivity.kt b/BetterBluetoothDeviceSort/src/debug/java/RestartSettingsActivity.kt
deleted file mode 100644
index 39e3d5f..0000000
--- a/BetterBluetoothDeviceSort/src/debug/java/RestartSettingsActivity.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package de.binarynoise.betterBluetoothDeviceSort
-
-import kotlin.concurrent.thread
-import android.app.Activity
-import android.content.ActivityNotFoundException
-import android.content.Intent
-import android.os.Bundle
-import android.provider.Settings
-
-class RestartSettingsActivity : Activity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- thread {
- Runtime.getRuntime().exec("su -c am force-stop com.android.bluetooth").waitFor()
- runOnUiThread {
- try {
- startActivity(Intent(Settings.ACTION_BLUETOOTH_SETTINGS).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- })
- } catch (_: ActivityNotFoundException) {
- }
- finish()
- }
- }
- }
-}
diff --git a/BetterBluetoothDeviceSort/src/main/AndroidManifest.xml b/BetterBluetoothDeviceSort/src/main/AndroidManifest.xml
deleted file mode 100644
index 16331f4..0000000
--- a/BetterBluetoothDeviceSort/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BetterBluetoothDeviceSort/src/main/assets/xposed_init b/BetterBluetoothDeviceSort/src/main/assets/xposed_init
deleted file mode 100644
index 8ba0d20..0000000
--- a/BetterBluetoothDeviceSort/src/main/assets/xposed_init
+++ /dev/null
@@ -1 +0,0 @@
-de.binarynoise.betterBluetoothDeviceSort.Hook
diff --git a/BetterBluetoothDeviceSort/src/main/java/de/binarynoise/betterBluetoothDeviceSort/Hook.kt b/BetterBluetoothDeviceSort/src/main/java/de/binarynoise/betterBluetoothDeviceSort/Hook.kt
deleted file mode 100644
index 2cef0b2..0000000
--- a/BetterBluetoothDeviceSort/src/main/java/de/binarynoise/betterBluetoothDeviceSort/Hook.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-package de.binarynoise.betterBluetoothDeviceSort
-
-import android.bluetooth.BluetoothDevice
-import de.binarynoise.logger.Logger.log
-import de.binarynoise.reflection.cast
-import de.robv.android.xposed.IXposedHookLoadPackage
-import de.robv.android.xposed.XposedHelpers
-import de.robv.android.xposed.callbacks.XC_LoadPackage
-import de.robv.android.xposed.XC_MethodHook as MethodHook
-
-class Hook : IXposedHookLoadPackage {
-
- @Suppress("RemoveExplicitTypeArguments") // Comparator.naturalOrder() does need type info so the other lambda gets inferred correctly
- override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
-
- XposedHelpers.findAndHookMethod(
- "com.android.bluetooth.btservice.storage.DatabaseManager", lpparam.classLoader, "getMostRecentlyConnectedDevices",
- object : MethodHook() {
- override fun afterHookedMethod(param: MethodHookParam) {
- log("called getMostRecentlyConnectedDevices")
- with(param) {
- if (throwable != null || result == null) return
- @Suppress("UNCHECKED_CAST")
- val unsorted = result as MutableList
- log("${unsorted.size} devices")
-
- val mAdapterService = XposedHelpers.getObjectField(param.thisObject, "mAdapterService")
- val mRemoteDevices = XposedHelpers.getObjectField(mAdapterService, "mRemoteDevices")
- val map = unsorted.associateWith { XposedHelpers.callMethod(mRemoteDevices, "getDeviceProperties", it) }
-
- val mMetadataCache = XposedHelpers.getObjectField(param.thisObject, "mMetadataCache").cast