package Ġcom . let it play . ma u gry . let it play . user _ flow . ui . screen . play lists Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . gs fox pro . music service . Music Repo Ċ import Ġcom . gs fox pro . music service . model . Audio Track Ċ import Ġcom . let it play . ma u gry . let it play . R Ċ import Ġcom . let it play . ma u gry . let it play . Service Locator Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . db . entity . Track Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . db . entity . Track With Channel Ċ import Ġcom . let it play . ma u gry . let it play . data _ management . model . to Audio Track Ċ import Ġcom . let it play . ma u gry . let it play . user _ flow . ui . Base Fragment Ċ import Ġcom . let it play . ma u gry . let it play . user _ flow . ui . utils . Begin Swipe Handler Ċ import Ġcom . let it play . ma u gry . let it play . user _ flow . ui . utils . list Divider Ċ import Ġcom . let it play . ma u gry . let it play . utils . ext . g one Ċ import Ġcom . let it play . ma u gry . let it play . utils . ext . hide Ċ import Ġcom . let it play . ma u gry . let it play . utils . ext . show Ċ import Ġkotlinx . android . synt hetic . main . user _ playlist _ fragment .* Ċ import Ġru . r amb ler . libs . swipe _ layout . Swipe Layout ĊĊ Ċ class ĠUser Playlist Fragment Ġ: ĠBase Fragment ( R . layout . user _ playlist _ fragment ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġplaylist Adapter : ĠPlaylist Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPlaylist Adapter ( music Service , Ġ:: play Track , Ġ:: on Other Click , Ġ:: on Swipe Reached , Ġ:: on Remove Click , Ġ:: on Playlist Clear ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġplay lists Repo : ĠMusic Repo ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġvm Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠService Locator . viewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Play lists ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġvm . state . observe ( this , ĠObserver < Play lists ViewModel . ViewState > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . show Tracks Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Adapter . data Ġ= Ġit . tracks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist _ no _ tracks . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist _ track _ list . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist _ track _ list . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist _ no _ tracks . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) !! ĊĠĠĠĠĠĠĠ Ġval Ġplaylist Recycler Ġ= Ġview . findViewById < RecyclerView >( R . id . playlist _ track _ list ) ĊĠĠĠĠĠĠĠ Ġval Ġbegin Swipe Handler Ġ= ĠBegin Swipe Handler ( playlist Recycler ) ĊĠĠĠĠĠĠĠ Ġplaylist Adapter . on Begin Swipe Ġ= Ġbegin Swipe Handler :: on Swipe Begin ĊĠĠĠĠĠĠĠ Ġplaylist Recycler . adapter Ġ= Ġplaylist Adapter ĊĠĠĠĠĠĠĠ Ġval Ġdivider Ġ= Ġlist Divider ( playlist Recycler . context , ĠR . drawable . list _ divider ) ĊĠĠĠĠĠĠĠ Ġplaylist Recycler . addItem Decoration ( divider ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Remove Click ( track : ĠTrack , Ġposition : ĠInt , Ġswipe Layout : ĠSw ipe Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠMove Ġit Ġto Ġview model Ġ! ĊĠĠĠĠĠĠĠ Ġswipe Layout . animate Reset () ĊĠĠĠĠĠĠĠ Ġif Ġ( music Service ?. music Repo ?. current Audio Track ?. id Ġ== Ġtrack . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Activity . music Player Small ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Next : ĠAudio Track ? Ġ= Ġmusic Service ?. music Repo ?. next Audio Track ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( audio Next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip To Queue Item ( audio Next . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvm . delete Track ( track ) ĊĠĠĠĠĠĠĠ Ġnavigation Activity . remove Track ( position ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġon Swipe Reached ( track : ĠTrack , Ġposition : ĠInt , Ġswipe Layout : ĠSw ipe Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Remove Click ( track , Ġposition , Ġswipe Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Playlist Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠMove Ġit Ġto Ġview model Ġ! ĊĠĠĠĠĠĠĠ Ġif Ġ( music Service ?. music Repo Ġ== Ġplay lists Repo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Activity . music Player Small ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Activity . update Repo (- 1 , Ġnull , Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgone () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvm . clear Playlist () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplay Track ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrack Id Ġ= Ġtrack . id ĊĠĠĠĠĠĠĠ Ġif Ġ( play lists Repo Ġ!= Ġnull Ġ&& Ġmusic Service ?. music Repo ?. get Audio Track At Id ( track Id ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Activity . music Player Small ?. skip To Queue Item ( track . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvm . state . value ?. tracks ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay lists Repo Ġ= ĠMusic Repo ( it . map ( Track With Channel :: to Audio Track ). to Mutable List (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Activity . update Repo ( track . id , Ġplay lists Repo , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Other Click ( track Id : ĠInt , Ġreason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . on Report Click ( track Id , Ġreason ) ĊĠĠĠ Ġ} Ċ Ċ }