package Ġcom . l zx . st arr ys ky . delay action Ċ Ċ import Ġcom . l zx . st arr ys ky . St arry Sky Ċ import Ġcom . l zx . st arr ys ky . provider . Song Info Ċ import Ġcom . l zx . st arr ys ky . utils . St arry Sky Utils Ċ Ċ class ĠPlay Valid Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Valid Queue Ġ= Ġmutable ListOf < Valid >() ĊĠĠĠ Ġprivate Ġvar Ġaction : ĠAction ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvalid Index Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdo Call After Action Ġ= Ġtrue ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠPlay Valid Manager ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġget (): ĠPlay Valid Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ?: ĠPlay Valid Manager (). also Ġ{ Ġinstance Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Valid ( valid : ĠValid ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Valid Queue . contains ( valid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Valid Queue . add ( valid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Action ( action : ĠAction ?): ĠPlay Valid Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . action Ġ= Ġaction ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Valid Queue (): ĠList < Valid > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Valid Queue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Call ( song Info : ĠSong Info ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠSt arry Sky Utils . log (" do Call # valid Index Ġ= Ġ$ valid Index ") ĊĠĠĠĠĠĠĠ Ġ// æī§è¡Į éªĮè¯ģ ĊĠĠĠĠĠĠĠ Ġif Ġ( valid Index Ġ< Ġm Valid Queue . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġm Valid Queue [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid . do Valid ( song Info , Ġobject Ġ: ĠValid . Valid Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfinish Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt arry Sky Utils . log (" do Call # Ġ Ġvalid Index ++ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Call ( song Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo Action Direct () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt arry Sky Utils . log (" çĽ´æİ¥ æī§è¡Į ĠAction ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Action ( song Info ) Ġ// çĽ´æİ¥ æī§è¡Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æī§è¡Į action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Action ( song Info , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Action ( song Info : ĠSong Info ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Action ( song Info , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Action ( song Info : ĠSong Info ?, Ġdo Call After Action : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . do Call After Action Ġ= Ġdo Call After Action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ?. call ( song Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSt arry Sky Utils . log (" do Action # valid Index Ġ= Ġ$ valid Index ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Call ( media Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsong Info Ġ= Ġmedia Id ?. let Ġ{ ĠSt arry Sky . get (). media Queue Provider . getS ong Info ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġsong Info ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Call ( song Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Valid Index () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalid Index Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalid Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Valid Queue . clear () ĊĠĠĠ Ġ} Ċ }