package Ġcom . d ail yst udio . dev br icks x . utils Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . d ail yst udio . dev br icks x . app . activity . Activity Launcher Ċ import Ġcom . d ail yst udio . dev br icks x . development . Logger Ċ import Ġjava . lang . Exception Ċ Ċ class ĠApp Change ( val Ġaction : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName : ĠString ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ[ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ]") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠApp Changes LiveData ( var Ġcontext : ĠContext ): ĠLive Data < App Change >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDATA _ PACKAGE _ PREFIX Ġ= Ġ" package :" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġapp Context : ĠContext Ġ= Ġcontext . application Context ĊĊĠĠĠ Ġoverride Ġfun Ġon Active () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Active () ĊĠĠĠĠĠĠĠ ĠLogger . debug (" register Ġpackage Ġchanges Ġreceiver : Ġ$ app Changes Receiver ") ĊĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( Intent . ACTION _ PACKAGE _ AD DED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( Intent . ACTION _ PACKAGE _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( Intent . ACTION _ PACKAGE _ RE MOVED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( Intent . ACTION _ PACKAGE _ REPL AC ED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Data Scheme (" package ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Context . register Receiver ( app Changes Receiver , Ġfilter ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn (" failed Ġto Ġregister Ġreceiver Ġfor Ġapp Ġchanges : Ġ$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Inactive () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Inactive () ĊĠĠĠĠĠĠĠ ĠLogger . debug (" unregister Ġpackage Ġchanges Ġreceiver : Ġ$ app Changes Receiver ") ĊĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Context . unregister Receiver ( app Changes Receiver ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn (" failed Ġto Ġunregister Ġreceiver Ġfor Ġapp Ġchanges : Ġ$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġapp Changes Receiver Ġ= Ġobject : ĠBroadcast Receiver () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug (" intent : Ġ$ intent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent ?. action Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġintent ?. data ?. toString () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . startsWith ( DATA _ PACKAGE _ PREFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Value ( App Change ( action , Ġdata . remove Prefix ( DATA _ PACKAGE _ PREFIX ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ object ĠApp Utils Ġ{ ĊĊĠĠĠ Ġfun Ġis Application Installed ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . package Manager . get Package G ids ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Application Icon ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName : ĠString ): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . package Manager . getApplication Icon ( packageName ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch Application ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġcontext . package Manager . get Launch Intent For Package ( packageName ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Launcher . launch Activity ( context , Ġintent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn (" entry Ġpoint Ġof Ġapplication Ġ[$ packageName ] Ġdoes Ġnot Ġfound .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload Application ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" https :// play . google . com / store / apps / details ? id =") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . parse ( link ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Package (" com . android . v ending ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠActivity Launcher . launch Activity ( context , Ġintent ) ĊĠĠĠ Ġ} Ċ Ċ }