package Ġcom . example . gallery _ app . ui Classes Ċ Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . graphics . Blend Mode Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . RequestBuilder Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . Multi Transformation Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Center Crop Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Rounded C orners Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġcom . example . gallery _ app . R Ċ import Ġcom . example . gallery _ app . activities . Album Grid Activity Ċ import Ġcom . example . gallery _ app . storage Access . domain . My Photo Album Ċ import Ġkotlinx . android . synt hetic . main . item _ album _ in _ grid . view .* Ċ Ċ class ĠAlbum Grid Adapter ( private Ġval Ġcontext : ĠAlbum Grid Activity , Ġval Ġalbum s : ĠArrayList < My Photo Album >) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Album Grid Adapter . Color ViewHolder >() Ġ{ ĊĠĠĠ Ġvar Ġm ClickListener : ĠMy ClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠAlbum Grid Adapter . Color ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . item _ album _ in _ grid , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠColor ViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠAlbum Grid Adapter . Color ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . album Ġ= Ġalbum s [ position ] ĊĊĠĠĠĠĠĠĠ Ġval Ġrm Ġ= ĠG lide . with ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġloader : ĠRequest Builder < Drawable > Ġ= Ġif Ġ( holder . album . media Objects . size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrm . load ( holder . album . media Objects [ 0 ]. uri ) ĊĠĠĠĠĠĠĠ Ġelse Ġrm . load ( holder . album . uri Long ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent U ris . with App ended Id ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġit ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// due Ġto Ġg lide Ġbeing Ġsmart , Ġit Ġwill Ġwork Ġfor Ġalbum s Ġtaken Ġfrom Ġroom Ġeven Ġif Ġthe Ġthumbnail Ġpicture Ġhas Ġbeen Ġdeleted ĊĠĠĠĠĠĠĠ Ġloader . transform ( Multi Transformation ( Center Crop (), ĠRo unded C orners ( 2 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Drawable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 : ĠG lide Exception ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 : ĠTarget < Drawable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 3 : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Files ", Ġ" load Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource : ĠDrawable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource : ĠDataSource ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder . album . selected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource ?. set Tint ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource ?. set Tint Blend Mode ( Blend Mode . MOD UL ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . update Picture By Selection () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . imageView . drawable . set Tint ( Color . GREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( holder . imageView ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( context . selection Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . checkBox . isChecked Ġ= Ġholder . album . selected ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . checkBox . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . album Name TextView . text Ġ= Ġholder . album . album Name ĊĠĠĠĠĠĠĠ Ġholder . album Count TextView . text Ġ= Ġholder . album . size . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġalbum s . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠColor ViewHolder ( view : ĠView ) Ġ: ĠAbstract Media Object Holder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠimageView : ĠImageView Ġ= Ġview . imageView Album ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠcheckBox : ĠCheckBox Ġ= Ġview . checkBox Album ĊĠĠĠĠĠĠĠ Ġval Ġalbum Name TextView : ĠTextView Ġ= Ġview . album Name TextView ĊĠĠĠĠĠĠĠ Ġval Ġalbum Count TextView : ĠTextView Ġ= Ġview . album Items Count ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġalbum : ĠMy Photo Album ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setOn Long ClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox . setOn Long ClickListener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . holders . add ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġalbum . selected ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . log Clicked View ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ClickListener ?. on Item Click ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Click ( v : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . log Clicked View ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ClickListener ?. on Long Item Click ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUn select s Ġthe Ġphoto Ġand Ġremoves Ġthe Ġcheckbox Ġand Ġthe Ġimage Button ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdisable Selection Mode () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset As Un selected () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMakes Ġthe Ġcheckbox Ġand Ġthe Ġimage Button Ġvisible . ĊĠĠĠĠĠĠĠĠ Ġ* ĠAt Ġthis Ġpoint , Ġall Ġpictures Ġshould Ġbe Ġun selected ; Ġset As Selected () Ġwill Ġbe Ġcalled Ġfrom Ġnow Ġon ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġenable Selection Mode () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġenable Selection Mode () Ġshould Ġhave Ġbeen Ġpreviously Ġcalled ĊĠĠĠĠĠĠĠĠ Ġ* ĠChecks Ġthe Ġcheckbox ĊĠĠĠĠĠĠĠĠ Ġ* Ġadds Ġt int ĊĠĠĠĠĠĠĠĠ Ġ* Ġsets Ġph ote . selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset As Selected () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . drawable . set Tint ( Color . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . drawable . set Tint Blend Mode ( Blend Mode . MOD UL ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalbum . selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġenable Selection Mode () Ġshould Ġhave Ġbeen Ġpreviously Ġcalled ĊĠĠĠĠĠĠĠĠ Ġ* ĠUn checks Ġthe Ġcheckbox ĊĠĠĠĠĠĠĠĠ Ġ* Ġremoves Ġthe Ġt int ĊĠĠĠĠĠĠĠĠ Ġ* Ġsets Ġph ote . selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset As Un selected () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . drawable ?. set Tint List ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalbum . selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġallows Ġclicks Ġevents Ġto Ġbe Ġcaught ĊĠĠĠ Ġfun Ġset ClickListener ( album ItemClickListener : ĠMy ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m ClickListener Ġ= Ġalbum ItemClickListener ĊĠĠĠ Ġ} Ċ }