/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠV ital iy ĠSy cho v . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . jav av ir ys . medi ap layer . presentation . adapter Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . jav av ir ys . medi ap layer . R Ċ import Ġcom . jav av ir ys . medi ap layer . core . entity . Playing Status Ċ import Ġcom . jav av ir ys . medi ap layer . core . entity . Track Ċ import Ġcom . jav av ir ys . medi ap layer . util . extension . inflate Ċ Ċ class ĠTrack Adapter ( ĊĠĠĠ Ġprivate Ġval Ġon Item Click : Ġ( item : ĠTrack , Ġitems : ĠList < Track >) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġon Item Long Click : Ġ( item : ĠTrack ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . Adapter < Track ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġitems Ġ= Ġmutable ListOf < Track >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĠTrack ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent . inflate ( R . layout . view _ track _ item ), ĊĠĠĠĠĠĠĠ Ġ{ Ġon Item Click ( it , Ġitems ) Ġ}, ĊĠĠĠĠĠĠĠ Ġon Item Long Click ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠTrack ViewHolder , Ġposition : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġholder . bind ( items [ position ]) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems . size ĊĊĠĠĠ Ġfun Ġadd Item ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound Item Ġ= Ġitems . find Ġ{ Ġtrack . id Ġ== Ġit . id Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( found Item Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( track ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( items . last Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Item ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track . id Ġ== Ġitem . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġde selectAll Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . selected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġitems . iterator () ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator . next (). id Ġ== Ġtrack . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Playing Status ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . id Ġ== Ġtrack . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track . playing Status Ġ== Ġit . playing Status ) Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . playing Status Ġ= Ġtrack . playing Status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . playing Status Ġ== ĠPlay ing Status . STATE _ STOP ) Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . playing Status Ġ= ĠPlay ing Status . STATE _ STOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetItem Index ById ( id : ĠLong ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġtrack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġtrack . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} Ċ }