package Ġcom . br ins . music detail . activity ĊĊ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Html Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . alibaba . android . ar outer . facade . annotation . Route Ċ import Ġcom . br ins . base lib . activity . Base M vp Activity Ċ import Ġcom . br ins . base lib . module .* Ċ import Ġcom . br ins . base lib . route . Router Hub . Companion . PLAY LIST ACTIVITY Ċ import Ġcom . br ins . base lib . utils . Span Utils Ċ import Ġcom . br ins . base lib . utils . UI Utils Ċ import Ġcom . br ins . base lib . utils . hide StatusBar Ċ import Ġcom . br ins . music detail . R Ċ import Ġcom . br ins . player lib . contract . Player Contract Ċ import Ġcom . br ins . player lib . model . Play Back Service Ċ import Ġcom . br ins . player lib . presenter . Player Presenter Ċ import Ġcom . ch ad . library . adapter . base 2 . Base Multi Item Quick Adapter Ċ import Ġcom . ch ad . library . adapter . base 2 . view holder . Base ViewHolder Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . android . synt hetic . main . activity _ play _ list .* Ċ Ċ @ Android EntryPoint Ċ @ Route ( path Ġ= ĠP LAY LIST ACTIVITY ) Ċ class ĠPlay List Activity Ġ: ĠBase M vp Activity < Player Presenter >(), ĠPlayer Contract . View , ĊĠĠĠ ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Player : ĠPlay Back Service ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Adapter : ĠPlay ListAdapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm LayoutManager : ĠLinearLayoutManager ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġget Layout Res Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . activity _ play _ list ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠPlay ListAdapter () ĊĠĠĠĠĠĠĠ Ġm LayoutManager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġrv _ playlist . layout Manager Ġ= Ġm LayoutManager ĊĠĠĠĠĠĠĠ Ġrv _ playlist . adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠ Ġm Presenter ?. bind Playback Service () ĊĠĠĠĠĠĠĠ Ġview . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġiv _ play _ mode . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġiv _ trash _ can . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Playback Service Bound ( service : ĠPlay Back Service ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player Ġ= Ġservice ĊĠĠĠĠĠĠĠ Ġupdate Play Mode ( m Player ?. getCurrent Play Mode () Ġ?: ĠPlay Mode . LOOP ) ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Base Data >() ĊĠĠĠĠĠĠĠ Ġlist . addAll ( m Player !!. get Play List (). getS ong ()) ĊĠĠĠĠĠĠĠ Ġm Adapter ?. set New Data ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Playback Service Un bound () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Song Updated ( song : ĠBase Music ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠ Ġsong ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Adapter !!. data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( m Adapter !!. data [ i ] Ġas ĠBase Music ). id Ġ== Ġit . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager ?. find View By Position ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . findViewById < ImageView >( R . id . iv _ h orn )?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager ?. find View By Position ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . findViewById < ImageView >( R . id . iv _ h orn )?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Song Play () Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Song Pause () Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Play Mode ( play Mode : ĠPlay Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( play Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . LOOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv _ play _ mode . setImage Resource ( R . drawable . base _ icon _ play _ cycle _ g ery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . HE ART Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Builder Ġ= ĠSpan Utils (). append ( getString ( R . string . current _ mode )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ForegroundColor ( UI Utils . getColor ( R . color . g ery _ 3 3 3 3 3 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( getString ( R . string . heart _ mode )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ForegroundColor ( UI Utils . getColor ( R . color . red _ ED 5 0 5 0 )). create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ play _ mode . text Ġ= Ġstr Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv _ play _ mode . setImage Resource ( R . drawable . base _ icon _ play _ cycle _ g ery ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . SINGLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv _ play _ mode . setImage Resource ( R . drawable . base _ icon _ play _ single _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Music Delete () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Base Data >() ĊĠĠĠĠĠĠĠ Ġlist . addAll ( m Player !!. get Play List (). getS ong ()) ĊĠĠĠĠĠĠĠ Ġm Adapter ?. set New Data ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset StatusBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide StatusBar ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠPlay ListAdapter Ġ: ĠBase Multi Item Quick Adapter < Base Data , ĠBase ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( 0 , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ BAN NER _ M US IC , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ HOME _ PERSON AL IZED _ M US IC , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ HOME _ TOP _ M US IC , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ AL BU M _ LIST _ M US IC , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ M US IC _ LIST _ TRACK _ M US IC , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ DA IL Y _ M US IC , ĠR . layout . music _ detail _ item _ playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ItemType ( ITEM _ HOME _ M US IC _ LIST _ IN TE LL IGENCE , ĠR . layout . music _ detail _ item _ playlist ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( helper : ĠBase ViewHolder , Ġitem : ĠBase Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setText ( R . id . tv _ music _ name , Ġ( item Ġas ĠBase Music ). name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setText ( R . id . tv _ link , ĠgetName And Art ists ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Ġ== Ġm Player ?. get Playing Song ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setVisible ( R . id . iv _ h orn , Ġis Visible Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setVisible ( R . id . iv _ h orn , Ġis Visible Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . getView < ImageView >( R . id . iv _ del ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. delete ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . getView < Relative Layout >( R . id . rl _ song _ play ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. play ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetName And Art ists ( data : ĠBase Music ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . artists ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( artist Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( artist . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . artists Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . song ?. artists ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( artist Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( artist . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( p 0 : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( p 0 . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . view Ġ-> Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . iv _ play _ mode Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Play Mode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . iv _ trash _ can Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. delete All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Play Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Player ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . getCurrent Play Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . LOOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. change Play Mode ( Play Mode . SINGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Mode . SINGLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter ?. change Play Mode ( Play Mode . LOOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( R . anim . base _ activity _ page _ down _ enter , ĠR . anim . base _ activity _ page _ down _ exit ) ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} Ċ }