package Ġcom . li uy uch uan . eas ym usic . list Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . view .* Ċ import Ġcom . li uy uch uan . eas ym usic . Base Fragment Ċ import Ġcom . li uy uch uan . eas ym usic . R Ċ import Ġcom . li uy uch uan . eas ym usic . data . Music List Ċ import Ġcom . li uy uch uan . eas ym usic . data . Song Ċ import Ġcom . li uy uch uan . eas ym usic . play . Play Activity Ċ import Ġcom . li uy uch uan . eas ym usic . utils .* Ċ import Ġcom . li uy uch uan . eas ym usic . widget . Linear Item Divider Ċ import Ġkotlinx . android . synt hetic . main . fragment _ song _ list .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠLi u ĠY uch uan Ġon Ġ 2 0 1 8 / 5 / 7 . Ċ Ġ*/ Ċ class ĠSong List Fragment Ġ: ĠBase Fragment (), ĠCheck able Item View Binder . On Real ItemClickListener < Song > Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmusic List : ĠMusic List ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠReactive Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlist Manage ViewModel : ĠList Manage ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsong List ViewModel : ĠSong List ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcheck able Item View Binder : ĠSong Item View Binder ĊĊĠĠĠ Ġprivate Ġvar Ġmenu Item Sort : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu Item Edit : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu Item Delete : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu Item Check All : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu Item Finish : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu Item Add ToList : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmenu Item AddTo Play List : ĠMenuItem ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġlist Manage ViewModel Ġ= Ġactivity !!. provide ViewModel () ĊĠĠĠĠĠĠĠ Ġsong List ViewModel Ġ= Ġprovide ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ song _ list , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġlist Manage ViewModel . selected Music List LiveData . value ĊĠĠĠĠĠĠĠ Ġif Ġ( list Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ read _ list _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Manage ViewModel . selected Music List LiveData . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmusic List Ġ= Ġlist ĊĊĠĠĠĠĠĠĠ ĠsetTitle ( music List . name ) ĊĠĠĠĠĠĠĠ Ġsong List ViewModel . init ( music List ) ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠReactive Adapter ( song List ViewModel . song List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck able Item View Binder Ġ= ĠSong Item View Binder ( this @ Song List Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( song Check able Item :: class . java , Ġcheck able Item View Binder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve ( this @ Song List Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrv _ song _ list . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġrv _ song _ list . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġrv _ song _ list . addItem Decoration ( Linear Item Divider ( context !! )) ĊĊĠĠĠĠĠĠĠ Ġlist Manage ViewModel . addTo Music List Event . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRefresh State . NotEmpty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd To Music List Dialog . dismiss ( child FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsong List ViewModel . delete Song Event . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRefresh State . NotEmpty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Check Real Item Clicked ( real Item : ĠSong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsong List ViewModel . choose Song To Play ( real Item ) ĊĠĠĠĠĠĠĠ ĠPlay Activity . start ( activity !! , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ list _ editable , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠĠĠĠĠ Ġmenu Item Sort Ġ= Ġmenu . find Item ( R . id . list _ sort ) ĊĠĠĠĠĠĠĠ Ġmenu Item Edit Ġ= Ġmenu . find Item ( R . id . list _ edit ) ĊĠĠĠĠĠĠĠ Ġmenu Item Delete Ġ= Ġmenu . find Item ( R . id . list _ delete ) ĊĠĠĠĠĠĠĠ Ġmenu Item Check All Ġ= Ġmenu . find Item ( R . id . list _ check _ all ) ĊĠĠĠĠĠĠĠ Ġmenu Item Finish Ġ= Ġmenu . find Item ( R . id . list _ complete ) ĊĠĠĠĠĠĠĠ Ġmenu Item Add ToList Ġ= Ġmenu . find Item ( R . id . list _ add _ to _ music _ list ) ĊĠĠĠĠĠĠĠ Ġmenu Item AddTo Play List Ġ= Ġmenu . find Item ( R . id . list _ add _ to _ play _ list ) ĊĊĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check LiveData . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Check Action ( it !! ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy Options Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Item Edit Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmenu Item Delete Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmenu Item Check All Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmenu Item Finish Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmenu Item Add ToList Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmenu Item AddTo Play List Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmenu Item Sort Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ edit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ complete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ check _ all Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check able Item View Binder . is Check All ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck able Item View Binder . uncheck All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck able Item View Binder . check All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Manage ViewModel . is Busy On Music List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġcheck able Item View Binder . checked ItemList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ no _ songs _ checked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Manage ViewModel . checked List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Manage ViewModel . checked List . addAll ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . delete S ongs From List ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ add _ to _ music _ list Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġcheck able Item View Binder . checked ItemList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ no _ songs _ checked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Manage ViewModel . checked List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Manage ViewModel . checked List . addAll ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd To Music List Dialog . show ( child FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ add _ to _ play _ list Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġcheck able Item View Binder . checked ItemList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ no _ songs _ checked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . add List To Play List ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list _ sort Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Sort Method Dialog . show ( child FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( song List ViewModel . enable Check LiveData . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsong List ViewModel . enable Check LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenable Check Action ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Sort ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Edit ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Check All ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Delete ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Finish ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Add ToList ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item AddTo Play List ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Sort ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Edit ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Check All ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Delete ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Finish ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Add ToList ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item AddTo Play List ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck able Item View Binder . enable Check Ġ= Ġenable ĊĠĠĠ Ġ} Ċ } Ċ