package Ġcom . ze yn eler di . app . security . app locker . service . state provider Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . app . usage . Usage Events Ċ import Ġandroid . app . usage . Usage Stats Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġcom . ze yn eler di . app . security . app locker . ui . permissions . Permission Checker Ċ import Ġio . reactivex . Flow able Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Inject Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . ze yn eler di . app . security . app locker . ui . overlay . activity . Overlay Validation Activity ĊĊ Ċ class ĠApp Foreground Observable Ġ@ Inject Ġconstructor ( val Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġforeground Flow able : ĠFlow able < String >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget (): ĠFlow able < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġforeground Flow able Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP Ġ-> Ġget Foreground Observable High er L ol lip op () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġget Foreground Observable Lower L ol lip op () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġforeground Flow able !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġget Foreground Observable High er L ol lip op (): ĠFlow able < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFlow able . interval ( 1 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠPermission Checker . check Usage Access Permission ( context ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġusage Event : ĠUsage Events . Event ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Usage Stats Manager Ġ= Ġcontext . getSystem Service ( Service . USAGE _ STATS _ SERVICE ) Ġas ĠUsage Stats Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusage Events Ġ= Ġm Usage Stats Manager . query Events ( time Ġ- Ġ 1 0 0 0 Ġ* Ġ 3 6 0 0 , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠUsage Events . Event () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( usage Events . hasNext Event ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage Events . getNext Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . eventType Ġ== ĠUsage Events . Event . MOVE _ TO _ FO REG ROUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsage Event Wrapper ( usage Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . usage Event Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . usage Event Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . className Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . className . contains ( Overlay Validation Activity :: class . java . simple Name ). not () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . packageName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Foreground Observable Lower L ol lip op (): ĠFlow able < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFlow able . interval ( 1 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Activity Manager Ġ= Ġcontext . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity Manager . get Running Tasks ( 1 )[ 0 ]. top Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . className . contains ( Overlay Validation Activity :: class . java . simple Name ). not () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . packageName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠ Ġ} Ċ }