/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠCl iff ord ĠLi u Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . mad ness . collision . we arable . av Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . pm . Application Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . PopupMenu Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . we ar . ambient . Ambient Mode Support Ċ import Ġandroidx . we ar . widget . W ear able Linear LayoutManager Ċ import Ġcom . mad ness . collision . we arable . R Ċ import Ġcom . mad ness . collision . we arable . av . data . Api Unit Ċ import Ġcom . mad ness . collision . we arable . av . data . Api View ing App Ċ import Ġcom . mad ness . collision . we arable . av . data . Easy Access Ċ import Ġcom . mad ness . collision . we arable . databinding . Fragment Api Binding Ċ import Ġcom . mad ness . collision . we arable . main . Main ViewModel Ċ import Ġcom . mad ness . collision . we arable . misc . Misc App Ċ import Ġcom . mad ness . collision . we arable . util . P Ċ import Ġcom . mad ness . collision . we arable . util . X Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ Ċ internal Ġclass ĠApi Fragment : ĠFragment (), ĠAdapter View . On ItemSelected Listener , ĠMenuItem . On MenuItem ClickListener { ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDISPLAY _ APPS _ USER : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDISPLAY _ APPS _ SYSTEM : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDISPLAY _ APPS _ ALL : ĠInt Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ POSITION _ API _ LOW : ĠInt Ġ Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ POSITION _ API _ HIGH : ĠInt Ġ Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ POSITION _ API _ NAME : ĠInt Ġ Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ POSITION _ API _ TIME : ĠInt Ġ Ġ= Ġ 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmain ViewModel : ĠMain ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠApi View ing ViewModel Ġby Ġactivity ViewModels () ĊĊĠĠĠ Ġprivate Ġvar Ġsort Item : ĠInt Ġ= ĠSORT _ POSITION _ API _ LOW ĊĠĠĠ Ġprivate Ġvar Ġdisplay Item : ĠInt Ġ= ĠDISPLAY _ APPS _ USER ĊĠĠĠ Ġprivate Ġval Ġloaded Items : ĠApi Unit ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠviewModel . loaded Items ĊĠĠĠ Ġprivate Ġvar Ġload Item : ĠInt Ġ= ĠApi Unit . NON ĊĠĠĠ Ġprivate Ġvar Ġlist Inset Bottom : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġr Sort : ĠRunnable Sort ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġr Display : ĠRunnable Display ĊĊĠĠĠ Ġ// Ġviews ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsp Display Method : ĠSp inner ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠAPI Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmanager : ĠW ear able Linear LayoutManager ĊĠĠĠ Ġprivate Ġvar Ġpop Sort : ĠPopup Menu ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Views : ĠFragment Api Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Ambient : ĠAmb ient Mode Support . Ambient Callback ĊĊĠĠĠ Ġ// Ġcontext Ġrelated ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpm : ĠPackage Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings Preferences : ĠSharedPreferences ĊĊĠĠĠ Ġprivate Ġfun Ġsort Method (){ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( pop Sort Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Sort Ġ= ĠPopup Menu ( context , Ġactivity . findViewById ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Sort !!. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( 0 , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener ( this @ Api Fragment :: on MenuItem Click ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . getItem ( sort Item ). isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop Sort !!. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ ĠApi Task Manager . cancel All () ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġm Views Ġ= ĠFragment Api Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġm Views . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Refresh List ( context : ĠContext ){ ĊĠĠĠĠĠĠĠ Ġrefresh Adapter List ( viewModel . screen 4 Display ( load Item )) ĊĠĠĠĠĠĠĠ Ġif Ġ( loaded Items . isLoading ( load Item )) Ġreturn ĊĠĠĠĠĠĠĠ ĠApi Task Manager . join Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin ĠviewModel . apps 4 Display Value . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 1 5 ) ĠApi Task Manager . now ( Dispatch ers . Main ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġfalse Ġtodo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ>= ĠEasy Access . preload Limit ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= ĠviewModel . apps 4 Display Value . size ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠviewModel . apps 4 Display Value [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app . preload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Info : ĠApplication Info ? Ġ= ĠMisc App . getApplication Info ( context , ĠpackageName Ġ= Ġapp . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Info Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . load ( context , Ġapplication Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi Task Manager . now ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Changed ( index Ġ+ Ġadapter . index Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi Task Manager . now ( Dispatch ers . Main ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġfalse Ġtodo Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator 4 Cache Ġ= ĠviewModel . apps 4 Cache . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator 4 Cache . hasNext ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= Ġiterator 4 Cache . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app . preload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Info : ĠApplication Info ? Ġ= ĠMisc App . getApplication Info ( context , ĠpackageName Ġ= Ġapp . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Info Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . load ( context , Ġapplication Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġce ase Refresh ( unit : ĠInt ){ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( load Item Ġ== Ġunit ) Ġrefresh Layout . is Refresh ing Ġ= Ġfalse Ġtodo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn Ċ Ċ // ĠĠĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġtrue Ġtodo ĊĠĠĠĠĠĠĠ Ġpm Ġ= Ġcontext . package Manager ĊĊĠĠĠĠĠĠĠ Ġsettings Preferences Ġ= Ġcontext . get SharedPreferences ( P . PRE F _ SETTINGS , ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ ĠEasy Access . is S weet Ġ= Ġsettings Preferences . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . av S weet ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getBoolean ( R . bool . av S weet Default ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠEasy Access . should Include Disabled Ġ= Ġsettings Preferences . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . av Include Disabled ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getBoolean ( R . bool . av Include Disabled Default ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠAPI Adapter ( context ) ĊĊĠĠĠĠĠĠĠ Ġmanager Ġ= ĠW ear able Linear LayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġm Views . av Recycler . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Manager Ġ= Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Nested Scrolling Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCircular ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Edge Items Center ing Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . apps 4 Display . observe ( view Lifecycle Owner ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . apps Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsort Item Ġ= Ġsettings Preferences . getInt (" SDK Check Sort Spinner Selection ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġr Sort Ġ= ĠRunnable Sort ( sort Item ) ĊĠĠĠĠĠĠĠ Ġadapter . set Sort Method ( sort Item ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġsp Display Method Ġ= Ġapi Spinner Display Ċ // ĠĠĠĠĠĠĠ Ġval Ġdisplay Method Ġ= ĠarrayOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . sdk check _ display spinner _ user ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . api Display Sys ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . sdk check _ display spinner _ users ystem ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . api Display AP K ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . api Display File ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . api Display Volume ) Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġsp Display Method . adapter Ġ= ĠArray Adapter ( context , ĠR . layout . pop _ list _ item , Ġdisplay Method ) Ċ // ĠĠĠĠĠĠĠ Ġsp Display Method . on ItemSelected Listener Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġdisplay Item Ġ= Ġsettings Preferences . getInt (" SDK Check Display Spinner Selection ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġr Display Ġ= ĠRunnable Display ( display Item ) Ċ // ĠĠĠĠĠĠĠ Ġsp Display Method . setSelection ( display Item ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdp 5 Ġ= ĠX . size ( context , Ġ 5 f , ĠX . DP ). toInt () ĊĠĠĠĠĠĠĠ Ġmain ViewModel . in set Bottom . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Inset Bottom Ġ= Ġif Ġ( it Ġ== Ġ 0 ) Ġdp 5 Ġ* Ġ 7 Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . list Inset Bottom Ġ= Ġlist Inset Bottom ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Ambient Ġ= Ġobject Ġ: ĠAmb ient Mode Support . Ambient Callback (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Enter Ambient ( ambient Details : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Enter Ambient ( ambient Details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Access . isIn Ambient Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Visible Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Exit Ambient () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Exit Ambient () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Access . isIn Ambient Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Visible Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Visible Items (){ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġ( manager . findFirst Visible Item Position () Ġ- Ġ 3 ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ< Ġ 0 ) Ġ 0 Ġelse Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġ( manager . find Last Visible Item Position () Ġ+ Ġ 4 ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ> Ġadapter . item Count Ġ- Ġ 1 ) Ġadapter . item Count Ġ- Ġ 1 Ġelse Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . notify Item Range Changed ( first , Ġlast Ġ- Ġfirst Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmain ViewModel . ambient Ġ= Ġm Ambient ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( loaded Items . should Load ( Api Unit . ALL _ APPS )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . finish ( Api Unit . ALL _ APPS ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . addAll Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sort Apps ( SORT _ POSITION _ API _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Task Manager . join ( task Ġ= Ġr Sort ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Visible Items () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Low Memory () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Low Memory () ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠX . toast ( context , Ġ" out Ġof Ġmemory ", ĠToast . LENGTH _ LONG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh List () Ġ{ ĊĠĠĠĠĠĠĠ ĠApi Task Manager . now Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . screen Out ( load Item ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Apps 4 Display () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . un Load ( load Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Sort edList ( load Item , Ġsort E fficient ly Ġ= Ġtrue , Ġfg Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġhandle Refresh List ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Adapter List ( list : ĠList < Api View ing App > Ġ= ĠviewModel . apps 4 Cache ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . update Apps 4 Display ( list ) ĊĠĠĠĠĠĠĠ ĠApi Task Manager . now ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġsort E fficient ly Ġsort Ġor Ġnot ĊĠĠĠĠ Ġ* Ġ@ param Ġfg Ġdo Ġforeground Ġloading Ġ( do Ġsorting Ġif Ġneeded , Ġwhile Ġno Ġsorting Ġas Ġbackground ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Sort edList ( item : ĠInt Ġ, Ġsort E fficient ly : ĠBoolean Ġ, Ġfg : ĠBoolean Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! loaded Items . should Load ( item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! sort E fficient ly Ġ&& Ġfg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sort Apps ( sort Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Apps 4 Display () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Unit . USER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . loading ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add User Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . finish ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Unit . SYS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . loading ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add System Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . finish ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Unit . ALL _ APPS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb User Ġ= Ġloaded Items . should Load ( Api Unit . USER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Sys Ġ= Ġloaded Items . should Load ( Api Unit . SYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . loading ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b User Ġ&& Ġb Sys ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . addAll Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( b User ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add User Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( b Sys ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add System Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . finish ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Unit . NON Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem 2 Load Ġ= Ġloaded Items . item 2 Load () ĊĠĠĠĠĠĠĠ Ġval Ġaccomp lished Ġ= Ġitem 2 Load Ġ== ĠApi Unit . NON ĊĠĠĠĠĠĠĠ Ġif Ġ( ac comp lished Ġ|| Ġfg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fg ) ĠviewModel . sort Apps ( sort Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ac comp lished ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠApi Task Manager . now Ġ{ Ġload Sort edList ( item 2 Load , Ġsort E fficient ly Ġ= Ġtrue , Ġfg Ġ= Ġfalse ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View <* >, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong Ġ) Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ=== Ġsp Display Method ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġtrue Ġtodo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Item Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( position ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDISPLAY _ APPS _ USER Ġ-> ĠApi Unit . USER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDISPLAY _ APPS _ SYSTEM Ġ-> ĠApi Unit . SYS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDISPLAY _ APPS _ ALL Ġ-> ĠApi Unit . ALL _ APPS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġload Item Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Display . position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Task Manager . join ( task Ġ= Ġr Display ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View <* >) Ġ Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MenuItem Click ( item : ĠMenuItem ): ĠBoolean Ġ Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġtrue Ġtodo Ċ // ĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Api Sort API L Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Item Ġ= ĠSORT _ POSITION _ API _ LOW Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Api Sort API H Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Item Ġ= ĠSORT _ POSITION _ API _ HIGH Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Api Sort AP IN ame Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Item Ġ= ĠSORT _ POSITION _ API _ NAME Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Api Sort AP IT ime Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Item Ġ= ĠSORT _ POSITION _ API _ TIME Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġr Sort . position Ġ= Ġsort Item ĊĠĠĠĠĠĠĠ ĠApi Task Manager . join ( task Ġ= Ġr Sort ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinterface ĠRunnable API { ĊĠĠĠĠĠĠĠ Ġvar Ġposition : ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠRunnable Sort ( override Ġvar Ġposition : ĠInt ) Ġ: ĠRunnable , ĠRunnable API Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set Sort Method ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Preferences . edit Ġ{ Ġput Int (" SDK Check Sort Spinner Selection ", Ġposition ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sort Apps ( sort Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġhandle Refresh List ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠRunnable Display ( override Ġvar Ġposition : ĠInt ) Ġ: ĠRunnable , ĠRunnable API Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Preferences . edit Ġ{ Ġput Int (" SDK Check Display Spinner Selection ", Ġposition ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Sort edList ( load Item , Ġsort E fficient ly Ġ= Ġtrue , Ġfg Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sort Apps ( sort Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġhandle Refresh List ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ