|
1 | 1 | package de.robv.android.xposed.mods.tweakbox; |
2 | 2 |
|
3 | | -import static de.robv.android.xposed.XposedHelpers.getIntField; |
4 | 3 | import static de.robv.android.xposed.XposedHelpers.getSurroundingThis; |
5 | 4 | import static de.robv.android.xposed.XposedHelpers.setFloatField; |
6 | 5 | import static de.robv.android.xposed.XposedHelpers.setIntField; |
|
10 | 9 | import java.lang.reflect.Field; |
11 | 10 | import java.lang.reflect.Method; |
12 | 11 | import java.util.Locale; |
13 | | -import java.util.Observable; |
14 | 12 |
|
15 | 13 | import android.app.AndroidAppHelper; |
16 | 14 | import android.content.Context; |
@@ -55,20 +53,21 @@ public void initZygote(StartupParam startupParam) { |
55 | 53 | try { |
56 | 54 | // this is not really necessary if no effects are wanted, but it speeds up turning off the screen |
57 | 55 | XResources.setSystemWideReplacement("android", "bool", "config_animateScreenLights", false); |
58 | | - Class<?> classSettingsObserver = Class.forName("com.android.server.PowerManagerService$SettingsObserver"); |
59 | | - Method methodUpdate = classSettingsObserver.getDeclaredMethod("update", Observable.class, Object.class); |
60 | | - XposedBridge.hookMethod(methodUpdate, new XC_MethodHook() { |
61 | | - @Override |
62 | | - protected void afterHookedMethod(MethodHookParam param) throws Throwable { |
63 | | - Object powerManagerService = getSurroundingThis(param.thisObject); |
64 | | - int mAnimationSetting = getIntField(powerManagerService, "mAnimationSetting"); |
65 | | - if (mAnimationSetting != 0) { |
66 | | - mAnimationSetting = (pref.getBoolean("crt_off_effect", false)) ? ANIM_SETTING_OFF : 0; |
67 | | - mAnimationSetting |= (pref.getBoolean("crt_on_effect", false)) ? ANIM_SETTING_ON : 0; |
68 | | - setIntField(powerManagerService, "mAnimationSetting", mAnimationSetting); |
69 | | - } |
70 | | - } |
71 | | - }); |
| 56 | + // hook for CRT effects |
| 57 | + Class<?> classBrightnessState = Class.forName("com.android.server.PowerManagerService$BrightnessState"); |
| 58 | + Method methodRun = classBrightnessState.getDeclaredMethod("run"); |
| 59 | + XposedBridge.hookMethod(methodRun, new XC_MethodHook() { |
| 60 | + @Override |
| 61 | + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { |
| 62 | + // About to turn off screen |
| 63 | + AndroidAppHelper.reloadSharedPreferencesIfNeeded(pref); |
| 64 | + Object powerManagerService = getSurroundingThis(param.thisObject); |
| 65 | + int animationSetting; |
| 66 | + animationSetting = (pref.getBoolean("crt_off_effect", false)) ? ANIM_SETTING_OFF : 0; |
| 67 | + animationSetting |= (pref.getBoolean("crt_on_effect", false)) ? ANIM_SETTING_ON : 0; |
| 68 | + setIntField(powerManagerService, "mAnimationSetting", animationSetting); |
| 69 | + } |
| 70 | + }); |
72 | 71 | } catch (Exception e) { XposedBridge.log(e); } |
73 | 72 |
|
74 | 73 | try { |
@@ -276,18 +275,18 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { |
276 | 275 | }); |
277 | 276 | } catch (Exception e) { XposedBridge.log(e); } |
278 | 277 | } else if (lpparam.packageName.equals("android")) { |
279 | | - if (pref.getBoolean("crt_off_effect", false) || pref.getBoolean("crt_on_effect", false)) { |
280 | | - try { |
281 | | - Class<?> classMOL = Class.forName("com.android.internal.policy.impl.PhoneWindowManager$MyOrientationListener", false, lpparam.classLoader); |
282 | | - XposedBridge.hookMethod(classMOL.getDeclaredMethod("onProposedRotationChanged", int.class), new XC_MethodHook() { |
283 | | - @Override |
284 | | - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { |
285 | | - int rotation = (Integer) param.args[0]; |
286 | | - SystemProperties.set("hw.crt.landscape", String.valueOf(rotation % 2)); |
| 278 | + try { |
| 279 | + Class<?> classMOL = Class.forName("com.android.internal.policy.impl.PhoneWindowManager$MyOrientationListener", false, lpparam.classLoader); |
| 280 | + XposedBridge.hookMethod(classMOL.getDeclaredMethod("onProposedRotationChanged", int.class), new XC_MethodHook() { |
| 281 | + @Override |
| 282 | + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { |
| 283 | + int rotation = (Integer) param.args[0]; |
| 284 | + if (rotation >= 0) { |
| 285 | + SystemProperties.set("runtime.xposed.orientation", String.valueOf(rotation)); |
287 | 286 | } |
288 | | - }); |
289 | | - } catch (Throwable t) { XposedBridge.log(t); } |
290 | | - } |
| 287 | + } |
| 288 | + }); |
| 289 | + } catch (Throwable t) { XposedBridge.log(t); } |
291 | 290 | } else if (lpparam.packageName.equals("com.android.phone")) { |
292 | 291 | try { |
293 | 292 | Method displaySSInfo = Class.forName("com.android.phone.PhoneUtils", false, lpparam.classLoader).getDeclaredMethod("displaySSInfo", |
|
0 commit comments