package Ġp 2 pd ops . d ops ender . selectors . ui . apps Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġkotlinx . android . synt hetic . main . frag _ apps . view .* Ċ import Ġkotlinx . android . synt hetic . main . item _ app . view .* Ċ import Ġp 2 pd ops . d ops ender . selectors . Apps Selector Activity Ċ Ċ import Ġp 2 pd ops . d ops ender . R Ċ import Ġp 2 pd ops . d ops ender . mod als . AppData ĊĊ Ċ import Ġp 2 pd ops . d ops ender . utils . hide Ċ import Ġp 2 pd ops . d ops ender . utils . human ize Bytes Ċ import Ġp 2 pd ops . d ops ender . utils . show Ċ import Ġjava . util .* Ċ import Ġkotlin . Comparator Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠApps Installed Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġclass ĠApps Installed ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Apps Installed Fragment " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ SECTION _ NUMBER Ġ= Ġ" ARG _ SECTION _ NUMBER " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( section Number : ĠInt ): ĠApps Installed Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApps Installed Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( ARG _ SECTION _ NUMBER , Ġsection Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġm Activity : ĠApps Selector Activity ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠApps ViewModel ĊĠĠĠ Ġprivate Ġvar Ġapps Installed RecyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġapps Installed Adapter : ĠRecyclerView . Adapter < Apps Installed ViewHolder >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġapps Installed List : ĠList < AppData > Ġ= ĠArrayList () ĊĠĠĠ Ġvar Ġselected Apps List : ĠArrayList < AppData > Ġ= ĠArrayList () ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( activity ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity Ġ= Ġactivity Ġas ĠApps Selector Activity ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠClass CastException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ activity Ġmust Ġimplement Ġon Some EventListener " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ViewState Restore d ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on ViewState Restore d ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on ViewState Restore d : Ġ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġinflater . inflate ( R . layout . frag _ apps , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Apps ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . selected Apps . observe ( this Ġas ĠLifecycle Owner , ĠObserver Ġ{ Ġt : ĠArrayList < AppData > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Apps List Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t . contains All ( apps Installed List )) Ġm Activity ?. show De Select All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġm Activity ?. show Select All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapps Installed Adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" change :: Ġ$ selected Apps List ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġapps Installed RecyclerView Ġ= Ġroot View . apps Recycler ĊĊĊĠĠĠĠĠĠĠ ĠFetch Installed Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ Ġapps Installed Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRecyclerView . Adapter < Apps Installed ViewHolder >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠApps Installed ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApps Installed ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . item _ app , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġapps Installed List . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠApps Installed ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= Ġapps Installed List [ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Apps List . contains ( apps Installed List [ position ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . app Checked . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . app Checked . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . appName . text Ġ= Ġapp . appName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . appName . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . app Size . text Ġ= Ġhuman ize Bytes ( app . length (), Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġcontext ?. package Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( pm ?. getApplication Icon ( app . app PackageName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ apk ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thumbnail ( 0 . 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( holder . item View . app Icon ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! selected Apps List . contains ( apps Installed List [ position ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Selected Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapps Installed List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity !!. select App ( apps Installed List [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . app Checked . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove Selected Apps ( apps Installed List [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity !!. de Select App ( apps Installed List [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . app Checked . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapps Installed RecyclerView !!. set Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠ Ġapps Installed RecyclerView !!. layout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġapps Installed RecyclerView ?. adapter Ġ= Ġapps Installed Adapter ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFetch Installed Apps ( private Ġval Ġfragment : ĠApps Installed Fragment ) Ġ: ĊĠĠĠĠĠĠĠ ĠAsync Task < Void , ĠVoid , ĠList < AppData >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġparams : ĠVoid ?): ĠList < AppData > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm : ĠPackage Manager Ġ= Ġfragment . require Context (). package Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ MAIN , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ LA UNCH ER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapps Array Ġ= Ġpm . query Intent Activities ( intent , ĠPackage Manager . GET _ META _ DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapps List Ġ= ĠArrayList < AppData >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠappName : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġapps Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappName Ġ= Ġinfo . load Label ( pm ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Data Ġ= ĠApp Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappName Ġ= ĠappName [ 0 ]. toUpperCase () Ġ+ ĠappName . substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toLowerCase ( Locale . getDefault ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp PackageName Ġ= Ġinfo . activity Info . packageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp FilePath Ġ= Ġinfo . activity Info . application Info . public Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! apps List . contains ( app Data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapps List . add ( app Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapps List . sort With ( Comparator Ġ{ Ġd 1 , Ġd 2 Ġ-> Ġd 1 . appName . compareTo ( d 2 . appName ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapps List ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride ĊĠĠĠĠĠĠĠ Ġfun Ġon Post Execute ( result : ĠList < AppData >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Post Execute ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . apps Installed List Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . notify Apps Available () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Apps Available () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" notify Aud ios Available : Ġ${ apps Installed List . size }") ĊĠĠĠĠĠĠĠ Ġapps Installed Adapter ?. notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġarguments ?. getInt ( ARG _ SECTION _ NUMBER ) !! ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . select _ all _ grp Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Options ItemSelected : Ġselect ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity !!. selectAll Apps ( apps Installed List , Ġposition ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . selected All Apps ( apps Installed List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity !!. show De Select All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . de select _ all _ grp Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Options ItemSelected : Ġde select ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity !!. de Select All Apps ( apps Installed List , Ġposition ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity !!. show Select All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . de Select All Apps ( apps Installed List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }