/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠV ital iy ĠSy cho v . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . jav av ir ys . medi ap layer . presentation . view model Ċ Ċ import Ġandroid . support . v 4 . media . Media Browser Compat Ċ import Ġandroid . support . v 4 . media . Media Description Compat Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . jav av ir ys . medi ap layer . core . entity . Result Ċ import Ġcom . jav av ir ys . medi ap layer . core . entity . Track Ċ import Ġcom . jav av ir ys . medi ap layer . core . exception . Track NotFoundException Ċ import Ġcom . jav av ir ys . medi ap layer . data . service . Media Playback Service . Companion . ROOT _ ID Ċ import Ġcom . jav av ir ys . medi ap layer . domain . inter actor . Delete Track Interactor Ċ import Ġcom . jav av ir ys . medi ap layer . presentation . navigation . Main Router Ċ import Ġcom . jav av ir ys . medi ap layer . util . Music Service Connection Ċ import Ġcom . jav av ir ys . medi ap layer . util . Player Utils Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠTrack List ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrouter : ĠMain Router , ĊĠĠĠ Ġprivate Ġval Ġdelete Track Interactor : ĠDelete Track Interactor , ĊĠĠĠ Ġmusic Service Connection : ĠMusic Service Connection , Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġscanner Status LiveData Ġ= ĠMutable LiveData < Result < Unit >>() ĊĊĠĠĠ Ġval Ġtracks LiveData Ġ= ĠMutable LiveData < Result < Track >>() ĊĊĠĠĠ Ġval Ġselected Mode Track LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġval Ġselected Track List LiveData Ġ= ĠMutable LiveData < List < Track >>() ĊĊĠĠĠ Ġval Ġupdate Track LiveData Ġ= ĠMutable LiveData < Track >() ĊĊĠĠĠ Ġval Ġremove Track LiveData Ġ= ĠMutable LiveData < Track >() ĊĊĠĠĠ Ġprivate Ġval Ġsubscription Callback Ġ= Ġobject Ġ: ĠMedia Browser Compat . Subscription Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Children Loaded ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠparentId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren : ĠList < Media Browser Compat . Media Item > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscanner Status LiveData . value Ġ= ĠResult . Success ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( children . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracks LiveData . value Ġ= ĠResult . Error ( Track NotFoundException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . map Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracks LiveData . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . media Id !!. to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . description . title . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . description . media Uri . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmusic Service Connection Ġ= Ġmusic Service Connection . also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . subscribe ( ROOT _ ID , Ġsubscription Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġmusic Service Connection . unsubscribe ( ROOT _ ID , Ġsubscription Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Track Clicked ( track : ĠTrack , Ġlist : ĠList < Track >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Mode Track LiveData . value Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack . selected Ġ= Ġ! track . selected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Track LiveData . value Ġ= Ġtrack ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Tracks Ġ= Ġlist . filter Ġ{ Ġit . selected Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Track List LiveData . value Ġ= Ġselected Tracks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Tracks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Mode Track LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Track Screen ( track ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate To Track Screen ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Track List LiveData . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġitem Ġ-> Ġitem . selected Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Mode Track LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplay Media ( track , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġrouter . navigate To Track Screen ( track ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate To Track Information Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Track List LiveData . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġitem Ġ-> Ġitem . selected Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Mode Track LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . navigate To Track Information Screen ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplay Media ( media Item : ĠTrack , Ġpause Allowed : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPlayer Utils . play Media ( music Service Connection , Ġmedia Item , Ġpause Allowed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Mode ( track : ĠTrack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Mode Track LiveData . value Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Mode Track LiveData . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Track LiveData . value Ġ= Ġtrack . also Ġ{ Ġit . selected Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Track List LiveData . value Ġ= ĠlistOf ( track ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Selected Tracks () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Track List LiveData . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Tracks ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Tracks ( list : ĠList < Track >) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Mode Track LiveData . value Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġlaunch ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Code Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmusic Service Connection . removeItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( it . id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Track Interactor . execute ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Track LiveData . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }