@@ -48,31 +48,23 @@ public class Module implements IXposedHookLoadPackage {
4848 public void handleLoadPackage (XC_LoadPackage .LoadPackageParam lpparam ) throws Throwable {
4949 // Hook SystemUi
5050 if (Objects .equals (lpparam .packageName , "com.android.systemui" )) {
51- // Hook com.android.systemui.statusbar.phone.StatusBar.start
52- XposedHelpers .findAndHookMethod (
53- STATUS_BAR_CLASS ,
54- lpparam .classLoader ,
55- "start" ,
56- new XC_MethodHook () {
57- /**
58- * Called after the invocation of the method.
59- *
60- * <p>You can use {@link MethodHookParam#setResult} and {@link MethodHookParam#setThrowable}
61- * to modify the return value of the original method.
62- *
63- * <p>Note that implementations shouldn't call {@code super(param)}, it's not necessary.
64- *
65- * @param param Information about the method call.
66- * @throws Throwable Everything the callback throws is caught and logged.
67- */
68- @ Override
69- protected void afterHookedMethod (MethodHookParam param ) throws Throwable {
70- // XposedBridge.log("FaceUnlock hook pre-install!");
71- hookStatusBar (lpparam .classLoader , param );
72- // XposedBridge.log("FaceUnlock hook installed!");
73- }
74- }
75- );
51+ try {
52+ // Hook com.android.systemui.statusbar.phone.StatusBar.start
53+ Class <?> statusBarClass = lpparam .classLoader .loadClass (STATUS_BAR_CLASS );
54+ hookStatusBar (lpparam , statusBarClass );
55+ } catch (Throwable e ) {
56+ // Failed to hook status bar class, we are on Android 13 DP Beta 1+
57+ // Try using another class
58+ try {
59+ Class <?> statusBarClass = lpparam .classLoader .loadClass ("com.android.systemui.statusbar.phone.CentralSurfaces" );
60+ hookStatusBar (lpparam , statusBarClass );
61+ } catch (Throwable e2 ) {
62+ XposedBridge .log ("Failed to hook status bar! Initial attempt failed with:" );
63+ XposedBridge .log (e );
64+ XposedBridge .log ("We tried an alternative class but that failed too:" );
65+ XposedBridge .log (e2 );
66+ }
67+ }
7668
7769 Class <?> kumClazz = lpparam .classLoader .loadClass (KEYGUARD_UPDATE_MONITOR_CLASS );
7870 // Hook com.android.keyguard.KeyguardUpdateMonitor.updateFaceListeningState
@@ -91,6 +83,21 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
9183 }
9284 }
9385
86+ private void hookStatusBar (XC_LoadPackage .LoadPackageParam lpparam , Class <?> statusBarClass ) {
87+ XposedHelpers .findAndHookMethod (
88+ statusBarClass ,
89+ "start" ,
90+ new XC_MethodHook () {
91+ @ Override
92+ protected void afterHookedMethod (MethodHookParam param ) throws Throwable {
93+ // XposedBridge.log("FaceUnlock hook pre-install!");
94+ hookStatusBar (statusBarClass , lpparam .classLoader , param );
95+ // XposedBridge.log("FaceUnlock hook installed!");
96+ }
97+ }
98+ );
99+ }
100+
94101 private void addHookEarlyUnlock (Class <?> kumClazz , XC_LoadPackage .LoadPackageParam lpparam ) throws Throwable {
95102 Field mStatusBarStateControllerField = asAccessible (kumClazz .getDeclaredField ("mStatusBarStateController" ));
96103 Field mKeyguardIsVisibleField = asAccessible (kumClazz .getDeclaredField ("mKeyguardIsVisible" ));
@@ -160,9 +167,8 @@ private String dumpStream(Stream<Object> stream) {
160167 return stream .map (Object ::toString ).collect (Collectors .joining (",\n " ));
161168 }
162169
163- private void hookStatusBar (ClassLoader classLoader , XC_MethodHook .MethodHookParam param ) throws Throwable {
170+ private void hookStatusBar (Class <?> statusBarClass , ClassLoader classLoader , XC_MethodHook .MethodHookParam param ) throws Throwable {
164171 Object statusBar = param .thisObject ;
165- Class <?> statusBarClass = classLoader .loadClass (STATUS_BAR_CLASS );
166172 Class <?> systemUiClass ;
167173 if (Build .VERSION .SDK_INT > Build .VERSION_CODES .S_V2 ) {
168174 // >= Android 13
0 commit comments