@@ -136,32 +136,39 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
136136
137137 private void enableBatterySaver () {
138138 try {
139- Object powerManagerService = XposedHelpers .callStaticMethod (
140- XposedHelpers .findClass ("android.os.ServiceManager" , null ), "getService" , "power" );
141- Object ipm = XposedHelpers .callStaticMethod (
142- XposedHelpers .findClass ("android.os.IPowerManager$Stub" , null ), "asInterface" , powerManagerService );
143-
144- XposedHelpers .callMethod (ipm , "setPowerSaveModeEnabled" , true );
145- XposedBridge .log ("BatteryRemapper: Battery Saver toggled ON via clean API." );
139+ // Opens a raw root stream that works on Magisk, KernelSU, and any custom ROM
140+ Process p = Runtime .getRuntime ().exec ("su" );
141+ java .io .DataOutputStream os = new java .io .DataOutputStream (p .getOutputStream ());
142+
143+ // Send the commands directly to the kernel
144+ os .writeBytes ("settings put global low_power 1\n " );
145+ os .writeBytes ("cmd power set-mode 1\n " );
146+ os .writeBytes ("exit\n " );
147+ os .flush ();
148+ p .waitFor ();
149+
150+ XposedBridge .log ("BatteryRemapper: Battery Saver toggled ON via Root Shell." );
146151 } catch (Throwable t ) {
147- XposedBridge .log ("BatteryRemapper: API Toggle Failed: " + t .getMessage ());
152+ XposedBridge .log ("BatteryRemapper: Root Shell Toggle Failed: " + t .getMessage ());
148153 }
149154 }
150155
151156 private void disableBatterySaver () {
152157 try {
153- Object powerManagerService = XposedHelpers .callStaticMethod (
154- XposedHelpers .findClass ("android.os.ServiceManager" , null ), "getService" , "power" );
155- Object ipm = XposedHelpers .callStaticMethod (
156- XposedHelpers .findClass ("android.os.IPowerManager$Stub" , null ), "asInterface" , powerManagerService );
157-
158- XposedHelpers .callMethod (ipm , "setPowerSaveModeEnabled" , false );
159- XposedBridge .log ("BatteryRemapper: Battery Saver toggled OFF via clean API." );
158+ Process p = Runtime .getRuntime ().exec ("su" );
159+ java .io .DataOutputStream os = new java .io .DataOutputStream (p .getOutputStream ());
160+
161+ os .writeBytes ("settings put global low_power 0\n " );
162+ os .writeBytes ("cmd power set-mode 0\n " );
163+ os .writeBytes ("exit\n " );
164+ os .flush ();
165+ p .waitFor ();
166+
167+ XposedBridge .log ("BatteryRemapper: Battery Saver toggled OFF via Root Shell." );
160168 } catch (Throwable t ) {
161- XposedBridge .log ("BatteryRemapper: API Toggle Failed: " + t .getMessage ());
169+ XposedBridge .log ("BatteryRemapper: Root Shell Toggle Failed: " + t .getMessage ());
162170 }
163171 }
164-
165172 private void startCountdown () {
166173 new Handler (Looper .getMainLooper ()).post (new Runnable () {
167174 @ Override
0 commit comments