天天看點

Android Q sprd SystemUI (2) 鎖屏

鎖屏主要涉及到這幾個函數調用:
--/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
  Systemui啟動的服務,主要傳遞系統消息到view
--/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
使用binder機制和系統的keyguardservice通訊,得到系統鎖屏相關狀态回調
--/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
鎖屏view的繪制
--/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
鎖屏view,具體顯示
           

KeyguardViewMediator初始化

在systemui啟動的時候,SystemUIService會調用SystemUIApplication的startServicesIfNeeded()方法,該方法又根據config中的字元串配置,new一個KeyguardViewMediator.KeyguardViewMediator調用KeyguardViewMediator的start方法,初始化,在初始化最後,KeyguardViewMediator把自己的執行個體放入SystemUIApplication的hashmap mComponents中,讓其他函數可以引用.

// 把statusbar和keyguard關聯起來,将mViewMediatorCallback傳給mStatusBarKeyguardViewManager

mStatusBarKeyguardViewManager =

SystemUIFactory.getInstance().createStatusBarKeyguardViewManager(mContext, mViewMediatorCallback, mLockPatternUtils);

KeyguardService(systemui)的啟動
系統啟動完成–>PhoneWindowManager.systemReady()–>KeyguardServiceDelegate.onSystemReady()
           

–>KeyguardService.onSystemReady()–>KeyguardService.onSystemReady()->KeyguardViewMediator.onSystemReady()

鎖屏加載KeyguardBouncer過程:

(1)SystemUIApplication啟動Statusbar,這裡通過createAndAddWindows加載主要的界面,然後調用startKeyguard

(2)在startKeyguard中,調用KeyguardViewMediator的registerStatusbar方法,KeyguardViewMediator是整個待機解/鎖屏業務的排程器,負責排程鎖屏界面的相關動作及查詢解鎖屏狀态,然後進入StatusBarKeyguardViewManager

(3)(4)StatusBarKeyguardViewManager管理KeyguardBouncer,KeyguardBouncer裡面是安全鎖界面,它把所有的鎖封裝起來,然後通過判斷目前是什麼鎖,然後把對應的鎖視圖顯示出來

(5)當滑動鎖屏,如果使用者設定了鎖屏,那麼就讓安全鎖屏界面顯示出來

(6)顯示鎖屏界面

(7)是PhoeWindowmamanegr通過binder調用到KeyguardViewMediator

當按power鍵亮屏後:

隐藏notificationpanel

StatusBar–>makeExpandedInvisible()

顯示鎖屏界面

StatusBarKeyguardViewManager -->showBouncer()

解鎖核心代碼,完成解鎖動作,播放聲音,隐藏keyguard view

KeyguardViewMediator

mKeyguardGoingAwayRunnable.run();