Skip to content

Commit 7282695

Browse files
authored
Update BatteryHook.java
Added su for Battery saver enabling
1 parent f1341ef commit 7282695

1 file changed

Lines changed: 24 additions & 17 deletions

File tree

app/src/main/java/com/github/dhangofa/batteryremapper/BatteryHook.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)