package Ġcom . m 2 mm usic . android . ui . activity Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . m 2 mm usic . android . R Ċ import Ġcom . m 2 mm usic . android . databinding . Activity Daily Recommend Binding Ċ import Ġcom . m 2 mm usic . android . logic . Repository Ċ import Ġcom . m 2 mm usic . android . logic . model . Daily Recommend Response Ċ import Ġcom . m 2 mm usic . android . logic . model . Play Mode Ċ import Ġcom . m 2 mm usic . android . logic . model . Playlist Event Ċ import Ġcom . m 2 mm usic . android . logic . model . Recommend Play lists Response Ċ import Ġcom . m 2 mm usic . android . ui . adapter . Music ListAdapter Ċ import Ġcom . m 2 mm usic . android . utils .* Ċ import Ġjava . lang . Exception Ċ Ċ class ĠDaily Recommend Activity Ġ: ĠBase Activity (), ĠMusic ListAdapter . On ItemClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Daily Recommend Binding ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠDaily Recommend Activity ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this )[ Daily Recommend Activity ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmusic List : ĠDaily Recommend Response . Data ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Daily Recommend Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . music List Toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġmusic List Ġ= Ġintent . get Parcelable Extra (" daily _ recommend ") Ġas ĠDaily Recommend Response . Data ĊĊĠĠĠĠĠĠĠ Ġbinding . coll ap sing Toolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" æ¯ı æĹ¥ æİ¨èįĲ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Collapsed Title TextAppearance ( R . style . toolbar _ coll ap sing _ title _ text Style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Expanded Title TextAppearance ( R . style . toolbar _ ex pend _ title _ text Style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . music List . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠMusic ListAdapter ( viewModel . music List ) ĊĠĠĠĠĠĠĠ Ġbinding . music List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġadapter . setOn ItemClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġdark Theme Setting () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . music ?. music Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Music Updated ( viewModel . music ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrack Ids Ġ= ĠArrayList < Long >() ĊĠĠĠĠĠĠĠ Ġmusic List . daily S ongs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Ids . add ( it . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . get Online Music ( track Ids ) ĊĠĠĠĠĠĠĠ Ġ// Ġ è§Ĥ å¯Ł æŃĮ æĽ² ä¿¡æģ¯ Response ĊĠĠĠĠĠĠĠ ĠviewModel . online Music . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . get OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . music List . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ). load ( result [ 0 ]. album ). into ( binding . cover Background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . song Count . text Ġ= Ġ" åħ± Ġ${ result . size . toString ()} Ġ é¦ĸ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ è§Ĥ å¯Ł current Music çļĦ åıĺåĮĸ ï¼Į åıĬ æĹ¶ æĽ´æĸ° UI ĊĠĠĠĠĠĠĠ ĠviewModel . current Music . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Music Updated ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . music Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbind Play Service () ĊĊĠĠĠĠĠĠĠ ĠonClick Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĳå®ļ æľįåĬ¡ Play Service ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbind Play Service () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . bind Play Service ( this ) ĊĠĠĠĠĠĠĠ ĠLog Util . e ( TAG , Ġ" ç»ĳå®ļ æľįåĬ¡ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Music ListItem Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . set Playlist Event ( Playlist Event ( viewModel . music List , Ġposition , ĠPlay Mode . LIST )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Music Updated ( cm : ĠRepository . Current Music ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util . e ( TAG , Ġ" on Music Updated ") ĊĠĠĠĠĠĠĠ Ġif Ġ( cm ?. music Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cm . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Container . bottom bar Play Or Pause . setImage Resource ( R . drawable . ic _ play ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Container . bottom bar Play Or Pause . setImage Resource ( R . drawable . ic _ pause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĬłè½½ ä¸ĵ è¾ĳ åĽ¾çīĩ ï¼Į æĹł ä¸ĵ è¾ĳ å°ģ éĿ¢ åĪĻ ä½¿çĶ¨ é»ĺè®¤ ä¸ĵ è¾ĳ å°ģ éĿ¢ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cm . music !!. album Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĬłè½½ ä¸ĵ è¾ĳ å°ģ éĿ¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cm . music !!. song Id Ġ< Ġ 1 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Container . cover Container . setImage Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring 2 Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Cover ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcm . music !!. album !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ). load ( cm . music !!. album Ġ+ Ġ"? param = 2 0 0 y 2 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . bottom Container . cover Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Container . cover Container . setImage Resource ( R . drawable . default _ cover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonClick Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ éŁ³ ä¹Ĳ æĴŃæĶ¾ é¡µ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Container . cover Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è·³è½¬ Music Play Ac it ivity ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Play List Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . current Play List Event . playlist . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å½ĵåīį æĹł éŁ³ ä¹Ĳ åľ¨ æĴŃæĶ¾ ". show Toast ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Duration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity < Music Play Activity >( this @ Daily Recommend Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" play _ list _ event ", ĠviewModel . current Play List Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" now _ playing ", ĠviewModel . current Music . value ?. music ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" is _ playing ", ĠviewModel . current Music . value ?. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" progress ", Ġprogress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" duration ", Ġduration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġä¸Ĭ ä¸Ģ é¦ĸ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Container . bottom bar Play Prev . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . music Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . play Pre () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġæ Ĵ Ń æĶ¾ ãĢģ æļĤ åģľ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Container . bottom bar Play Or Pause . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . play Or Pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġä¸ĭ ä¸Ģ é¦ĸ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Container . bottom bar Play Next . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . music Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . play Next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġæ Ĵ Ń æĶ¾ åĪĹè¡¨ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Container . bottom bar Play List . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Play List Event () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity < Play List Activity >( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" play _ list _ event ", ĠviewModel . current Play List Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" is _ play _ activity ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ ļ Ĺ é»ĳ æ¨¡å¼ı ä¸ĭ bottom bar æĺ¾ç¤º ä¸º é»ĳ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdark Theme Setting () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Use Compat Loading For Draw ables ") ĊĠĠĠĠĠĠĠ Ġif Ġ( is Dark Theme ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Container . root . background Ġ= Ġget Drawable ( R . color . bottom _ bar _ dark ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Daily Recommend Activity " ĊĠĠĠ Ġ} Ċ }