@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 - User abort ==
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, requiredPIN, attempts)
activate pinwin
deactivate appdsktp
pinwin -> pinwin : setVisiblePinRequired
pinwin <- User : Enters PIN
pinwin <- User : Back
appdsktp <- pinwin : handle(abort)
activate appdsktp
deactivate pinwin
srvclr <- appdsktp : Abort() via sys::bus message
activate srvclr
appdsktp -> appdsktp : switchWindow (previous)
appdsktp -> pinwin !! : delete
deactivate appdsktp
note over srvclr, pinwin #FFAAAA
how do we handle such state?
what prevents cellular from requesting PIN again?
end note
srvclr -> srvclr : abort ?
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 Unlocked
end note
/ note left of pinwin
Desktop side data:
None
end note
@enduml