2011/09/07

Anatomy of Android LockScreen


最近因為專案需求研究了一下Android LockScreen相關部分的類別,花了不少時間,但類別圖一畫出來便就豁然開朗。如下圖







整個LockScreen我把它分成5大部分,此處數字請與圖配合食用。

  1. SecuritySettings為在setting app介面的顯示部分。它會用到LockPatternUtils來讀取現在Lock的類型。
  2. LockPatternUtils為紀錄所有Lock相關資訊的類別,包含密碼正確判斷,密碼檔存放,Lock類型等。
  3. 這部分包含幾個類別,這些類別都是負責顯示的部分。其中最底下的3個類別,{PasswordUnlock,AccountUnlock,PatternUnlock}Screen,它們繼承了View類別,做真正顯示的部分。LockPatternKeyguardView以及用它的LockPatternKeyguardViewProperties會根據LockPatternUtils讀取到的Lock類型,來具現{PasswordUnlock,AccountUnlock,PatternUnlock}Screen。
  4. KeyguardViewMediator為大魔王,它將第3部分那些複雜的東西,統一成一個類別方便使用(即Design Pattern裡的Mediator),它主要用KeyguardView{Properties,Manager}
  5. 這部分就不用解說了,這是Android platform的部分。

相關修改LockScreen的APP


Market可看到的LockScreen修改程式有很多,像是WidgetLocker、Flyscreen、Nolock等等。若是反組譯其中之一大概都可以看到這樣的code。

      KeyguardManager localKeyguardManager = (KeyguardManager)getSystemService("keyguard");
      // enable lockscreen
      this.mKeyguardLock.reenableKeyguard();
      // disable lockscreen
      this.mKeyguardLock.disableKeyguard();

一直往下追最後就可以從剛才類別圖的第5部分的最上方類別WindowManagerService內的方法disableKeyguard()等等。

有興趣的人再自己追追看囉~

No comments: