package Ġcom . android vip . he bf . utils Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . app . Activity Manager . Running App Process Info Ċ import Ġandroid . app . usage . Usage Stats Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Application Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . android vip . he bf . models . App Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . util .* ĊĊ Ċ class ĠPackages Manager ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpackage Manager : ĠPackage Manager Ġ= Ġcontext . package Manager ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFILTER _ DISABLED Ġ= Ġ"- d " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFILTER _ TH IRD _ PAR TY Ġ= Ġ"- 3 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFILTER _ SYSTEM Ġ= Ġ"- s " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinstalled Packages : ĠMutable List < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ MAIN , Ġnull ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ LA UNCH ER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ RESET _ TASK _ IF _ NE EDED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolve InfoList Ġ= Ġpackage Manager . query Intent Activities ( intent , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Names : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve InfoList . forEach Ġ{ Ġresolve Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Info Ġ= Ġresolve Info . activity Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Names . add ( activity Info . application Info . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpackage Names ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Third Party Apps (): ĠMutable List < App > Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Names Ġ= Ġinstalled Packages ĊĠĠĠĠĠĠĠ Ġval Ġapps : ĠMutable List < App > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġpackage Names . forEach Ġ{ ĠpackageName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( packageName . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . packageName Ġ= ĠpackageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġget App Icon ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġget App Label ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Name Ġ= Ġget Version Name ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis System App Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapps . add ( app ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġapps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Disabled Apps (): ĠMutable List < App > Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisabled Apps : ĠMutable List < App > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ ĠRoot Utils . execute With Output (" pm Ġlist Ġpackages Ġ- l Ġ$ FILTER _ DISABLED ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġit . remove Prefix (" package :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( packageName . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . packageName Ġ= ĠpackageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġget App Icon ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġget App Label ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Name Ġ= Ġget Version Name ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Apps . add ( app ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġdisabled Apps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget System Apps (): ĠMutable List < App > Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Apps : ĠMutable List < App > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ ĠRoot Utils . execute With Output (" pm Ġlist Ġpackages Ġ- l Ġ$ FILTER _ SYSTEM Ġ- e ") Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġline . remove Prefix (" package :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( packageName . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . packageName Ġ= ĠpackageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġget App Icon ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġget App Label ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Name Ġ= Ġget Version Name ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis System App Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Apps . add ( app ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġsystem Apps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll Packages (): ĠMutable List < App > Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapps : ĠMutable List < App > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġdisabled Apps Ġ= Ġget Disabled Apps () ĊĠĠĠĠĠĠĠ Ġval Ġsystem Apps Ġ= Ġget System Apps () ĊĠĠĠĠĠĠĠ ĠRoot Utils . execute With Output (" pm Ġlist Ġpackages Ġ- l ", Ġcontext Ġ= Ġcontext ) Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġline . remove Prefix (" package :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp ( packageName , Ġget App Label ( packageName ), Ġfalse , Ġ 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġget App Icon ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Name Ġ= Ġget Version Name ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġ! disabled Apps . contains ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis System App Ġ= Ġsystem Apps . contains ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapps . add ( app ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġapps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Used Packages ( interval : ĠLong Ġ= Ġ 6 0 Ġ* Ġ 1 0 0 0 ): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġam Ġ= Ġcontext . getSystem Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext . ACTIVITY _ SERVICE ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠActivity Manager ? ĊĊĠĠĠĠĠĠĠ Ġfun Ġold Way () Ġ: ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Apps Ġ= Ġam !!. running App Processes . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . import ance Ġ== ĠRunning App Process Info . IMPORT ANCE _ VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisible Apps . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pkg List . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" com . android vip ") Ġ&& Ġit . contains (" om ni ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Way () Ġ: ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Utils . has Usage Stats Permission ( context )) Ġreturn Ġold Way () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġus m Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext . USAGE _ STATS _ SERVICE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠUsage Stats Manager ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġold Way () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusage Stats Ġ= Ġus m !!. query Usage Stats ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsage Stats Manager . INTERVAL _ DA IL Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnow Ġ- Ġinterval , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). sorted With Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo 2 . last Time Used . compareTo ( o 1 . last Time Used ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġusage Stats . map Ġ{ Ġit . packageName Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Tasks Check Ġ= ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android . permission . REAL _ GET _ TASK S " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Tasks Check Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Way () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Way () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Way () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . log Error ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget App Icon ( packageName : ĠString ?): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Manager . getApplication Icon ( packageName ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . log Error ( e , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , Ġandroid . R . drawable . sym _ def _ app _ icon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget App Label ( packageName : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Info : ĠApplication Info ? Ġ= Ġpackage Manager . getApplication Info ( packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( application Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpackage Manager . getApplication Label ( application Info ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" unknown " ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" unknown " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Version Name ( packageName : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġpackage Manager . get Package Info ( packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . version Name Ġ== Ġnull ) Ġ"" Ġelse Ġinfo . version Name ĊĠĠĠĠĠĠĠ Ġ}. get OrDefault ("") ĊĠĠĠ Ġ} Ċ Ċ }