package Ġspace . tar an . ark navigator . mvp . presenter . adapter Ċ Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġspace . tar an . ark navigator . mvp . model . User Preferences Ċ import Ġspace . tar an . ark navigator . mvp . model . repo . Root And Fav Ċ import Ġspace . tar an . ark navigator . mvp . model . repo . index . ResourceId Ċ import Ġspace . tar an . ark navigator . mvp . model . repo . index . Resource Meta Ċ import Ġspace . tar an . ark navigator . mvp . model . repo . index . Resources Index Ċ import Ġspace . tar an . ark navigator . mvp . model . repo . tags . Tags Storage Ċ import Ġspace . tar an . ark navigator . mvp . view . Resources View Ċ import Ġspace . tar an . ark navigator . mvp . view . item . File Item View Ċ import Ġspace . tar an . ark navigator . navigation . App Router Ċ import Ġspace . tar an . ark navigator . navigation . Scre ens Ċ import Ġspace . tar an . ark navigator . utils . RESOURCES _ SCREEN Ċ import Ġspace . tar an . ark navigator . utils . Sorting Ċ import Ġspace . tar an . ark navigator . utils . re ify Sorting Ċ import Ġspace . tar an . ark navigator . utils . un equal Compare By Ċ import Ġjava . nio . file . Files Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ class ĠResources Grid Presenter ( ĊĠĠĠ Ġval Ġroot And Fav : ĠRoot And Fav , ĊĠĠĠ Ġval Ġview State : ĠResources View , ĊĠĠĠ Ġval Ġscope : ĠCor outine Scope Ċ ) Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġuser Preferences : ĠUser Preferences ĊĊĠĠĠ Ġprivate Ġvar Ġresources Ġ= ĠlistOf < Resource Meta >() ĊĠĠĠ Ġprivate Ġvar Ġselection Ġ= ĠlistOf < Resource Meta >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġindex : ĠResources Index ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstorage : ĠTags Storage ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrouter : ĠApp Router ĊĊĠĠĠ Ġvar Ġsorting Ġ= ĠSort ing . DEFAULT ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġuser Preferences . set Sorting ( value ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġascending : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġuser Preferences . set Sorting Ascending ( value ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Count () Ġ= Ġselection . size ĊĊĠĠĠ Ġfun Ġbind View ( view : ĠFile Item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġselection [ view . position ()] ĊĠĠĠĠĠĠĠ ĠLog . d ( RESOURCES _ SCREEN , Ġ" binding Ġview Ġfor Ġresource Ġ${ resource . id }") ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġindex . getPath ( resource . id ) ĊĊĠĠĠĠĠĠĠ Ġview . setText ( path . fileName . toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Files . isDirectory ( path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Resource Ġcan 't Ġbe Ġa Ġdirectory ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . setIcon Or Preview ( path , Ġresource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Item Click ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . navigate To Fragment Using Add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS cre ens . Gallery Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot And Fav , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection . map Ġ{ Ġit . id Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġinit ( index : ĠResources Index , Ġstorage : ĠTags Storage , Ġrouter : ĠApp Router ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġthis . storage Ġ= Ġstorage ĊĠĠĠĠĠĠĠ Ġthis . router Ġ= Ġrouter ĊĠĠĠĠĠĠĠ Ġsorting Ġ= Ġuser Preferences . get Sorting () ĊĠĠĠĠĠĠĠ Ġascending Ġ= Ġuser Preferences . is Sorting Ascending () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Selection ( selection : ĠSet < ResourceId >, Ġneed ToUpdate Adapter : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Resources Grid Presenter . selection Ġ= Ġresources . filter Ġ{ Ġselection . contains ( it . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( need ToUpdate Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . update Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġreset Resources ( resources : ĠSet < Resource Meta >, Ġneed ToUpdate Adapter : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Resources Grid Presenter . resources Ġ= Ġresources . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort All Resources () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Ġ= Ġthis @ Resources Grid Presenter . resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( need ToUpdate Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . update Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Sorting ( sorting : ĠSort ing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress Visibility ( true , Ġ" Sorting ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Resources Grid Presenter . sorting Ġ= Ġsorting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort All Resources () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Selection AndUpdate Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Ascending ( ascending : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress Visibility ( true , Ġ" Sorting ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Resources Grid Presenter . ascending Ġ= Ġascending ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort All Resources () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Selection AndUpdate Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort All Resources () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsort Time Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomparator Ġ= Ġre ify Sorting ( sorting ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comparator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġresources . map Ġ{ Ġit Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sorted Map ( un equal Compare By ( comparator )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sorting Ġ!= ĠSort ing . DEFAULT Ġ&& Ġ! ascending ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġresources . reversed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRES O URCES _ SCREEN , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sorting Ġby Ġ$ sorting Ġof Ġ${ resources . size } Ġresources Ġtook Ġ$ sort Time Ġmilliseconds " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort Selection AndUpdate Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġthis . selection . toSet () ĊĠĠĠĠĠĠĠ Ġthis . selection Ġ= Ġresources . filter Ġ{ Ġselection . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġscope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Progress Visibility ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . update Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġset Progress Visibility ( isVisible : ĠBoolean , Ġwith Text : ĠString Ġ= Ġ"") Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . set Progress Visibility ( isVisible , Ġwith Text ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }