文章目录
前言
本文基于 AOSP
android 12 源码。
核心文件
platform_frameworks_base\packages\SystemUI\src\com\android\systemui\keyguard
- KeyguardService.java
- KeyguardViewMediator.java
platform_frameworks_base\packages\SystemUI\src\com\android\keyguard
- KeyguardUpdateMonitor.java
- KeyguardSecurityContainer.java
platform_frameworks_base\packages\SystemUI\src\com\android\systemui\statusbar\phone
- StatusBarKeyguardViewManager.java
- KeyguardBouncer.java
platform_frameworks_base\services\core\java\com\android\server\policy\keyguard
- KeyguardServiceDelegate.java
- KeyguardServiceWrapper.java
KeyguardService
KeyguardService 持有 KeyguardViewMediator 的对象,调用 KeyguardViewMediator 中的接口。
public class KeyguardService extends Service {
// KeyguardService 持有 KeyguardViewMediator 的对象,调用 KeyguardViewMediator 中的接口
private final KeyguardViewMediator mKeyguardViewMediator;
...
@Override
public void onCreate() {
((SystemUIApplication) getApplication()).startServicesIfNeeded();
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
// com.android.internal.policy.IKeyguardService,aidl文件
private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
//
@Override // Binder interface
public void setOccluded(boolean isOccluded, boolean animate) {
...
}
}
...
}
KeyguardViewMediator
KeyguardViewMediator 持有 KeyguardUpdateMonitor 的对象,调用 KeyguardUpdateMonitor 中的接口。
public class KeyguardViewMediator extends SystemUI implements Dumpable,
StatusBarStateController.StateListener {
private final KeyguardUpdateMonitor mUpdateMonitor;
// 创建 KeyguardUpdateMonitorCallback
KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
...
};
...
}
KeyguardViewMediator 内部通过 handler
进行消息的分发。
// used for handler messages
private static final int SHOW = 1;
private static final int HIDE = 2;
private static final int RESET = 3;
private static final int VERIFY_UNLOCK = 4;
private static final int NOTIFY_FINISHED_GOING_TO_SLEEP = 5;
private static final int NOTIFY_SCREEN_TURNING_ON = 6;
private static final int KEYGUARD_DONE = 7;
private static final int KEYGUARD_DONE_DRAWING = 8;
private static final int SET_OCCLUDED = 9;
private static final</