(1)锁卡涉及的模块主要有两部分:
(a)frameworks/opt/telephony :主要负责和底层通信,获取sim卡状态改变信息和锁卡信息等
(b)frameworks/base/packages/apps/Systemui:更新sim卡状态、更新ui等
(2)ril上报sim状态发生改变,在ril处理sim发生改变的消息时,mIccStatusChangedRegistrants.notifyRegistrants();通知给监听者
UiccController作为监听者(mCis[i].registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, index);
UiccController 处理EVENT_ICC_STATUS_CHANGED 通知的层获取sim的信息,获取信息后,处理EVENT_GET_ICC_STATUS_DONE消息
==>onGetIccCardStatusDone
(3)onGetIccCardStatusDone获取IccCardStatus,UiccCards(一张sim卡对应一个UiccCards),UicccardApplication
接着发送通知:mIccChangedRegistrants.notifyRegistrants(new AsyncResult(null, index, null));通知监听者sim卡状态发生改变了
(4)icccardProxy:监听者,在构造函数mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null);,接着handleMessage,然后调用:updateIccAvailability
(5)updateIccAvailability是一个很重要的方法,更新UiccCard CardState IccCardRecords UiccCardApplication (这些信息都是之前在底层获取的)这个方法调用
registerUiccCardEvents如下: