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/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.