package Ġio . github . ach mad h af id . z pack . extension Ċ Ċ import Ġandroid . app . usage . Usage Events Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Application Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Drawable Ċ Ċ inline Ġval ĠContext . appName Ġget () Ġ= Ġget AppName ( packageName ) Ċ Ċ inline Ġval ĠContext . app Icon Ġget () Ġ= Ġget App Icon ( packageName ) Ċ Ċ fun ĠContext . get AppName ( packageName : ĠString ): ĠString ? Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠ Ġpackage Manager . getApplication Label ( ĊĠĠĠĠĠĠĠ Ġpackage Manager . getApplication Info ( packageName , ĠPackage Manager . GET _ META _ DATA ) ĊĠĠĠ Ġ). toString () Ċ }. get OrNull () Ċ Ċ fun ĠContext . getApp Icon ( packageName : ĠString ): ĠDrawable ? Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠ Ġpackage Manager . getApplication Icon ( packageName ) Ċ }. get OrNull () Ċ Ċ inline Ġval ĠContext . foreground App : ĠString ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has App Usage Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw (" App Ġusage Ġpermission Ġis Ġrequired ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġusage Events Ġ= ĠSystem . currentTimeMillis (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Magic Number ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġquery Ġfor Ġthe Ġlast Ġone Ġminute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Stats Manager . query Events ( it Ġ- Ġ 6 0 Ġ* Ġ 1 0 0 0 L , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠUsage Events . Event () ĊĠĠĠĠĠĠĠ Ġvar Ġforeground App Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġwhile Ġ( usage Events . hasNext Event ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Events . getNext Event ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠeventType Ġ= Ġif Ġ( at Least Q ()) ĠUsage Events . Event . ACTIVITY _ RE SU MED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠUsage Events . Event . MOVE _ TO _ FO REG ROUND ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . eventType Ġ== ĠeventType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforeground App Ġ= Ġevent . packageName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġforeground App ĊĠĠĠ Ġ} Ċ Ċ inline Ġval ĠContext . installed Apps : ĠList < Application Info > ĊĠĠĠ Ġget () Ġ= Ġpackage Manager . get Installed Applications ( PackageManager . GET _ META _ DATA ) Ċ Ċ inline Ġval ĠContext . installed App sWith Launch Intent : ĠList < Application Info > ĊĠĠĠ Ġget () Ġ= Ġinstalled Apps ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . packageName ?. isNotEmpty () Ġ?: Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġpackage Manager . get Launch Intent For Package ( it . packageName ) Ġ!= Ġnull Ġ} Ċ Ċ inline Ġval ĠContext . installed App sWith Launch Activity : ĠList < Application Info > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ MAIN , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġadd Category ( Intent . CATEGORY _ LA UNCH ER ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpackage Names Ġ= Ġpackage Manager . query Intent Activities ( intent , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . activity Info . packageName Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinstalled Apps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . packageName ?. isNotEmpty () Ġ?: Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġpackage Names . contains ( it . packageName ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ inline Ġval ĠContext . installed Launcher App : ĠList < Application Info > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ MAIN , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġadd Category ( Intent . CATEGORY _ LA UNCH ER ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpackage Names Ġ= Ġpackage Manager . query Intent Activities ( intent , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . activity Info . packageName Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinstalled Apps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . packageName ?. isNotEmpty () Ġ?: Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Manager . get Launch Intent For Package ( it . packageName ) Ġ!= Ġnull Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Names . contains ( it . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ