@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