package Ġcom . leon ard park . pixel . gallery Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroid . view .* Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . load . resource . drawable . Drawable Transition Options Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġcom . leon ard park . pixel . R Ċ import Ġkotlinx . android . synt hetic . main . dialog _ image _ details .* Ċ import Ġkotlinx . android . synt hetic . main . item _ image . view .* Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠGallery Adapter ( ĊĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠ Ġprivate Ġval Ġfull ImageList : ĠArrayList < Gallery Data >, ĊĠ Ġprivate Ġval Ġlistener : ĠGallery Interface , ĊĠ Ġprivate Ġvar Ġmax Selected : ĠInt Ċ ) Ġ: ĠRecyclerView . Adapter < Gallery Adapter . Gallery Holder >() Ġ{ ĊĊĠ Ġprivate Ġval Ġcopy ImageList : ĠArrayList < Gallery Data > Ġ= ĠArrayList () ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġcopy ImageList . addAll ( full ImageList ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠGallery Holder Ġ{ ĊĠĠĠ Ġreturn ĠGallery Holder ( ĊĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠ ĠR . layout . item _ image , ĊĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Selected Count (): ĠInt Ġ= Ġfull ImageList . count Ġ{ Ġit . isSelected Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠGallery Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( max Selected Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( getSelected Count () Ġ>= Ġmax Selected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcopy ImageList . filter Not Ġ{ Ġit . isSelected Ġ}. forEach Ġ{ Ġit . isEnabled Ġ= Ġfalse Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġcopy ImageList . forEach Ġ{ Ġit . isEnabled Ġ= Ġtrue Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġval Ġrequest Listener : ĠRequest Listener < Drawable > Ġ= Ġobject Ġ: ĠRequest Listener < Drawable > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( ĊĠĠĠĠĠĠĠ Ġe : ĠG lide Exception ?, ĊĠĠĠĠĠĠĠ Ġmodel : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable > ?, ĊĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . item View . iv _ image . alpha Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠ Ġholder . item View . iv _ image . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġholder . item View . iv _ image . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġholder . item View . check _ box . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠ Ġresource : ĠDrawable ?, ĊĠĠĠĠĠĠĠ Ġmodel : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable > ?, ĊĠĠĠĠĠĠĠ ĠdataSource : ĠDataSource ?, ĊĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠ Ġ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ} ĊĊĠĠĠ ĠG lide . with ( context ) ĊĠĠĠĠĠ Ġ. load ( Uri . from File ( File ( copy ImageList [ position ]. photo Uri ))) ĊĠĠĠĠĠ Ġ. apply ( RequestOptions . center Crop Transform (). override ( 1 0 0 )) ĊĠĠĠĠĠ Ġ. transition ( Drawable Transition Options . with Cross Fade ()). listener ( request Listener ) ĊĠĠĠĠĠ Ġ. into ( holder . item View . iv _ image ) ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġif Ġ( copy ImageList [ position ]. isEnabled ) Ġ{ ĊĠĠĠĠĠ Ġholder . item View . iv _ image . alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠ Ġholder . item View . iv _ image . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠ Ġholder . item View . check _ box . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġholder . item View . iv _ image . alpha Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠ Ġholder . item View . iv _ image . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠ Ġholder . item View . check _ box . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġholder . item View . check _ box . setImage Resource ( ĊĠĠĠĠĠ Ġif Ġ( copy ImageList [ position ]. isSelected ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ new _ tick ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ new _ empty ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġholder . item View . iv _ image . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it . is Clickable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( max Selected Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Selected Count () Ġ<= Ġmax Selected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy ImageList [ position ]. isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList [ position ]. isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on ItemClickListener ( false , Ġcopy ImageList [ position ]. photo Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . check _ box . setImage Resource ( R . drawable . ic _ new _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getSelected Count () Ġ== Ġ( max Selected Ġ- Ġ 1 ) Ġ&& Ġ! copy ImageList [ position ]. isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList . forEach Ġ{ Ġit . isEnabled Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġitem ) Ġin Ġcopy ImageList . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . isEnabled Ġ&& Ġ! item . isSelected ) Ġnotify Item Changed ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList [ position ]. isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on ItemClickListener ( true , Ġcopy ImageList [ position ]. photo Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . check _ box . setImage Resource ( R . drawable . ic _ new _ tick ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getSelected Count () Ġ== Ġmax Selected Ġ&& Ġcopy ImageList [ position ]. isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList . filter Not Ġ{ Ġit . isSelected Ġ}. forEach Ġ{ Ġit . isEnabled Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġitem ) Ġin Ġcopy ImageList . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! item . isEnabled ) Ġnotify Item Changed ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Selected Count () Ġ> Ġmax Selected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( image Ġin Ġcopy ImageList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList . filter Ġ{ Ġit . isSelected Ġ&& Ġ! it . isEnabled Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . isSelected Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test mo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" getSelected Count Ġ: Ġ${ getSelected Count ()} Ġ; Ġmax Selected Ġ: Ġ$ max Selected " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy ImageList [ position ]. isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList [ position ]. isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . check _ box . setImage Resource ( R . drawable . ic _ new _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ImageList [ position ]. isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . check _ box . setImage Resource ( R . drawable . ic _ new _ tick ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdialog : ĠDialog ? Ġ= Ġnull ĊĠĠĠ Ġholder . item View . iv _ image . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠ Ġdialog Ġ= ĠDialog ( context ) ĊĠĠĠĠĠ Ġif Ġ( dialog Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġcopy ImageList [ position ] ĊĠĠĠĠĠĠĠ Ġdialog ?. request Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠĠĠĠĠ Ġdialog ?. set ContentView ( R . layout . dialog _ image _ details ) ĊĠĠĠĠĠĠĠ Ġdialog ?. window ?. setBackground Drawable ( Color Drawable ( Color . TRANSP ARENT )) ĊĠĠĠĠĠĠĠ ĠG lide . with ( context ). load ( data . photo Uri ). into ( dialog ?. big image !! ) ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . time In Millis Ġ= Ġdata . date Added . to Long () Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġdialog ?. tv _ data !!. text Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġ" Album ĠName Ġ: Ġ${ data . album Name } Ġ\ n ĠDate Ġ: Ġ${ data . getDate Difference ( calendar )}" ĊĠĠĠĠĠĠĠ Ġdialog ?. show () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġholder . item View . iv _ image . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP Ġ|| Ġevent . action Ġ== ĠDrag Event . ACTION _ DROP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog ?. dismiss () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn @ setOn Touch Listener Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġcopy ImageList . size ĊĊĠ Ġclass ĠGallery Holder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ċ }