package Ġio . pl ast ique . collections Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . PopupMenu Ċ import Ġandroidx . core . text . Html Compat Ċ import Ġandroidx . core . text . html Encode Ċ import Ġcom . github . tech no ir 4 2 . android . extensions . disable Change Animations Ċ import Ġcom . github . tech no ir 4 2 . android . extensions . instantiate Ċ import Ġcom . github . tech no ir 4 2 . glide . pre loader . List Pre loader Ċ import Ġcom . github . tech no ir 4 2 . kotlin . extensions . plus Ċ import Ġcom . github . tech no ir 4 2 . rx java 2 . extensions . pair wise With Previous Ċ import Ġcom . google . android . flex box . Flex box LayoutManager Ċ import Ġio . pl ast ique . collections . Collections Event . Create Folder Event Ċ import Ġio . pl ast ique . collections . Collections Event . Delete Folder Event Ċ import Ġio . pl ast ique . collections . Collections Event . Load More Event Ċ import Ġio . pl ast ique . collections . Collections Event . Refresh Event Ċ import Ġio . pl ast ique . collections . Collections Event . Retry Click Event Ċ import Ġio . pl ast ique . collections . Collections Event . Snackbar Shown Event Ċ import Ġio . pl ast ique . collections . Collections Event . Undo Delete Folder Event Ċ import Ġio . pl ast ique . collections . databinding . Fragment Collections Binding Ċ import Ġio . pl ast ique . collections . folders . Folder Ċ import Ġio . pl ast ique . core . Base Fragment Ċ import Ġio . pl ast ique . core . Expand able Toolbar Layout Ċ import Ġio . pl ast ique . core . Scroll able To Top Ċ import Ġio . pl ast ique . core . content . Content State Controller Ċ import Ġio . pl ast ique . core . dialogs . Confirmation Dialog Fragment Ċ import Ġio . pl ast ique . core . dialogs . Input Dialog Fragment Ċ import Ġio . pl ast ique . core . dialogs . On Confirm Listener Ċ import Ġio . pl ast ique . core . dialogs . On Input Dialog Result Listener Ċ import Ġio . pl ast ique . core . dialogs . Progress Dialog Controller Ċ import Ġio . pl ast ique . core . image . Image Loader Ċ import Ġio . pl ast ique . core . image . Transform Type Ċ import Ġio . pl ast ique . core . lists . End less Scroll Listener Ċ import Ġio . pl ast ique . core . lists . Grid Params Ċ import Ġio . pl ast ique . core . lists . Grid Params Calculator Ċ import Ġio . pl ast ique . core . lists . Indexed Item Ċ import Ġio . pl ast ique . core . lists . Item Size Callback Ċ import Ġio . pl ast ique . core . lists . ListItem Ċ import Ġio . pl ast ique . core . lists . List Update Data Ċ import Ġio . pl ast ique . core . lists . calculate Diff Ċ import Ġio . pl ast ique . core . mv vm . viewModel Ċ import Ġio . pl ast ique . core . navigation . navigation Context Ċ import Ġio . pl ast ique . core . sn ackbar . Snackbar Controller Ċ import Ġio . pl ast ique . dev i ations . list . De viation Item Ċ import Ġio . pl ast ique . dev i ations . list . Image De viation Item Ċ import Ġio . pl ast ique . dev i ations . list . Image Helper Ċ import Ġio . pl ast ique . inject . getComponent Ċ import Ġio . pl ast ique . main . Main Page Ċ import Ġio . pl ast ique . util . Size Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ Ċ class ĠCollections Fragment Ġ: ĠBase Fragment (), ĊĠĠĠ ĠMain Page , ĊĠĠĠ ĠScroll able To Top , ĊĠĠĠ ĠOn Confirm Listener , ĊĠĠĠ ĠOn Input Dialog Result Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCollections ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Collections Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcollections Adapter : ĠCollections Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġon Scroll Listener : ĠEnd less Scroll Listener ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent State Controller : ĠContent State Controller ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprogress Dialog Controller : ĠProgress Dialog Controller ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsn ackbar Controller : ĠSn ackbar Controller ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ ĠviewModel . navigator . attach ( navigation Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Collections Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġrequire Activity (). window Manager . default Display . get Metrics ( display Metrics ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfolder Grid Params Ġ= ĠGrid Params Calculator . calculate Grid Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdisplay Metrics . width Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Item Width Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . collections _ folder _ min _ width ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Spacing Ġ= Ġresources . get Dimension Pixel Offset ( R . dim en . collections _ folder _ spacing ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight To Width Ratio Ġ= Ġ 0 . 7 5 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeviation Grid Params Ġ= ĠGrid Params Calculator . calculate Grid Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdisplay Metrics . width Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Item Width Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . dev i ations _ list _ min _ cell _ size ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Spacing Ġ= Ġresources . get Dimension Pixel Offset ( R . dim en . dev i ations _ grid _ spacing )) ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Loader Ġ= ĠImage Loader . from ( this ) ĊĠĠĠĠĠĠĠ Ġcollections Adapter Ġ= ĠCollections Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Loader Ġ= Ġimage Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Size Callback Ġ= ĠCollections Item Size Callback ( folder Grid Params , Ġdeviation Grid Params ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Folder Click Ġ= Ġ{ Ġfolder Id , Ġfolder Name Ġ-> ĠviewModel . navigator . open Collection Folder ( folder Id , Ġfolder Name ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Folder Long Click Ġ= Ġ{ Ġfolder , ĠitemView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Folder PopupMenu ( folder , ĠitemView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon De viation Click Ġ= Ġ{ Ġdeviation Id Ġ-> ĠviewModel . navigator . open De viation ( dev iation Id ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġon Scroll Listener Ġ= ĠEnd less Scroll Listener ( LOAD _ MORE _ THRESHOLD _ ROWS Ġ* Ġdeviation Grid Params . column Count ) Ġ{ ĠviewModel . dispatch ( Load More Event ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . collections . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġcollections Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠFlex box LayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Scroll Listener ( on Scroll Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Change Animations () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Pre loader ( image Loader , Ġcollections Adapter , Ġfolder Grid Params , Ġdeviation Grid Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe To Lifecycle ( lifecycle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach ( binding . collections ) ĊĊĠĠĠĠĠĠĠ Ġbinding . empty . on Button Click Ġ= Ġ{ ĠviewModel . dispatch ( Retry Click Event ) Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . refresh . setOn Refresh Listener Ġ{ ĠviewModel . dispatch ( Refresh Event ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontent State Controller Ġ= ĠContent State Controller ( this , Ġbinding . refresh , Ġbinding . progress , Ġbinding . empty ) ĊĠĠĠĠĠĠĠ Ġprogress Dialog Controller Ġ= ĠProgress Dialog Controller ( require Context (), Ġchild FragmentManager ) ĊĠĠĠĠĠĠĠ Ġsn ackbar Controller Ġ= ĠSn ackbar Controller ( this , Ġbinding . refresh ) ĊĠĠĠĠĠĠĠ Ġsn ackbar Controller . on Action Click Ġ= Ġ{ Ġaction Data Ġ-> ĠviewModel . dispatch ( Undo Delete Folder Event ( action Data Ġas ĠString )) Ġ} ĊĠĠĠĠĠĠĠ Ġsn ackbar Controller . on Snackbar Shown Ġ= Ġ{ ĠviewModel . dispatch ( Snackbar Shown Event ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġarguments ?. getString ( ARG _ USERNAME ) ĊĠĠĠĠĠĠĠ ĠviewModel . init ( username ) ĊĠĠĠĠĠĠĠ ĠviewModel . state ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. pair wise With Previous () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ+ Ġcalculate Diff ( it . second ?. list State ?. items , Ġit . first . list State . items ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġrender State ( it . first , Ġit . third ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dispose On Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . fragment _ collections , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ= Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR . id . collections _ action _ create _ folder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Create Folder Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Confirm ( dialog : ĠConfirm ation Dialog Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( dialog . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDIALOG _ DELETE _ FOLDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Id Ġ= Ġdialog . require Arguments (). getString ( ARG _ DIALOG _ FOLDER _ ID ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Name Ġ= Ġdialog . require Arguments (). getString ( ARG _ DIALOG _ FOLDER _ NAME ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . dispatch ( Delete Folder Event ( folder Id , Ġfolder Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Input Dialog Result ( dialog : ĠInput Dialog Fragment , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( dialog . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDIALOG _ CREATE _ FOLDER Ġ-> ĠviewModel . dispatch ( Create Folder Event ( text . trim ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender State ( state : ĠCollections ViewState , Ġlist Update Data : ĠList Update Data < ListItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( state . show Menu ) ĊĊĠĠĠĠĠĠĠ Ġcontent State Controller . state Ġ= Ġstate . content State ĊĠĠĠĠĠĠĠ Ġbinding . empty . state Ġ= Ġstate . empty State ĊĠĠĠĠĠĠĠ Ġbinding . refresh . is Refresh ing Ġ= Ġstate . list State . is Refresh ing ĊĠĠĠĠĠĠĠ Ġon Scroll Listener . isEnabled Ġ= Ġstate . list State . is Paging Enabled ĊĠĠĠĠĠĠĠ Ġprogress Dialog Controller . is Shown Ġ= Ġstate . show Progress Dialog ĊĠĠĠĠĠĠĠ Ġstate . sn ackbar State ?. let ( sn ackbar Controller :: show Snackbar ) ĊĊĠĠĠĠĠĠĠ Ġlist Update Data . apply To ( collections Adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Folder PopupMenu ( folder : ĠFolder , ĠitemView : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! folder . is De letable ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġpopup Ġ= ĠPopup Menu ( require Context (), ĠitemView ) ĊĠĠĠĠĠĠĠ Ġpopup . inflate ( R . menu . collections _ folder _ popup ) ĊĠĠĠĠĠĠĠ Ġpopup . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . collections _ action _ delete _ folder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( folder . isNotEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Delete Folder Dialog ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . dispatch ( Delete Folder Event ( folder . id . id , Ġfolder . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpopup . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Create Folder Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġchild FragmentManager . fragment Factory . instantiate < Input Dialog Fragment >( require Context (), Ġargs Ġ= ĠInput Dialog Fragment . new Args ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠR . string . collections _ action _ create _ folder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= ĠR . string . collections _ folder _ name _ hint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button Ġ= ĠR . string . collections _ button _ create , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength Ġ= ĠF OLDER _ NAME _ MAX _ LENGTH )) ĊĠĠĠĠĠĠĠ Ġdialog . show ( child FragmentManager , ĠDIALOG _ CREATE _ FOLDER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Delete Folder Dialog ( folder : ĠFolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġchild FragmentManager . fragment Factory . instantiate < Confirmation Dialog Fragment >( require Context (), Ġargs Ġ= ĠConfirm ation Dialog Fragment . new Args ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Id Ġ= ĠR . string . collections _ dialog _ delete _ folder _ title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠHtml Compat . from Html ( getString ( R . string . collections _ dialog _ delete _ folder _ message , Ġfolder . name . html Encode (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Quantity String ( R . plurals . common _ dev i ations , Ġfolder . size , Ġfolder . size )), Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive ButtonText Id Ġ= ĠR . string . common _ button _ delete , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative ButtonText Int Ġ= ĠR . string . common _ button _ cancel ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ DIALOG _ FOLDER _ ID , Ġfolder . id . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ DIALOG _ FOLDER _ NAME , Ġfolder . name ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġdialog . show ( child FragmentManager , ĠDIALOG _ DELETE _ FOLDER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Pre loader ( ĊĠĠĠĠĠĠĠ Ġimage Loader : ĠImage Loader , ĊĠĠĠĠĠĠĠ Ġadapter : ĠCollections Adapter , ĊĠĠĠĠĠĠĠ Ġfolder Grid Params : ĠGrid Params , ĊĠĠĠĠĠĠĠ Ġde viations Grid Params : ĠGrid Params ĊĠĠĠ Ġ): ĠList Pre loader Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠList Pre loader . Callback Ġ{ Ġposition , Ġpre loader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġitem Ġ= Ġadapter . items [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFolder Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . folder . thumbnail Url ?. let Ġ{ Ġthumbnail Url Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Size Ġ= Ġfolder Grid Params . getItem Size ( item . index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġimage Loader . load ( thumbnail Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. params Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransforms Ġ+= ĠTransform Type . Center Crop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Pre load Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre loader . preload ( request , Ġitem Size . width , Ġitem Size . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImage De viation Item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Size Ġ= Ġde viations Grid Params . getItem Size ( item . index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠImage Helper . choose Thumbnail ( item . thumb nails , Ġitem Size . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġimage Loader . load ( image . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. params Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Source Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Pre load Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre loader . preload ( request , Ġitem Size . width , Ġitem Size . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠList Pre loader ( image Loader . glide , Ġcallback , ĠMAX _ PRE LOAD _ ROWS Ġ* Ġde viations Grid Params . column Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ= ĠR . string . collections _ title ĊĊĠĠĠ Ġoverride Ġfun Ġcreate AppBar Views ( parent : ĠExpand able Toolbar Layout ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscroll To Top () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . collections . scrollTo Position ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinject Dependencies () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Component < Collections Fragment Component >(). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠCollections Item Size Callback ( private Ġval Ġfolder Params : ĠGrid Params , Ġprivate Ġval Ġdeviation Params : ĠGrid Params ) Ġ: ĠItem Size Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Column Count ( item : ĠIndexed Item ): ĠInt Ġ= Ġwhen Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFolder Item Ġ-> Ġfolder Params . column Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDe viation Item Ġ-> Ġdeviation Params . column Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected Ġitem Ġ${ item . java Class }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Size ( item : ĠIndexed Item ): ĠSize Ġ= Ġwhen Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFolder Item Ġ-> Ġfolder Params . getItem Size ( item . index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDe viation Item Ġ-> Ġdeviation Params . getItem Size ( item . index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected Ġitem Ġ${ item . java Class }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ USERNAME Ġ= Ġ" username " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ DIALOG _ FOLDER _ ID Ġ= Ġ" folder _ id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ DIALOG _ FOLDER _ NAME Ġ= Ġ" folder _ name " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDIALOG _ CREATE _ FOLDER Ġ= Ġ" dialog . create _ folder " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDIALOG _ DELETE _ FOLDER Ġ= Ġ" dialog . delete _ folder " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠF OLDER _ NAME _ MAX _ LENGTH Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOAD _ MORE _ THRESHOLD _ ROWS Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ PRE LOAD _ ROWS Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Args ( username : ĠString ?): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ USERNAME , Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ