package Ġru . ne kit . android . ql s . domain . use Cases Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġru . ne kit . android . domain . event . I Event Ċ import Ġru . ne kit . android . domain . inter actor . build Comp letable UseCase From Runnable Ċ import Ġru . ne kit . android . domain . inter actor . use Ċ import Ġru . ne kit . android . domain . model . Optional Ċ import Ġru . ne kit . android . ql s . domain . model . Answer Type Ċ import Ġru . ne kit . android . ql s . domain . model . Lock Screen Start Type Ċ import Ġru . ne kit . android . ql s . domain . model . Lock Screen Start Type .* Ċ import Ġru . ne kit . android . ql s . domain . providers . UseCase Support Ċ import Ġru . ne kit . android . utils . do If Or Complete Ċ import Ġru . ne kit . android . utils . do If Or Never Ċ Ċ object ĠLock Screen Use Cases Ġ: ĠUse Case Support () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlock Screen Repository ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġrepository Holder . get Lock Screen Repository () ĊĊĠĠĠ Ġprivate Ġval Ġquest Setup Wizard Setting Repository ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġrepository Holder . get Settings Repository () ĊĊĠĠĠ Ġfun Ġstart ( start Type : ĠLock Screen Start Type , Ġbody : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Comp letable UseCase ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Start Type ( start Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccess Use Cases . check Access () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry To Show Lock Screen ( start Type : ĠLock Screen Start Type , Ġbody : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Comp letable UseCase ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuest Statistics And History Use Cases . last History (). build (). map Ġ{ Ġhistory Opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lock Screen Repository . switch On Ġ&& Ġstart Type Ġ!= ĠSET UP _ WI Z ARD _ IN _ PROCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Type Ġ== ĠON _ NOTIFICATION _ CLICK Ġ|| Ġstart Type Ġ== ĠP LAY _ NOW ) Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( quest Setup Wizard Setting Repository . skip After Right Answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( history Opt . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Opt . non Null Data . answer Type Ġ== ĠAnswer Type . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider . getCurrent Time () Ġ- Ġhistory Opt . non Null Data . time Stamp Ġ> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquest Setup Wizard Setting Repository . timeout To Skip After Right Answer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatMap Comp letable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Start Type ( start Type ). do If Or Never Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. do On Complete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuest Training Program Use Cases . create Remote Quest Training Program (). use () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġswitch On If Need ( start Type : ĠLock Screen Start Type , Ġbody : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ= Ġuse Single UseCase From Callable ({ ĊĠĠĠĠĠĠĠ Ġval Ġis On Ġ= Ġstart Type Ġ== ĠON _ NOTIFICATION _ CLICK Ġ|| Ġstart Type Ġ== ĠP LAY _ NOW ĊĠĠĠĠĠĠĠ Ġif Ġ( is On ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . switch On Ġ= Ġis On ĊĠĠĠĠĠĠĠ Ġlock Screen Repository . switch On ĊĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġswitch Off ( body : Ġ() Ġ-> ĠUnit ) Ġ= Ġuse Comp letable UseCase From Runnable ({ ĊĠĠĠĠĠĠĠ Ġlock Screen Repository . switch On Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsend Hide Event () ĊĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġhide ( body : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuse Comp letable UseCase From Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSession Timer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Hide Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Sw itched On ( body : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Single UseCase From Callable ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . switch On ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġstart Incoming Call ( body : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Comp letable UseCase From Runnable ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . income Call In Process Ġ= Ġscreen Provider . screen Is On () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġstart Outgoing Call ( body : Ġ() Ġ-> ĠUnit ) Ġ= Ġuse Comp letable UseCase ({ ĊĠĠĠĠĠĠĠ ĠSetup Wizard Use Cases . call Phone Permission Is Granted (). flatMap Comp letable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Comp letable UseCase From Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . outgoing Call In Process Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . never () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġstop Incoming Call ( body : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpred icated Use Single UseCase ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . income Call In Process . let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . income Call In Process Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġfun Ġfirst Start Timestamp (): ĠSingle < Optional < Long >> Ġ= Ġbuild Single UseCase Ġ{ ĊĠĠĠĠĠĠĠ Ġlock Screen Repository . first Start Type Timestamp ( ON _ NOTIFICATION _ CLICK , ĠP LAY _ NOW ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Outgoing Call ( body : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpred icated Use Single UseCase ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . outgoing Call In Process . let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . outgoing Call In Process Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbody ) ĊĊĠĠĠ Ġprivate Ġfun Ġsave Start Type ( parameter : ĠLock Screen Start Type ): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Comp letable UseCase Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . save Start Type ( parameter , Ġtime Provider . getCurrent Time ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Start Type (): ĠSingle < Optional < Lock Screen Start Type >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Single UseCase Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . last Start Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Last Start Type (): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Comp letable UseCase Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetLast Start Type (). flatMap Comp letable Ġ{ Ġlast Start Type Opt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Screen Repository . replace Last Start Type With ( PLAY _ NOW ). do If Or Complete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Start Type Opt . data Ġ== ĠON _ NOTIFICATION _ CLICK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Hide Event () Ġ= Ġevent Sender . send ( Lock Screen Hide Event ) ĊĊĠĠĠ Ġobject ĠLock Screen Hide Event Ġ: ĠI Event Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠeventName : ĠString Ġ= Ġjava Class . name ĊĊĠĠĠ Ġ} Ċ }