package Ġcom . example . alex ey gl ush kov . task manager . pool Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcom . example . alex ey gl ush kov . task manager . task . Task Ċ import Ġcom . example . alex ey gl ush kov . task manager . task . Task Base Ċ import Ġcom . example . alex ey gl ush kov . task manager . runners . Thread Runner Ċ import Ġcom . example . alex ey gl ush kov . task manager . task . is Finished Ċ import Ġcom . example . alex ey gl ush kov . task manager . task . is Ready To Start Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġa lex ey gl ush kov Ġon Ġ 3 0 . 1 2 . 1 4 . Ċ Ġ*/ Ċ abstract Ġclass ĠTask Pool Base ( thread Runner : ĠThread Runner ) Ġ: ĠTask Pool Ġ{ ĊĠĠĠ Ġ// TODO : Ġthink Ġabout Ġweak ref ĊĠĠĠ Ġprotected Ġvar Ġlisteners Ġ= Ġmutable ListOf < Task Pool . Listener >() Ġ// ĠTODO : Ġset Ġone Ġlistener ĊĊĠĠĠ Ġprivate Ġvar Ġ_ thread Runner : ĠThread Runner ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġthread Runner : ĠThread Runner ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ thread Runner !! ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ thread Runner Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar ĠuserData : ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ thread Runner Ġ= Ġthread Runner ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ//// ĠEvents ĊĊĠĠĠ Ġoverride Ġfun Ġon Task Status Changed ( task : ĠTask , Ġold Status : ĠTask . Status , Ġnew Status : ĠTask . Status ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( task . is Finished ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Task ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĠActions ĊĊĠĠĠ Ġoverride Ġfun Ġadd Task ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( task Ġ! is ĠTask Base ) Ġ{ Ġassert ( false ); Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġthread Runner . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Task On Thread ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġadd Task On Thread ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( task Ġ! is ĠTask Base ) Ġ{ Ġassert ( false ); Ġreturn Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Handler Thread () ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Task Ġ= Ġtask ĊĠĠĠĠĠĠĠ Ġval ĠtaskId Ġ= Ġtask . taskId ĊĠĠĠĠĠĠĠ Ġif Ġ( taskId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Task Ġ= Ġget Task ( taskId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġlisteners . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Task Ġ!= Ġnull Ġ&& Ġlistener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Task Ġ= Ġlistener . on Task Conflict ( this , Ġtask , Ġold Task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Task Ġ== Ġtask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . add Task Status Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Task Internal ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger On Task Added ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġabstract Ġprotected Ġfun Ġadd Task Internal ( task : ĠTask ) ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprotected Ġopen Ġfun Ġtrigger On Task Added ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Task Added ( this , Ġtask ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Task ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Runner . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Task On Thread ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġremove Task On Thread ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( remove Task Internal ( task )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Removed ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Task Removed ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtask . remove Task Status Listener ( this ) ĊĠĠĠĠĠĠĠ Ġtrigger On Task Removed ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrigger On Task Removed ( task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Handler Thread () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Task Removed ( this @ Task Pool Base , Ġtask ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġabstract Ġprotected Ġfun Ġremove Task Internal ( task : ĠTask ): ĠBoolean ĊĊĠĠĠ Ġoverride Ġfun Ġcancel Task ( task : ĠTask , Ġinfo : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Runner . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Task On Thread ( task , Ġinfo ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġprivate Ġfun Ġcancel Task On Thread ( task : ĠTask , Ġinfo : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Task Cancelled ( this @ Task Pool Base , Ġtask , Ġinfo ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠTask Pool . Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Listener ( listener : ĠTask Pool . Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcheck Handler Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Assert . assertEquals ( Looper . my Looper (), Ġthis . handler . lo oper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġprotected Ġfun Ġtag () Ġ= Ġ" Simple Task Pool " Ċ } Ċ