package Ġcom . labs . pb ro ther . free gallery . fragments Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . core . app . Nav Utils Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . view . Action Mode Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġcom . labs . pb ro ther . free gallery .* Ċ import Ġcom . labs . pb ro ther . free gallery . activities . Image Slide Activity Ċ import Ġcom . labs . pb ro ther . free gallery . adapters . Collection RecyclerView Adapter Ċ import Ġcom . labs . pb ro ther . free gallery . controller . Provider Ċ import Ġcom . labs . pb ro ther . free gallery . controller . TYPE _ TAG Ċ import Ġcom . labs . pb ro ther . free gallery . dialogs . Color ize Dialog Fragment Ċ import Ġcom . labs . pb ro ther . free gallery . dialogs . Tag Dialog Fragment Ċ import Ġcom . labs . pb ro ther . free gallery . extension . columns Ċ import Ġcom . labs . pb ro ther . free gallery . extension . tag Symbol Ċ import Ġcom . labs . pb ro ther . free gallery . u io ther . Item Offset Decoration Ċ import Ġcom . labs . pb ro ther . free gallery . view Models . MainActivity ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ collection .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ collection . view .* Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . image Ċ import Ġorg . jetbrains . ank o . support . v 4 . intent For Ċ import Ġorg . jetbrains . ank o . ui Thread Ċ Ċ private Ġconst Ġval ĠC ID Ġ= Ġ" collection Id " Ċ Ċ class ĠCollection Fragment Ġ: ĠFragment (), ĠCollection RecyclerView Adapter . ViewHolder . ClickListener , ĠColor ize Dialog Fragment . Color Dialog Listener , ĠTag Dialog Fragment . Tag Dialog Listener Ġ{ ĊĊĠĠĠ Ġ// Ġparameters ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcid : ĠString ĊĠĠĠ Ġ// Ġother ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMainActivity ViewModel ĊĠĠĠ Ġ// Ġui ĊĠĠĠ Ġprivate Ġvar Ġrv : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠCollection RecyclerView Adapter ĊĠĠĠ Ġprivate Ġvar Ġaction Mode : ĠAction Mode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġaction Mode Callback Ġ= ĠAction Mode Callback () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsafe Args Ġ= ĠCollection Fragment Args . from Bundle ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcid Ġ= Ġsafe Args . collection Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( MainActivity ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Collection ( cid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Items () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( rv Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Ġ= Ġinflater . inflate ( R . layout . fragment _ collection , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre cycler Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Count Ġ= Ġcolumns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv ?. collection _ r cl Picture Collection ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Item Offset Decoration ( activity Ġas ĠContext , ĠR . dim en . collection _ picture _ padding , Ġcol Count )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġandroidx . recyclerview . widget . Grid LayoutManager ( activity Ġas ĠContext , Ġcol Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Save Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv ?. swipe Refresh Collection ?. setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! swipe Refresh Collection . is Refresh ing ) Ġswipe Refresh Collection . is Refresh ing Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠviewModel . items . observe ( this , ĠObserver Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠCollection RecyclerView Adapter ( this @ Collection Fragment , Ġactivity Ġas ĠContext , Ġitems , ĠProvider ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection _ r cl Picture Collection . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( swipe Refresh Collection . is Refresh ing ) Ġswipe Refresh Collection . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġcollection _ share Floating ActionButton . setOnClickListener Ġ{ Ġtag () Ġ} ĊĠĠĠĠĠĠĠ Ġcollection _ share Floating ActionButton . image Ġ= Ġactivity ?. tag Symbol () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠOn Collection Fragment Interaction Listener ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġcontext Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( context . toString () Ġ+ Ġ" Ġmust Ġimplement ĠOn Main Fragment Interaction Listener ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () Ċ // ĠĠĠĠĠĠĠ Ġlistener Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cid Ġ== ĠgetString ( R . string . trash Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ collection _ trash , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ collection , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . collection Type Ġ== ĠTYPE _ TAG Ġ&& Ġcid Ġ!= ĠgetString ( R . string . timeline Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . menu _ delete Tag )?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Utils . navigate Up From Same Task ( activity Ġas ĠActivity ) Ġ// ĠTODO Ġ- Ġdoes Ġthat Ġwork ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ delete Tag Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Tag () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Host Fragment . find Nav Controller ( this ). navigate ( Collection Fragment Directions . action Go To Overview ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ refresh Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ color ize Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor ize Dialog Fragment (). show ( child FragmentManager , Ġ" color ized ialog ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ reset Color Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove Color () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ trash _ empty Trash Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Trash () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ collection Sort Asc Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Sort Asc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ collection Sort Desc Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Sort Desc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ collection Zoom View In Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Zoom (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ collection Zoom View Out Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Zoom (+ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ selectAll Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe Refresh Collection ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Refresh ing ) Ġis Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Collection ( cid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Items () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Drawer Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Collection ?. is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġempty Trash () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( activity Ġas ĠContext ) ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage ( R . string . Em ty Trash Question ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button ( R . string . Em tp y Trash Ok ) Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . empty Trash () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Host Fragment . find Nav Controller ( this @ Collection Fragment ). navigate ( Collection Fragment Directions . action Go To Overview ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . set Negative Button ( R . string . Empty Trash Cancel ) Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuser Ġcancel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Zoom ( zoom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcol Count Ġ= Ġcolumns ĊĠĠĠĠĠĠĠ Ġcol Count Ġ+= Ġzoom ĊĠĠĠĠĠĠĠ Ġif Ġ( col Count Ġ< Ġ 1 ) Ġcol Count Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprefs . columns In Por trait Ġ= Ġcol Count ĊĠĠĠĠĠĠĠ Ġcollection _ r cl Picture Collection . layout Manager Ġ= Ġandroidx . recyclerview . widget . Grid LayoutManager ( activity , Ġcol Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect All () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġaction Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġ( activity Ġas ĠAppCompatActivity ). start Support Action Mode ( action Mode Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . clear Selection () ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġadapter . item Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . toggle Selection ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow Selection Count In Action Mode ( i ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshare () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġur is Ġ= ĠviewModel . uris To Share ( viewModel . selected Items ( adapter . getSelected Items ())) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image / jpg " ĊĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( uris . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ STREAM , Ġur is [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ SEND _ MULTIPLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . put Parcelable ArrayList Extra ( Intent . EXTRA _ STREAM , Ġur is ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , Ġresources . getString ( R . string . share ins ult ))) ĊĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunt ag () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! swipe Refresh Collection . is Refresh ing ) Ġswipe Refresh Collection . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . unt ag ( viewModel . selected Items ( adapter . getSelected Items ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . remove Multiple ( adapter . getSelected Items ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Collection . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCallable Ġfrom Ġtrash Ġto Ġrestore Ġitems ĊĠĠĠ Ġprivate Ġfun Ġrestore () Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe Refresh Collection . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . restore Items ( viewModel . selected Items ( adapter . getSelected Items ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStarts Ġdialog Ġwhich Ġasks Ġfor Ġconfirmation ĊĠĠĠ Ġ// ĠCallback Ġmethod Ġdelete Ok () Ġdoes Ġthe Ġactual Ġdeletion Ġjob ĊĠĠĠ Ġprivate Ġfun Ġdelete () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeletion Items Ġ= ĠviewModel . selected Items ( adapter . getSelected Items ()) ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġmight Ġtake Ġsome Ġtime , Ġinform Ġthe Ġuser ĊĠĠĠĠĠĠĠ Ġif Ġ( deletion Items . count () Ġ> Ġ 2 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , ĠgetString ( R . string . Tr ashing Started ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter . remove Multiple ( adapter . getSelected Items ()) ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠviewModel . trash Items ( deletion Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Snackbar Ġ= ĠSn ackbar . make ( collection Parent Coordinator , ĠR . string . Delete Snackbar Single Info , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Snackbar . setAction ( R . string . Delete Snackbar Undo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Collection . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . undo Tr ashing ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh Items () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Snackbar . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġfunctionality ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// ĠStarts Ġtag Ġdialog ĊĠĠĠ Ġ// ĠCallback Ġmethod Ġcolor Ok Ġdoes Ġthe Ġactual Ġwork ĊĠĠĠ Ġprivate Ġfun Ġtag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstd Ġ= ĠTag Dialog Fragment () ĊĠĠĠĠĠĠĠ Ġstd . set Tags ( viewModel . tags ) ĊĠĠĠĠĠĠĠ Ġstd . show ( child FragmentManager , Ġ" tag dialog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Mode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Selection ( position ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent For < Image Slide Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ COLLECTION ID Ġto Ġcid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ ITEM _ INDEX Ġto Ġposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ START ING _ POINT Ġto ĠSTART ED _ FROM _ ACTIVITY ), ĠIMAGE _ SL IDE _ ACTIVITY _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Long Clicked ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Mode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġ( activity Ġas ĠAppCompatActivity ). start Support Action Mode ( action Mode Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoggle Selection ( position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Selection ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . toggle Selection ( position ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġadapter . selected ItemCount ĊĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Selection Count In Action Mode ( count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Selection Count In Action Mode ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Mode ?. title Ġ= Ġresources . getString ( R . string . collection Selection ) Ġ+ Ġ" Ġ" Ġ+ Ġcount . toString () Ġ+ Ġ" Ġ/ Ġ" Ġ+ Ġadapter . item Count . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDialog ĠCallback s ĊĊĠĠĠ Ġoverride Ġfun Ġcolor Cancel () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġcolor Ok ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . color ize Collection ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( activity , Ġ" Set Ġcolor Ġto Ġ" Ġ+ Ġcolor . toString (), ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtag Cancel () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġtag Ok ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= ĠviewModel . selected Items ( adapter . getSelected Items ()) ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . tag Items ( selection , Ġtag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠAction Mode Callback Ġ: ĠAction Mode . Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Action Mode ( mode : ĠAction Mode , Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this @ Collection Fragment . cid Ġ== ĠgetString ( R . string . trash Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode . menu Inflater . inflate ( R . menu . menu _ multi image selected _ trash , Ġmenu ) Ġ// ĠTODO Ġcreate Ġmenu Ġfor Ġsel ction Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode . menu Inflater . inflate ( R . menu . menu _ multi image selected , Ġmenu ) Ġ// ĠTODO Ġcreate Ġmenu Ġfor Ġsel ction Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . collection Type Ġ== ĠTYPE _ TAG Ġ&& ĠviewModel . collection Id Ġ!= ĠgetString ( R . string . timeline Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . multi image selection _ menu _ unt ag )?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection _ share Floating ActionButton . visibility Ġ= ĠView . VISIBLE Ġ// ĠTODO Ġ- Ġbetter Ġway Ġto Ġmake Ġit Ġvisible ? ĠA Ġlittle Ġanimated ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Prepare Action Mode ( mode : ĠAction Mode , Ġmenu : ĠMenu ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action Item Clicked ( mode : ĠAction Mode , Ġitem : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . multi image selection _ menu _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . multi image selection _ menu _ unt ag Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunt ag () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . multi image selection _ menu _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . trash _ multi image selection _ menu Restore Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy Action Mode ( mode : ĠAction Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . clear Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection _ share Floating ActionButton . visibility Ġ= ĠView . IN VISIBLE Ġ// ĠTODO Ġ- Ġbetter Ġway Ġto Ġmake Ġit Ġinvisible ? ĠA Ġlittle Ġanimated ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġthis Ġfactory Ġmethod Ġto Ġcreate Ġa Ġnew Ġinstance Ġof ĊĠĠĠĠĠĠĠĠ Ġ* Ġthis Ġfragment Ġusing Ġthe Ġprovided Ġparameters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcid ĠId Ġfor Ġcollection Ġto Ġla od . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew Ġinstance Ġof Ġfragment ĠCollection Fragment . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( cid : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( CID , Ġcid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ