44import static ax .nd .universalauth .xposed .common .XposedConstants .EXTRA_UNLOCK_MODE ;
55import static ax .nd .universalauth .xposed .common .XposedConstants .MODE_UNLOCK_FADING ;
66
7+ import android .app .ActivityManager ;
78import android .content .Context ;
89import android .content .Intent ;
910import android .os .Build ;
1011
1112import java .lang .reflect .AccessibleObject ;
1213import java .lang .reflect .Field ;
14+ import java .lang .reflect .InvocationTargetException ;
1315import java .lang .reflect .Method ;
1416import java .util .Arrays ;
1517import java .util .Objects ;
@@ -36,6 +38,8 @@ public class Module implements IXposedHookLoadPackage {
3638 // com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED
3739 private static final int SHADE_LOCKED = 2 ;
3840
41+ private Method isUserInLockdownMethod ;
42+
3943 /**
4044 * This method is called when an app is loaded. It's called very early, even before
4145 * {@link Application#onCreate} is called.
@@ -48,6 +52,9 @@ public class Module implements IXposedHookLoadPackage {
4852 public void handleLoadPackage (XC_LoadPackage .LoadPackageParam lpparam ) throws Throwable {
4953 // Hook SystemUi
5054 if (Objects .equals (lpparam .packageName , "com.android.systemui" )) {
55+ Class <?> kumClazz = lpparam .classLoader .loadClass (KEYGUARD_UPDATE_MONITOR_CLASS );
56+ isUserInLockdownMethod = getIsUserInLockdownMethod (kumClazz );
57+
5158 try {
5259 // Hook com.android.systemui.statusbar.phone.StatusBar.start
5360 Class <?> statusBarClass = lpparam .classLoader .loadClass (STATUS_BAR_CLASS );
@@ -66,7 +73,6 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th
6673 }
6774 }
6875
69- Class <?> kumClazz = lpparam .classLoader .loadClass (KEYGUARD_UPDATE_MONITOR_CLASS );
7076 // Hook com.android.keyguard.KeyguardUpdateMonitor.updateFaceListeningState
7177 try {
7278 addHookEarlyUnlock (kumClazz , lpparam );
@@ -98,6 +104,19 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
98104 );
99105 }
100106
107+ private Method getIsUserInLockdownMethod (Class <?> kumClazz ) {
108+ try {
109+ return asAccessible (kumClazz .getDeclaredMethod ("isUserInLockdown" , int .class ));
110+ } catch (NoSuchMethodException ignored ) {
111+ return null ;
112+ }
113+ }
114+
115+ private boolean isUserInLockdown (Object kum ) throws InvocationTargetException , IllegalAccessException {
116+ return isUserInLockdownMethod != null
117+ && (boolean ) isUserInLockdownMethod .invoke (kum , Util .INSTANCE .getCurrentUser ());
118+ }
119+
101120 private void addHookEarlyUnlock (Class <?> kumClazz , XC_LoadPackage .LoadPackageParam lpparam ) throws Throwable {
102121 Field mStatusBarStateControllerField = asAccessible (kumClazz .getDeclaredField ("mStatusBarStateController" ));
103122 Field mKeyguardIsVisibleField = asAccessible (kumClazz .getDeclaredField ("mKeyguardIsVisible" ));
@@ -112,6 +131,10 @@ private void addHookEarlyUnlock(Class<?> kumClazz, XC_LoadPackage.LoadPackagePar
112131 @ Override
113132 protected void beforeHookedMethod (MethodHookParam param ) throws Throwable {
114133 Object kum = param .thisObject ;
134+ if (isUserInLockdown (kum )) {
135+ return ;
136+ }
137+
115138 Object sbsc = mStatusBarStateControllerField .get (kum );
116139 boolean mKeyguardIsVisible = mKeyguardIsVisibleField .getBoolean (kum );
117140 boolean mDeviceInteractive = mDeviceInteractiveField .getBoolean (kum );
@@ -188,12 +211,15 @@ private void hookStatusBar(Class<?> statusBarClass, ClassLoader classLoader, XC_
188211 systemUiClass = classLoader .loadClass (SYSTEM_UI_CLASS );
189212 }
190213 Context context = (Context ) asAccessible (systemUiClass .getDeclaredField ("mContext" )).get (statusBar );
214+ Object kum = asAccessible (statusBarClass .getDeclaredField ("mKeyguardUpdateMonitor" )).get (statusBar );
191215
192216 UnlockMethod method = hookStatusBarBiometricUnlock (statusBar , statusBarClass );
193217
194218 UnlockReceiver .INSTANCE .setup (context , statusBar , intent -> {
195219 try {
196- method .unlock (intent );
220+ if (!isUserInLockdown (kum )) {
221+ method .unlock (intent );
222+ }
197223 } catch (Throwable throwable ) {
198224 throw new RuntimeException (throwable );
199225 }
0 commit comments