/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ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 . unit . api _ view ing . main Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Environment Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . mad ness . collision . unit . api _ view ing . Api View ing ViewModel Ċ import Ġcom . mad ness . collision . unit . api _ view ing . My Unit Ċ import Ġcom . mad ness . collision . unit . api _ view ing . data . Api Unit Ċ import Ġcom . mad ness . collision . unit . api _ view ing . databinding . Fragment Api Binding Ċ import Ġcom . mad ness . collision . unit . api _ view ing . list . App List Fragment Ċ import Ġcom . mad ness . collision . unit . api _ view ing . util . A pk Retriever Ċ import Ġcom . mad ness . collision . util . os . Os Utils Ċ import Ġjava . io . File Ċ Ċ internal Ġclass ĠMain List Loader ( ĊĠĠĠ Ġprivate Ġval Ġhost : ĠMy Unit , ĊĠĠĠ Ġ// Ġexternal Ġdata Ġdependencies ĊĠĠĠ Ġprivate Ġval Ġdata Config : ĠMain Data Config , Ċ ) Ġ: ĠLifecycle Owner Ġby Ġhost Ġ{ ĊĊĠĠĠ Ġ// Ġexternal Ġcontext Ġdependencies ĊĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġlateinit Ġvar Ġview Binding : ĠFragment Api Binding ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠApi View ing ViewModel Ġ Ġ// ĠAndroid ViewModel ĊĠĠĠ Ġlateinit Ġvar Ġlist Fragment : ĠApp List Fragment ĊĠĠĠ Ġlateinit Ġvar Ġapk Retriever : ĠA pk Retriever ĊĊĠĠĠ Ġprivate Ġvar Ġsort Item : ĠInt Ġby Ġdata Config :: sort Item ĊĠĠĠ Ġprivate Ġval Ġrefresh Layout : ĠSw ipe Refresh Layout ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġview Binding . api Swipe Refresh ĊĠĠĠ Ġprivate Ġval Ġloaded Items : ĠApi Unit ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠviewModel . loaded Items ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġitems Ġdefined Ġin Ġ[ Api Unit ] Ġ( i . e . Ġexcluding Ġvarious Ġlaunch Ġmodes ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload Sorted Standard List ( item : ĠInt , Ġsort E fficient ly : ĠBoolean , Ġfg : ĠBoolean , Ġapp Item Loader : Ġ( item : ĠInt ) Ġ-> ĠUnit ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! loaded Items . should Load ( item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! sort E fficient ly Ġ&& Ġfg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sort Apps ( sort Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Fragment . update List ( viewModel . apps 4 Cache , Ġrefresh Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp Item Loader ( item ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fg ) ĠviewModel . sort Apps ( sort Item ) ĊĠĠĠĠĠĠĠ Ġval Ġitem 2 Load Ġ= Ġloaded Items . item 2 Load () ĊĠĠĠĠĠĠĠ Ġif Ġ( item 2 Load Ġ== ĠApi Unit . NON ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġitem 2 Load ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload App ItemList ( context : ĠContext , Ġitem : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Unit . USER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . loading ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add User Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Unit . SYS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Items . loading ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add System Apps ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) Ġ Ġ// Ġplaced Ġafter Ġloaded Items . should Load ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Device A pk s ( context : ĠContext , Ġblock : Ġ( apk : ĠAny ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Os Utils . satisf y ( Os Utils . Q )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuser Ġselected Ġprimary Ġstorage Ġto Ġscan ĠA PK s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . accessible Primary External ( context ) Ġ{ Ġtree Uri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk Retriever . from Uri ( tree Uri , Ġblock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Storage Ġ= Ġget External Storage Directory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk Retriever . from File Folder ( external Storage ) Ġ{ Ġblock ( it . path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġget External Storage Directory (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEnvironment . get External Storage Directory () ĊĠĠĠ Ġ} Ċ } Ċ