package Ġcom . ude sh coffee . android . ui . player . queue Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ude sh coffee . android . R Ċ import Ġcom . ude sh coffee . android . extensions . open AddTo Playlist Dialog Ċ import Ġcom . ude sh coffee . android . extensions . open Song Long Dialog Ċ import Ġcom . ude sh coffee . android . interfaces . On Drag able Item Listener Ċ import Ġcom . ude sh coffee . android . model . Song Ċ import Ġcom . ude sh coffee . android . recyclerview . Item Touch Helper Callback Ċ import Ġcom . ude sh coffee . android . service . Music Service Ċ import Ġcom . ude sh coffee . android . ui . MainActivity Ċ import Ġcom . ude sh coffee . android . ui . common . adapters . Drag able Adapter Ċ import Ġorg . k oin . android . ext . android . inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠU d ath ari Ġon Ġ 9 / 1 6 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠQueue Fragment Ġ: Ġandroidx . fragment . app . Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepeat : ĠImage Button ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshuffle : ĠImage Button ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġqueue Size : ĠTextView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠDrag able Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠQueue ViewModel Ġby Ġinject () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . frag _ queue , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġroot ?. apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoolbar : ĠToolbar Ġ= ĠfindViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠgetString ( R . string . info _ up next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf late Menu ( R . menu . queue _ menu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ add _ to _ playlist Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . addTo Playlist () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ close Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . close Queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ clear _ queue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear Queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn MenuItem ClickListener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= Ġroot . findViewById ( R . id . repeat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . setOnClickListener Ġ{ ĠviewModel . change Repeat Mode () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle Ġ= Ġroot . findViewById ( R . id . shuffle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle . setOnClickListener Ġ{ ĠviewModel . shuffle () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Size Ġ= ĠfindViewById ( R . id . queue _ size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Ġ= ĠfindViewById ( R . id . queue _ recyclerview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠDrag able Adapter ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTouch ĠHandler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Helper Ġ= ĠItem Touch Helper ( Item Touch Helper Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġfrom Position , Ġto Position Ġ-> Ġadapter . on Item Move ( from Position , Ġto Position ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġfrom Position , Ġto Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Position Ġ!= Ġto Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . item Moved ( from Position , Ġto Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠviewModel . item Removed ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Helper . attach To RecyclerView ( re cyclerView ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . listener Ġ= Ġobject Ġ: ĠOn Drag able Item Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . queue Item Clicked ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Long Click ( position : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Drag ( holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Helper . start Drag ( holder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġandroidx . recyclerview . widget . Linear LayoutManager ( activity , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . has Fixed Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . setItem View Cache Size ( 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Song Id . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġadapter . current Id Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsongs . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġadapter . accept ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Position . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Queue Fragment . queue Size . text Ġ= ĠString . format ("% d Ġsong Ġof Ġ% d ", Ġit Ġ+ Ġ 1 , Ġtotal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Service . Repeat Mode . NONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . setImage Resource ( R . drawable . ic _ repeat _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . alpha Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Service . Repeat Mode . ONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . setImage Resource ( R . drawable . ic _ repeat _ one _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Service . Repeat Mode . ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . setImage Resource ( R . drawable . ic _ repeat _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Shuffle . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle . alpha Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle . alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEvents ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Song Long Dialog . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġopen Song Long Dialog ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Player UI . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ). show Player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġit 1 Ġ-> Ġre cyclerView . scrollTo Position ( it 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Now Play . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ). hide Now Play () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow AddTo Playlist . observe ( this @ Queue Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġopen AddTo Playlist Dialog ( it Ġas ĠArrayList < Song >) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠviewModel . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ ĠviewModel . stop () ĊĠĠĠ Ġ} Ċ }