@startuml
skinparam BackgroundColor F0F0F0
participant "Service Cellular" as srvclr
participant "Application Manager" as appmgr
participant "ApplicaionDesktop" as appdsktp
participant "PinLockWindow" as pinwin
actor User
== PIN required - invalid PIN flow ==
note left of srvclr
Cellular side data:
State: PIN required
SIM: SIM1
phone: +48500500500
attempts: 4
end note
/ note left of appdsktp
Desktop side state:
Screen Locked
end note
/ note left of pinwin
Desktop side data:
None
end note
[o->srvclr : need PIN1
activate srvclr
srvclr -> appmgr : ActionMessage{RequestPin1, {SIM1, attempts}} via sys::bus message
activate appmgr
deactivate srvclr
appmgr -> appmgr : translate request to action
appmgr -> appdsktp : forward action
activate appdsktp
deactivate appmgr
appdsktp -> appdsktp : handle(RequestPinAction) -> queued
deactivate appdsktp
... ...
appdsktp <- User : Unlock screen
activate appdsktp
note left of pinwin
Desktop side data:
State: PIN required
SIM: SIM1
attempts: 4
end note
/ note left of appdsktp
Desktop side state:
Screen Unlocked
end note
appdsktp -> pinwin ** : switchWindow(SIM1, reqPIN, attempts)
activate pinwin
deactivate appdsktp
pinwin -> pinwin : setVisiblePinRequired
pinwin <- User : Enters PIN (invalid)
pinwin <- User : Confirm
appdsktp <- pinwin : handlePasscode(pinValue)
activate appdsktp
deactivate pinwin
srvclr <- appdsktp : PinData(pinValue) via sys::bus message
activate srvclr
deactivate appdsktp
srvclr -> srvclr : verification failed,
srvclr -> srvclr : attempts--
deactivate srvclr
note over of srvclr
Cellular side data:
State: PIN required
SIM: SIM1
phone: +48500500500
attempts: 3
end note
== Pin invalid: Retry with 3 attempts left ==
[o->srvclr : need PIN1
activate srvclr
srvclr -> appmgr : ActionMessage{RequestPin1, {SIM1, attempts}} via sys::bus message
activate appmgr
deactivate srvclr
appmgr -> appmgr : translate request to action
appmgr -> appdsktp : forward action
activate appdsktp
deactivate appmgr
appdsktp -> appdsktp : handle(SimUnlockedAction) -> compare cards, attempts?
note left of pinwin
Desktop side data:
State: PIN required
SIM: SIM1
attempts: 3
end note
/ note left of appdsktp
Desktop side state:
Screen Unlocked
end note
appdsktp -> pinwin : switchWindow(SIM1, invalidPIN, attempts)
activate pinwin
deactivate appdsktp
pinwin -> pinwin : rebuild
pinwin -> pinwin : setVisibleInvalidPin
pinwin <- User : Confirm
pinwin -> pinwin : setVisiblePinRequired
pinwin <- User : Enters PIN (invalid)
pinwin <- User : Confirm
appdsktp <- pinwin : handlePasscode(pinValue)
activate appdsktp
deactivate pinwin
srvclr <- appdsktp : PinData(pinValue) via sys::bus message
activate srvclr
deactivate appdsktp
srvclr -> srvclr : verification failed
srvclr -> srvclr : attempts--
deactivate srvclr
note over of srvclr
Cellular side data:
State: PIN required
SIM: SIM1
phone: +48500500500
attempts: 2
end note
== Pin invalid: Retry with 2 attempts left ==
... ...
== Pin invalid: Retry with 1 attempts left ==
... ...
srvclr <- appdsktp : PinData(pinValue) via sys::bus message
activate srvclr
srvclr -> srvclr : verification failed,
srvclr -> srvclr : attempts--
deactivate srvclr
== Pin invalid: 0 attempts left, PUK required ==
[o->srvclr : need PUK1
activate srvclr
srvclr -> appmgr : ActionMessage{RequestPuk1, {SIM1, attempts}} via sys::bus message
activate appmgr
deactivate srvclr
... PUK Flow ...
@enduml