第4章 SIM卡锁定

第4章 SIM卡锁定

1、IccLockSettings:

在UI界面,会触发onResume()函数。在onResume里面注册了ACTION_SIM_STATE_CHANGED这个事件,当收到这种广播的时候就会进行响应。

  1. 在这个函数里面会获取卡的状态,mDialogState第一次进入默认都是OFF_MODE,所以最后会执行resetDialogState()。

OFF_MODE状态代表关闭状态,也是无操作状态;

ICC_LOCK_MODE:进行pin码设定与解锁的状态;

ICC_OLD_MODE:更改pin码,输入旧pin码的状态;

ICC_NEW_MODE:更改pin码,输入新pin码的状态;

ICC_REENTER_MODE:更改pin码,再次输入pin码的状态。

 

图4.1获取卡状态,执行resetDialogState()

  1. resetDialogState()函数:

当我们点击要修改PIN时,mDialogState就会设置为ICC_OLD_MODE,接着就会执行setDialogValues()函数。

 

图4.2执行setDialogValues()

  1. setDialogValues()方法,重置Dialog状态。Dialog的状态包括,Dialog的title,以及message。

 

图4.3重置Dialog状态,最后执行setDialogMessage()

  1. DialogPreference.java setDialogMessage方法:该方法就是重置一下Dialog的相关信息。

 

4.4 setDialogMessage方法

总结:也就是说,当我们什么都不做时,默认的mDialogState==ICC_OLD_MODE状态。

2、pin码设定与解锁回调处理逻辑:

IccLockSettings.java中:

在第1步中的a.中onReceiver()会接收到TelephonyIntents发来的广播,接着就会发送MSG_SIM_STATE_CHABGED消息给自己,进行下一步处理。

 

4.5MSG_SIM_STATE_CHABGED消息处理

 

4.6 handleMessage处理消息

在updatePreferences()函数中获取当前PIN码的状态:

 

4.7获取当前PIN码的状态

  1. MSG_ENABLE_ICC_PIN_COMPLETE:开启/关闭  sim锁定。如果sucess为true,则说明成功的进行了锁定sim卡或者解锁sim卡。更新mPinToggle的check状态。如果为false,说明操作失败,给出toast提示。

success 为true的条件为:ar.exception == null。

 

4.8 MSG_ENABLE_ICC_PIN_COMPLETE消息处理

 

  1. MSG_CHANGE_IC_PIN_COMPLETE:更改pin码的message。同样的,success为true的条件和上一步雷同。无论成功还是失败,给出提示,并且最后都会执行resetDialogState();

 

4.9 MSG_CHANGE_IC_PIN_COMPLETE消息处理

  1. pin状态更迭onPinEnter()函数:

当我们点击修改或者提交按钮的时候,会触发点击事件 onPinEnter()。它会根据不同的case,然后调用不同的函数,在调的函数中会进行pin状态变化的设置。

当我们进行把手机pin开启或关闭,会触发onPreferenceTreeClick(),它会把mDialogstate的状态设置为ICC_LOCK_MODE,之后我们才可执行修改pin的操作,这个时候mDialogState==ICC_OLD_MODE。

图4.10

初始的mDialogState==ICC_OLD_MODE,

进入handleMessage进行消息处理,case ICC_OLD_MODE:mDialogState被赋值为 ICC_NEW_MODE,这个是输入旧密码;

然后就会进入handleMessage处理,case:ICC_NEW_MODE,mDialogState被赋值为 ICC_REENTER_MODE,这个是输入新密码;

然后再去handleMessage处理,case:ICC_REENTER_MODE,这个是确认新密码;

这个流程就像是我们修改密码的时候会让你输入 原始密码---》新密码---》确认新密码的流程。

如果正确,就去else中执行tryChangePin()执行修改pin操作。否则会再次执行循环,直至达到最大次数。

 

4.11 pin状态更迭

4.12 tryChangeIccLockState函数改变pin状态

总结:为了防止主线程卡死,都用异步的消息传递方法,也就是请求接口时,需要构建一个Message对象,里面包含MSG_ID和消息处理handler,一旦底层处理完,会根据MSG_ID将处理完结果回送给该消息对应的消息队列handler来处理。

4.8 tryChangePin函数改变pin的状态

第4章 SIM卡锁定

1、IccLockSettings:

在UI界面,会触发onResume()函数。在onResume里面注册了ACTION_SIM_STATE_CHANGED这个事件,当收到这种广播的时候就会进行响应。

  1. 在这个函数里面会获取卡的状态,mDialogState第一次进入默认都是OFF_MODE,所以最后会执行resetDialogState()。

OFF_MODE状态代表关闭状态,也是无操作状态;

ICC_LOCK_MODE:进行pin码设定与解锁的状态;

ICC_OLD_MODE:更改pin码,输入旧pin码的状态;

ICC_NEW_MODE:更改pin码,输入新pin码的状态;

ICC_REENTER_MODE:更改pin码,再次输入pin码的状态。

 

图4.1获取卡状态,执行resetDialogState()

  1. resetDialogState()函数:

当我们点击要修改PIN时,mDialogState就会设置为ICC_OLD_MODE,接着就会执行setDialogValues()函数。

 

图4.2执行setDialogValues()

  1. setDialogValues()方法,重置Dialog状态。Dialog的状态包括,Dialog的title,以及message。

图4.3重置Dialog状态,最后执行setDialogMessage()

  1. DialogPreference.java setDialogMessage方法:该方法就是重置一下Dialog的相关信息。

 

4.4 setDialogMessage方法

总结:也就是说,当我们什么都不做时,默认的mDialogState==ICC_OLD_MODE状态。

2、pin码设定与解锁回调处理逻辑:

IccLockSettings.java中:

在第1步中的a.中onReceiver()会接收到TelephonyIntents发来的广播,接着就会发送MSG_SIM_STATE_CHABGED消息给自己,进行下一步处理。

 

4.5MSG_SIM_STATE_CHABGED消息处理

4.6 handleMessage处理消息

在updatePreferences()函数中获取当前PIN码的状态:

 

4.7获取当前PIN码的状态

  1. MSG_ENABLE_ICC_PIN_COMPLETE:开启/关闭  sim锁定。如果sucess为true,则说明成功的进行了锁定sim卡或者解锁sim卡。更新mPinToggle的check状态。如果为false,说明操作失败,给出toast提示。

success 为true的条件为:ar.exception == null。

 

4.8 MSG_ENABLE_ICC_PIN_COMPLETE消息处理

 

  1. MSG_CHANGE_IC_PIN_COMPLETE:更改pin码的message。同样的,success为true的条件和上一步雷同。无论成功还是失败,给出提示,并且最后都会执行resetDialogState();

 

4.9 MSG_CHANGE_IC_PIN_COMPLETE消息处理

  1. pin状态更迭onPinEnter()函数:

当我们点击修改或者提交按钮的时候,会触发点击事件 onPinEnter()。它会根据不同的case,然后调用不同的函数,在调的函数中会进行pin状态变化的设置。

当我们进行把手机pin开启或关闭,会触发onPreferenceTreeClick(),它会把mDialogstate的状态设置为ICC_LOCK_MODE,之后我们才可执行修改pin的操作,这个时候mDialogState==ICC_OLD_MODE。

图4.10

初始的mDialogState==ICC_OLD_MODE,

进入handleMessage进行消息处理,case ICC_OLD_MODE:mDialogState被赋值为 ICC_NEW_MODE,这个是输入旧密码;

然后就会进入handleMessage处理,case:ICC_NEW_MODE,mDialogState被赋值为 ICC_REENTER_MODE,这个是输入新密码;

然后再去handleMessage处理,case:ICC_REENTER_MODE,这个是确认新密码;

这个流程就像是我们修改密码的时候会让你输入 原始密码---》新密码---》确认新密码的流程。

如果正确,就去else中执行tryChangePin()执行修改pin操作。否则会再次执行循环,直至达到最大次数。

 

4.11 pin状态更迭

4.12 tryChangeIccLockState函数改变pin状态

总结:为了防止主线程卡死,都用异步的消息传递方法,也就是请求接口时,需要构建一个Message对象,里面包含MSG_ID和消息处理handler,一旦底层处理完,会根据MSG_ID将处理完结果回送给该消息对应的消息队列handler来处理。

4.8 tryChangePin函数改变pin的状态

4.13 showPinDialog()会回调setDialogValues()

tryChangeIccLockState改变pin状态为MSG_ENABLE_ICC_PIN_COMPLETE:开启PIN;

tryChangePin函数改变pin的状态为:MSG_CHANGE_ICC_PIN_COMPLETE:修改PIN;

showPinDialog()会回调setDialogValues()。

总结:其实无论是case那个状态最后都会执行showPinDialog()函数,然后会重新执行setDialogValues()。

5、 PIN码条件,4-8个字符。

图4.14 PIN码长度条件

图4.15 PIN码长度条

4.13 showPinDialog()会回调setDialogValues()

tryChangeIccLockState改变pin状态为MSG_ENABLE_ICC_PIN_COMPLETE:开启PIN;

tryChangePin函数改变pin的状态为:MSG_CHANGE_ICC_PIN_COMPLETE:修改PIN;

showPinDialog()会回调setDialogValues()。

总结:其实无论是case那个状态最后都会执行showPinDialog()函数,然后会重新执行setDialogValues()。

5、 PIN码条件,4-8个字符。

图4.14 PIN码长度条件

 

图4.15 PIN码长度条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值