From b1d97f16495d30191230b9a7bbc2c5242aa01b98 Mon Sep 17 00:00:00 2001
From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com>
Date: Wed, 13 Aug 2025 10:59:26 +0200
Subject: [PATCH 1/4] Implement SensorMod
---
SensorMod/Readme.md | 3 +
SensorMod/build.gradle.kts | 16 +++++
SensorMod/src/main/AndroidManifest.xml | 33 ++++++++++
SensorMod/src/main/assets/xposed_init | 1 +
.../programminghoch10/SensorMod/Common.java | 14 +++++
.../com/programminghoch10/SensorMod/Hook.java | 38 ++++++++++++
.../SensorMod/SettingsActivity.java | 60 +++++++++++++++++++
.../src/main/res/layout/settings_activity.xml | 14 +++++
SensorMod/src/main/res/values-v21/themes.xml | 4 ++
SensorMod/src/main/res/values/strings.xml | 5 ++
SensorMod/src/main/res/values/themes.xml | 8 +++
.../src/main/res/xml/root_preferences.xml | 3 +
.../en-US/full_description.txt | 3 +
.../en-US/short_description.txt | 1 +
.../en-US/title.txt | 1 +
modules.gradle.kts | 1 +
16 files changed, 205 insertions(+)
create mode 100644 SensorMod/Readme.md
create mode 100644 SensorMod/build.gradle.kts
create mode 100644 SensorMod/src/main/AndroidManifest.xml
create mode 100644 SensorMod/src/main/assets/xposed_init
create mode 100644 SensorMod/src/main/java/com/programminghoch10/SensorMod/Common.java
create mode 100644 SensorMod/src/main/java/com/programminghoch10/SensorMod/Hook.java
create mode 100644 SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java
create mode 100644 SensorMod/src/main/res/layout/settings_activity.xml
create mode 100644 SensorMod/src/main/res/values-v21/themes.xml
create mode 100644 SensorMod/src/main/res/values/strings.xml
create mode 100644 SensorMod/src/main/res/values/themes.xml
create mode 100644 SensorMod/src/main/res/xml/root_preferences.xml
create mode 100644 metadata/com.programminghoch10.SensorMod/en-US/full_description.txt
create mode 100644 metadata/com.programminghoch10.SensorMod/en-US/short_description.txt
create mode 100644 metadata/com.programminghoch10.SensorMod/en-US/title.txt
diff --git a/SensorMod/Readme.md b/SensorMod/Readme.md
new file mode 100644
index 0000000..53b658b
--- /dev/null
+++ b/SensorMod/Readme.md
@@ -0,0 +1,3 @@
+# SensorMod
+
+This Module allows you to selectively disable sensors.
diff --git a/SensorMod/build.gradle.kts b/SensorMod/build.gradle.kts
new file mode 100644
index 0000000..239bc5a
--- /dev/null
+++ b/SensorMod/build.gradle.kts
@@ -0,0 +1,16 @@
+plugins {
+ alias(libs.plugins.buildlogic.android.application)
+}
+
+android {
+ namespace = "com.programminghoch10.SensorMod"
+
+ defaultConfig {
+ minSdk = 34
+ targetSdk = 35
+ }
+}
+
+dependencies {
+ implementation(libs.androidx.preference)
+}
diff --git a/SensorMod/src/main/AndroidManifest.xml b/SensorMod/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b33a41b
--- /dev/null
+++ b/SensorMod/src/main/AndroidManifest.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SensorMod/src/main/assets/xposed_init b/SensorMod/src/main/assets/xposed_init
new file mode 100644
index 0000000..1c7c125
--- /dev/null
+++ b/SensorMod/src/main/assets/xposed_init
@@ -0,0 +1 @@
+com.programminghoch10.SensorMod.Hook
diff --git a/SensorMod/src/main/java/com/programminghoch10/SensorMod/Common.java b/SensorMod/src/main/java/com/programminghoch10/SensorMod/Common.java
new file mode 100644
index 0000000..5bea55a
--- /dev/null
+++ b/SensorMod/src/main/java/com/programminghoch10/SensorMod/Common.java
@@ -0,0 +1,14 @@
+package com.programminghoch10.SensorMod;
+
+import android.hardware.Sensor;
+
+import java.util.Objects;
+
+public class Common {
+
+ public static boolean DEFAULT_SENSOR_STATE = true;
+
+ public static String getKey(Sensor sensor) {
+ return "sensor_" + Objects.hash(sensor.getName(), sensor.getId(), sensor.getVendor(), sensor.getVersion(), sensor.getType());
+ }
+}
diff --git a/SensorMod/src/main/java/com/programminghoch10/SensorMod/Hook.java b/SensorMod/src/main/java/com/programminghoch10/SensorMod/Hook.java
new file mode 100644
index 0000000..1c2eef5
--- /dev/null
+++ b/SensorMod/src/main/java/com/programminghoch10/SensorMod/Hook.java
@@ -0,0 +1,38 @@
+package com.programminghoch10.SensorMod;
+
+import static com.programminghoch10.SensorMod.Common.DEFAULT_SENSOR_STATE;
+import static com.programminghoch10.SensorMod.Common.getKey;
+
+import android.content.SharedPreferences;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.util.Log;
+
+import java.util.List;
+
+import de.robv.android.xposed.IXposedHookLoadPackage;
+import de.robv.android.xposed.XC_MethodHook;
+import de.robv.android.xposed.XSharedPreferences;
+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) throws Throwable {
+ if (lpparam.packageName.equals(BuildConfig.APPLICATION_ID)) return;
+ SharedPreferences sharedPreferences = new XSharedPreferences(BuildConfig.APPLICATION_ID, "sensors");
+ Class systemSensorManager = (Class) XposedHelpers.findClass("android.hardware.SystemSensorManager", lpparam.classLoader);
+ XposedHelpers.findAndHookMethod(systemSensorManager, "getFullSensorList", new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+ if (param.hasThrowable()) return;
+ Log.d("Logger", "afterHookedMethod: filter getFullSensorList");
+ List result = (List) param.getResult();
+ result = result.stream().filter(sensor -> sharedPreferences.getBoolean(getKey(sensor), DEFAULT_SENSOR_STATE)).toList();
+ param.setResult(result);
+ }
+ });
+ Log.d("Logger", "handleLoadPackage: Hooked SystemSensorManager");
+ }
+}
diff --git a/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java b/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java
new file mode 100644
index 0000000..deee9f8
--- /dev/null
+++ b/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java
@@ -0,0 +1,60 @@
+package com.programminghoch10.SensorMod;
+
+import static com.programminghoch10.SensorMod.Common.DEFAULT_SENSOR_STATE;
+import static com.programminghoch10.SensorMod.Common.getKey;
+
+import android.annotation.SuppressLint;
+import android.app.ActionBar;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.os.Bundle;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import java.util.List;
+
+public class SettingsActivity extends FragmentActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.settings_activity);
+ if (savedInstanceState == null) {
+ getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.settings, new SettingsFragment())
+ .commit();
+ }
+ ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(
+ getSupportFragmentManager().getBackStackEntryCount() > 0
+ );
+ }
+ }
+
+ public static class SettingsFragment extends PreferenceFragmentCompat {
+ @SuppressLint("WorldReadableFiles")
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ setPreferencesFromResource(R.xml.root_preferences, rootKey);
+ PreferenceManager preferenceManager = getPreferenceManager();
+ preferenceManager.setSharedPreferencesName("sensors");
+ preferenceManager.setSharedPreferencesMode(MODE_WORLD_READABLE);
+ PreferenceScreen preferenceScreen = getPreferenceScreen();
+ SensorManager sensorManager = (SensorManager) requireContext().getSystemService(SENSOR_SERVICE);
+ List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
+ for (Sensor sensor : sensors) {
+ SwitchPreference preference = new SwitchPreference(requireContext());
+ preference.setDefaultValue(DEFAULT_SENSOR_STATE);
+ preference.setKey(getKey(sensor));
+ preference.setTitle(sensor.getName());
+ preference.setSummary(getKey(sensor) + " - " + sensor);
+ preferenceScreen.addPreference(preference);
+ }
+ }
+ }
+}
diff --git a/SensorMod/src/main/res/layout/settings_activity.xml b/SensorMod/src/main/res/layout/settings_activity.xml
new file mode 100644
index 0000000..620409c
--- /dev/null
+++ b/SensorMod/src/main/res/layout/settings_activity.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/SensorMod/src/main/res/values-v21/themes.xml b/SensorMod/src/main/res/values-v21/themes.xml
new file mode 100644
index 0000000..6ee0359
--- /dev/null
+++ b/SensorMod/src/main/res/values-v21/themes.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/SensorMod/src/main/res/values/strings.xml b/SensorMod/src/main/res/values/strings.xml
new file mode 100644
index 0000000..ce00b4b
--- /dev/null
+++ b/SensorMod/src/main/res/values/strings.xml
@@ -0,0 +1,5 @@
+
+ SensorMod
+ This Module allows you to selectively disable sensors.
+ SensorMod Settings
+
diff --git a/SensorMod/src/main/res/values/themes.xml b/SensorMod/src/main/res/values/themes.xml
new file mode 100644
index 0000000..1b28f45
--- /dev/null
+++ b/SensorMod/src/main/res/values/themes.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/SensorMod/src/main/res/xml/root_preferences.xml b/SensorMod/src/main/res/xml/root_preferences.xml
new file mode 100644
index 0000000..9ddd887
--- /dev/null
+++ b/SensorMod/src/main/res/xml/root_preferences.xml
@@ -0,0 +1,3 @@
+
+
diff --git a/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt b/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt
new file mode 100644
index 0000000..fa30f9c
--- /dev/null
+++ b/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt
@@ -0,0 +1,3 @@
+This Module allows you to selectively disable sensors on your android device.
+Every sensor is listed and can be selectively disabled at choice.
+Supports all sensors reported by Android through the SensorManager API.
diff --git a/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt b/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt
new file mode 100644
index 0000000..538d8f5
--- /dev/null
+++ b/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt
@@ -0,0 +1 @@
+This Module allows you to selectively disable sensors.
diff --git a/metadata/com.programminghoch10.SensorMod/en-US/title.txt b/metadata/com.programminghoch10.SensorMod/en-US/title.txt
new file mode 100644
index 0000000..452f266
--- /dev/null
+++ b/metadata/com.programminghoch10.SensorMod/en-US/title.txt
@@ -0,0 +1 @@
+SensorMod
diff --git a/modules.gradle.kts b/modules.gradle.kts
index 48b5bfc..352f7fa 100644
--- a/modules.gradle.kts
+++ b/modules.gradle.kts
@@ -17,4 +17,5 @@ include(":PersistentForegroundServiceNotifications")
include(":PreventAudioFocus")
include(":ResetAllNotificationChannels")
include(":RotationControl")
+include(":SensorMod")
include(":UpsideWifi")
From 4f21651af4becc876b09f6a8ea60171a0bc3b3aa Mon Sep 17 00:00:00 2001
From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com>
Date: Wed, 13 Aug 2025 11:01:46 +0200
Subject: [PATCH 2/4] SensorMod: create PreferenceScreen programatically
---
.../java/com/programminghoch10/SensorMod/SettingsActivity.java | 2 +-
SensorMod/src/main/res/xml/root_preferences.xml | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
delete mode 100644 SensorMod/src/main/res/xml/root_preferences.xml
diff --git a/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java b/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java
index deee9f8..1b70f65 100644
--- a/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java
+++ b/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java
@@ -40,8 +40,8 @@ public static class SettingsFragment extends PreferenceFragmentCompat {
@SuppressLint("WorldReadableFiles")
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- setPreferencesFromResource(R.xml.root_preferences, rootKey);
PreferenceManager preferenceManager = getPreferenceManager();
+ setPreferenceScreen(preferenceManager.createPreferenceScreen(requireContext()));
preferenceManager.setSharedPreferencesName("sensors");
preferenceManager.setSharedPreferencesMode(MODE_WORLD_READABLE);
PreferenceScreen preferenceScreen = getPreferenceScreen();
diff --git a/SensorMod/src/main/res/xml/root_preferences.xml b/SensorMod/src/main/res/xml/root_preferences.xml
deleted file mode 100644
index 9ddd887..0000000
--- a/SensorMod/src/main/res/xml/root_preferences.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
From 44a747be34ca62770a4bafea531c9f8aa12b4e01 Mon Sep 17 00:00:00 2001
From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com>
Date: Wed, 13 Aug 2025 11:09:20 +0200
Subject: [PATCH 3/4] backport SensorMod to SDK 16
---
SensorMod/build.gradle.kts | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/SensorMod/build.gradle.kts b/SensorMod/build.gradle.kts
index 239bc5a..d0d6e9c 100644
--- a/SensorMod/build.gradle.kts
+++ b/SensorMod/build.gradle.kts
@@ -6,11 +6,16 @@ android {
namespace = "com.programminghoch10.SensorMod"
defaultConfig {
- minSdk = 34
+ minSdk = 16
targetSdk = 35
+ multiDexEnabled = true
+ }
+ compileOptions {
+ isCoreLibraryDesugaringEnabled = true
}
}
dependencies {
implementation(libs.androidx.preference)
+ coreLibraryDesugaring(libs.android.desugarJdkLibs)
}
From 548e7a17a915ffb7d24de9c5ce6226568767a2b9 Mon Sep 17 00:00:00 2001
From: binarynoise
Date: Mon, 18 Aug 2025 21:58:27 +0200
Subject: [PATCH 4/4] small nitpicks
---
SensorMod/Readme.md | 5 ++++-
SensorMod/src/main/res/values/strings.xml | 2 +-
.../en-US/full_description.txt | 1 +
.../en-US/short_description.txt | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/SensorMod/Readme.md b/SensorMod/Readme.md
index 53b658b..31affbf 100644
--- a/SensorMod/Readme.md
+++ b/SensorMod/Readme.md
@@ -1,3 +1,6 @@
# SensorMod
-This Module allows you to selectively disable sensors.
+This Module allows you to selectively disable sensors on your android device.
+Every sensor is listed and can be selectively disabled at choice.
+Supports all sensors reported by Android through the SensorManager API.
+Select all apps to disable the sensors for as scope for the module.
diff --git a/SensorMod/src/main/res/values/strings.xml b/SensorMod/src/main/res/values/strings.xml
index ce00b4b..359a86e 100644
--- a/SensorMod/src/main/res/values/strings.xml
+++ b/SensorMod/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
SensorMod
- This Module allows you to selectively disable sensors.
+ Selectively disable sensors.
SensorMod Settings
diff --git a/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt b/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt
index fa30f9c..2cb4612 100644
--- a/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt
+++ b/metadata/com.programminghoch10.SensorMod/en-US/full_description.txt
@@ -1,3 +1,4 @@
This Module allows you to selectively disable sensors on your android device.
Every sensor is listed and can be selectively disabled at choice.
Supports all sensors reported by Android through the SensorManager API.
+Select all apps to disable the sensors for as scope for the module.
diff --git a/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt b/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt
index 538d8f5..5ca4797 100644
--- a/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt
+++ b/metadata/com.programminghoch10.SensorMod/en-US/short_description.txt
@@ -1 +1 @@
-This Module allows you to selectively disable sensors.
+Selectively disable sensors.