package Ġcom . andro dev ca fe . sim bad checker Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Application Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Asset Manager Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . andro dev ca fe . sim bad checker . model . Application Ċ import Ġcom . andro dev ca fe . sim bad checker . view . components . RecyclerView Application Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . lang . ref . Weak Reference ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ ĠLO ADING , ĠLO ADED _ INF ECT ED , ĠLO ADED _ SAFE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġa Ġcallback Ġas Ġmember , Ġthis Ġway Ġwe Ġget Ġa Ġstrong Ġreference Ġand Ġthe Ġcallback Ġcan Ġbe Ġuse Ġin Ġthe ĠAsync Task ĊĠĠĠ Ġprivate Ġval Ġget Inf ected Apps Callback Ġ= Ġ{ Ġapplications : ĠList < Application > Ġ-> ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġthe Ġlist ĊĠĠĠĠĠĠĠ Ġapp List . layout Manager Ġ= ĠLinearLayoutManager ( this , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġadapter Ġand Ġdefine Ġcallback ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Application Ġ= ĠRecyclerView Application ( applications ) Ġ{ Ġapplication Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Settings For Application ( application ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp List . adapter Ġ= Ġre cyclerView Application ĊĊĠĠĠĠĠĠĠ Ġif Ġ( applications . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinf ected Apps . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Quantity String ( R . plurals . number _ inf ected _ apps , Ġapplications . size , Ġapplications . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange State ( State . LOADED _ INF ECT ED ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange State ( State . LOADED _ SAFE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġtoolbar . setTitle TextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġchange State ( State . LOADING ) ĊĊĠĠĠĠĠĠĠ ĠGet Inf ected Apps Task ( get Inf ected Apps Callback , Ġpackage Manager , Ġresources . assets ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ) Ġ= Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR . id . action _ refresh Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange State ( State . LOADING ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGet Inf ected Apps Task ( get Inf ected Apps Callback , Ġpackage Manager , Ġresources . assets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠR . id . action _ info Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠInfo Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġgot Ġhere , Ġthe Ġuser 's Ġaction Ġwas Ġnot Ġrecognized . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInvoke Ġthe Ġsuperclass Ġto Ġhandle Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Settings For Application ( application : ĠApplication ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( android . provider . Settings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ) ĊĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse (" package :${ application . packageName }") ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange State ( state : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecking TextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarning . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ected Apps . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Inf ected Apps . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . LOADED _ INF ECT ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecking TextView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarning . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ected Apps . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Inf ected Apps . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . LOADED _ SAFE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecking TextView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp List . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarning . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ected Apps . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Inf ected Apps . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠGet Inf ected Apps Task ( ĊĠĠĠĠĠĠĠ Ġon Finish : Ġ( List < Application >) Ġ-> ĠUnit , Ġval Ġpackage Manager : ĠPackage Manager , Ġval Ġasset Manager : ĠAsset Manager ĊĠĠĠ Ġ) Ġ: ĠAsync Task < Unit , ĠUnit , ĠList < Application >>() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback Reference : ĠWeak Reference <( List < Application >) Ġ-> ĠUnit > Ġ= ĠWeak Reference ( on Finish ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġparams : ĠUnit ?): ĠList < Application > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstalled Apps Ġ= Ġthis . package Manager . get Installed Applications ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinf ected Packages Names Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( InputStream Reader ( asset Manager . open (" inf ected _ packages _ names . txt ")) ). read Lines () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstalled Apps ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġsystem Ġapps ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . flags Ġand ĠApplication Info . FLAG _ SYSTEM ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġnon Ġinf ected Ġapp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ected Packages Names . contains ( it . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTransform Ġfor Ġinterface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpackage Manager . getApplication Label ( it ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġpackage Manager . getApplication Icon ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication ( name , Ġit . packageName , Ġicon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠList < Application >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCallback Ġto Ġinterface Ġif Ġnot Ġdestroyed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Reference . get ()?. invoke ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ