package Ġtech . so it . quiet . ui . adapter Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . core . view . update LayoutParams Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġorg . green robot . event bus . Thread Mode Ċ import Ġtech . so it . quiet . AppContext Ċ import Ġtech . so it . quiet . R Ċ import Ġtech . so it . quiet . model . vo . Music Ċ import Ġtech . so it . quiet . model . vo . Play List Detail Ċ import Ġtech . so it . quiet . model . vo . User Ċ import Ġtech . so it . quiet . player . Music Player Manager Ċ import Ġtech . so it . quiet . player . playlist . Playlist Ċ import Ġtech . so it . quiet . ui . activity . Music Player Activity Ċ import Ġtech . so it . quiet . ui . adapter . view holder .* Ċ import Ġtech . so it . quiet . utils . component . log Ċ import Ġtech . so it . quiet . utils . component . support . attr Value Ċ import Ġtech . so it . quiet . utils . component . support . px Ċ import Ġtech . so it . quiet . utils . component . support . string Ċ import Ġtech . so it . quiet . utils . event . Window Insets Event Ċ Ċ open Ġclass ĠMusic ListAdapter 2 Ġ: ĠRecyclerView . Adapter < Base ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ M US IC Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ HEADER Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ LIST _ DETAIL Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ PLACE HOLDER Ġ= Ġ 3 ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHEADER æķ° çĽ® ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠHEADER _ COUNT Ġ= Ġ 2 ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprotected Ġval Ġmus ics Ġ= ĠArrayList < Music >() ĊĊĠĠĠ Ġprotected Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġvar Ġcolor Primary : ĠInt Ġ= ĠApp Context . attr Value ( R . attr . color Primary ) ĊĊĠĠĠ Ġprivate Ġvar Ġin sets Top : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åľ¨ åĪĹè¡¨ å¤´ å±ķç¤º æĶ¶ èĹı æĮīéĴ® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġis Show Subscribe Button : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŃ¤ éŁ³ ä¹Ĳ åĪĹè¡¨ æĺ¯åĲ¦ å·²ç»ı è¢« æĶ¶ èĹı äºĨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġis Sub scribed : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġplaylist : ĠPlay List Detail ? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġvar Ġis Preview Mode Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵåīį æŃ£åľ¨ æĴŃæĶ¾ çļĦ éŁ³ ä¹Ĳ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġplaying Music : ĠMusic ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åįł ä½į view çļĦ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġplaceholder Height : ĠInt Ġ= Ġ 3 0 0 . px ĊĊĠĠĠ Ġopen Ġval Ġtoken Ġget () Ġ= Ġplaylist ?. getToken () Ġ?: ĠPlaylist . TOKEN _ EMPTY ĊĊĠĠĠ Ġopen Ġval Ġtrack Count Ġget () Ġ= Ġplaylist ?. get Track Count () Ġ?: Ġ 0 ĊĊĠĠĠ Ġopen Ġval Ġmusic Index Offset Ġget () Ġ= ĠHEADER _ COUNT ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To RecyclerView ( re cyclerView ) ĊĠĠĠĠĠĠĠ Ġthis . re cyclerView Ġ= Ġre cyclerView ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From RecyclerView ( re cyclerView ) ĊĠĠĠĠĠĠĠ Ġthis . re cyclerView Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å±ķç¤º éŁ³ ä¹Ĳ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġshow List ( mus ics : ĠList < Music >) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Preview Mode Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġthis . mus ics . clear () ĊĠĠĠĠĠĠĠ Ġthis . mus ics . addAll ( mus ics ) ĊĊĠĠĠĠĠĠĠ Ġ// check Ġcurrent Ġplaying Ġmusic ĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġ== ĠMusic Player Manager . music Player . playlist . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaying Music Ġ= ĠMusic Player Manager . music Player . playlist . current ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpreview () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Preview Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Preview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġshow List ( user : ĠUser ?, Ġplaylist : ĠPlay List Detail ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . playlist Ġ= Ġplaylist ĊĊĠĠĠĠĠĠĠ Ġis Show Subscribe Button Ġ= Ġuser Ġ!= Ġnull Ġ&& Ġuser . getId () Ġ!= Ġplaylist . get Creator (). getId () ĊĠĠĠĠĠĠĠ Ġis Sub scribed Ġ= Ġuser Ġ!= Ġnull Ġ&& Ġuser . getId () Ġ!= Ġplaylist . get Creator (). getId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġplaylist . is Sub scribed () ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( playlist . get Tracks () Ġ== ĠPlay List Detail . NONE _ TRACK S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow List ( playlist . get Tracks ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ M US IC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic ViewHolder ( LayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . item _ music _ 1 , Ġparent , Ġfalse )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ HEADER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠMusic List Header ViewHolder ( LayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . header _ music _ list , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . set Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribed Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay All Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mus ics . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Player Manager . play ( token , Ġmus ics [ 0 ], Ġmus ics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( parent . context , Ġstring ( R . string . toast _ no _ music _ to _ play ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ LIST _ DETAIL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠPlay List Detail ViewHolder ( LayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . header _ play _ list _ detail , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . add Padding Top ( in sets Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ PLACE HOLDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠPlace holder ViewHolder ( LayoutInflater . from ( parent . context ). inflate ( R . layout . item _ placeholder , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . update LayoutParams Ġ{ Ġheight Ġ= Ġplaceholder Height Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" can Ġnot Ġcreate Ġview Ġholder Ġfor Ġtype Ġ$ view Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHEADER _ COUNT Ġ+ Ġif Ġ( is Preview Mode ) Ġ 1 Ġelse Ġmus ics . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . apply Primary Color ( color Primary ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder . item ViewType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ M US IC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Music ( holder Ġas ĠMusic ViewHolder , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ HEADER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Header ( holder Ġas ĠMusic List Header ViewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ LIST _ DETAIL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Detail ( holder Ġas ĠPlay List Detail ViewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ PLACE HOLDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Placeholder ( holder Ġas ĠPlace holder ViewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġbind Placeholder ( holder : ĠPlace holder ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// DO Ġnothing ... ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġbind Detail ( holder : ĠPlay List Detail ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplaylist ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġbind Header ( holder : ĠMusic List Header ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . setHeader ( track Count , Ġis Show Subscribe Button , Ġis Sub scribed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġbind Music ( holder : ĠMusic ViewHolder , Ġadapter Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġadapter Position Ġ- Ġmusic Index Offset ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmus ics [ index ] ĊĊĠĠĠĠĠĠĠ Ġholder . bind ( data , Ġindex Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġholder . set Playing ( playing Music Ġ== Ġdata ) ĊĠĠĠĠĠĠĠ Ġholder . set Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpl Ġ= ĠMusic Player Manager . music Player . playlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pl . token Ġ== Ġtoken Ġ&& Ġpl . current Ġ== Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġholder . item View . context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠMusic Player Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Music Player Manager . music Player . media Player . is Play When Ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Player Manager . music Player . play Pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Player Manager . play ( token , Ġdata , Ġmus ics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Options Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ġ{ Ġ" show Ġoptions Ġfor Ġ$ data " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĹè¡¨ ä¸»é¢ĺ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġapply Primary Color (@ Color Int Ġcolor Primary : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . color Primary Ġ== Ġcolor Primary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . color Primary Ġ= Ġcolor Primary ĊĠĠĠĠĠĠĠ Ġre cyclerView ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Child ViewHolder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance ( Base ViewHolder :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Primary Color ( color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Playing Music ( music : ĠMusic ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġplaying Music Ġ= Ġmusic ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġmus ics . indexOf ( music ) ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġre cyclerView Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġre cyclerView . children ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġre cyclerView . getChild ViewHolder ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance ( Music ViewHolder :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Playing (( it . adapter Position Ġ- ĠHEADER _ COUNT ) Ġ== Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) ĊĠĠĠ Ġfun Ġon Window Insets Event ( e : ĠWindow Insets Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( in sets Top Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġin sets Top Ġ= Ġe . in sets . system Window Inset Top ĊĊĠĠĠĠĠĠĠ Ġre cyclerView ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . map NotNull Ġ{ Ġget Child ViewHolder ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance ( Play List Detail ViewHolder :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Padding Top ( in sets Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠTYPE _ LIST _ DETAIL ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠTYPE _ HEADER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ(! is Preview Mode ) ĠTYPE _ M US IC Ġelse ĠTYPE _ PLACE HOLDER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }