package Ġdo _ f . com . spot ish are . adapters Ċ Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġdo _ f . com . spot ish are . App Ċ Ċ import Ġdo _ f . com . spot ish are . R Ċ import Ġdo _ f . com . spot ish are . databinding . Adapter Queue Binding Ċ import Ġdo _ f . com . spot ish are . databinding . Adapter Queue Now Binding Ċ import Ġdo _ f . com . spot ish are . databinding . Adapter Queue Title Binding Ċ import Ġdo _ f . com . spot ish are . model . Queue Ċ import Ġjava . util .* Ċ Ċ class ĠQueue Adapter ( val Ġg lide : ĠRequest Manager ) Ġ: ĠRecyclerView . Adapter < Queue Adapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar Ġitems Ġ: ĠMutable List < Queue > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval ĠTAG Ġ= Ġ" Queue Adapter " ĊĠĠĠ Ġprivate Ġvar Ġcallback Ġ: Ġ(( isSelected : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ QUEUE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ TITLE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ NOW Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( p 0 : ĠViewGroup , Ġp 1 : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Item ViewType Ġ= Ġ$ p 1 ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( p 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ QUEUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ: ĠAdapter Queue Binding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( p 0 . context ), ĠR . layout . adapter _ queue , Ġp 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠQueue ViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ TITLE Ġ-> Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ: ĠAdapter Queue Title Binding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( p 0 . context ), ĠR . layout . adapter _ queue _ title , Ġp 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTitle ViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ NOW Ġ-> Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ: ĠAdapter Queue Now Binding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( p 0 . context ), ĠR . layout . adapter _ queue _ now , Ġp 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNow ViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ: ĠAdapter Queue Binding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( p 0 . context ), ĠR . layout . adapter _ queue , Ġp 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠQueue ViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. item ViewType ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġitems . size ĊĊĠĠĠ Ġfun Ġinit Data (_ items Ġ: ĠMutable List < Queue > Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġ_ items ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Item ( data Ġ: ĠQueue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( data ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( items . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Now Playing ( data : ĠQueue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems [ 1 ] Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . key Ġ== Ġkey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Select Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġitems . iterator () ĠĠĠĠĠ Ġ// Ġit Ġwill Ġreturn Ġiterator ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . firebase Db . child ( App . room Code ). child ( name . key ). remove Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Item Move ( from : ĠInt , Ġto : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCollections . swap ( items , Ġfrom , Ġto ) ĊĠĠĠĠĠĠĠ Ġnotify Item Moved ( from , Ġto ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Release Item Move ( from : ĠInt , Ġto : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Release Item Move : Ġ$ from Ġ-> Ġ$ to ") Ċ // ĠĠĠĠĠĠĠ Ġval Ġq From Ġ: ĠQueue Ġ= Ġitems [ from ] Ċ // ĠĠĠĠĠĠĠ Ġval Ġq To Ġ: ĠQueue Ġ= Ġitems [ to ] Ċ // ĠĠĠĠĠĠĠ Ġval Ġchild Updates Ġ= ĠHashMap < String , ĠAny >() Ċ // ĠĠĠĠĠĠĠ Ġval Ġkey From Ġ= Ġq From . key Ċ // ĠĠĠĠĠĠĠ Ġval Ġkey To Ġ= Ġq To . key Ċ // ĠĠĠĠĠĠĠ Ġval Ġroom Code Ġ= ĠApp . room Code Ċ // Ċ // ĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"$ from Ġ: Ġ$ room Code /$ key From Ġ-> Ġ${ q To . song }") Ċ // ĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"$ to Ġ: Ġ$ room Code /$ key To Ġ-> Ġ${ q From . song }") Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ//@ TODO Ġger er Ġl ' update Ġde Ġqueue Ġavec Ġune Ġvariable Ġde Ġposition Ġst ocker Ġen Ġb dd Ċ // ĠĠĠĠĠĠĠ Ġchild Updates [" $ room Code /$ key From "] Ġ= Ġq To Ċ // ĠĠĠĠĠĠĠ Ġchild Updates [" $ room Code /$ key To "] Ġ= Ġq From Ċ // ĠĠĠĠĠĠĠ ĠApp . firebase Db . update Children ( child Updates ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġp 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems [ p 1 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . item ViewType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ QUEUE Ġ-> Ġbind Queue ( holder Ġas ĠQueue ViewHolder , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ TITLE Ġ-> Ġbind Title ( holder Ġas ĠTitle ViewHolder , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ NOW Ġ-> Ġbind Now ( holder Ġas ĠNow ViewHolder , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Queue ( holder : ĠQueue ViewHolder , Ġit : ĠQueue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . binding . selection . setOn Checked ChangeListener ( null ) ĊĠĠĠĠĠĠĠ Ġholder . binding . song Name . text Ġ= Ġit . song ĊĠĠĠĠĠĠĠ Ġholder . binding . song Artist Album . text Ġ= Ġit . artist ĊĠĠĠĠĠĠĠ Ġholder . binding . explicit Ġ= Ġit . explicit ĊĠĠĠĠĠĠĠ Ġholder . binding . selection . isChecked Ġ= Ġit . selection ĊĠĠĠĠĠĠĠ Ġholder . binding . selection . setOn Checked ChangeListener Ġ{ Ġ_, Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder . adapter Position Ġ< Ġitems . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ holder . adapter Position ]. selection Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. invoke ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Now ( holder : ĠNow ViewHolder , Ġit : ĠQueue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġg lide . load ( it . bmp ). into ( holder . binding . cover ) ĊĠĠĠĠĠĠĠ Ġholder . binding . song Name . text Ġ= Ġit . song ĊĠĠĠĠĠĠĠ Ġholder . binding . song Artist Album . text Ġ= Ġit . artist ĊĠĠĠĠĠĠĠ Ġholder . binding . explicit Ġ= Ġit . explicit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Title ( holder : ĠTitle ViewHolder , Ġit : ĠQueue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . binding . title . text Ġ= Ġit . title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Checked Listener (_ call Ġ: Ġ( s : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback Ġ= Ġ_ call ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠViewHolder ( val ĠitemView Ġ: ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) ĊĠĠĠ Ġclass ĠNow ViewHolder ( val Ġbinding Ġ: ĠAdapter Queue Now Binding ) Ġ: ĠViewHolder ( binding . root ) ĊĠĠĠ Ġclass ĠQueue ViewHolder ( val Ġbinding Ġ: ĠAdapter Queue Binding ) Ġ: ĠViewHolder ( binding . root ) ĊĠĠĠ Ġclass ĠTitle ViewHolder ( val Ġbinding Ġ: ĠAdapter Queue Title Binding ) Ġ: ĠViewHolder ( binding . root ) Ċ }