package Ġz lc . season . rx download 4 . manager Ċ Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers . main Thread Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . flow ables . Connect able Flow able Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġz lc . season . rx download 4 . Progress Ċ import Ġz lc . season . rx download 4 . delete Ċ import Ġz lc . season . rx download 4 . file Ċ import Ġz lc . season . rx download 4 . storage . Storage Ċ import Ġz lc . season . rx download 4 . task . Task Ċ import Ġz lc . season . rx download 4 . utils . safe Dispose Ċ import Ġjava . util . concurrent . TimeUnit . MILLISECONDS Ċ import Ġjava . util . concurrent . TimeUnit . SECONDS Ċ Ċ class ĠTask Manager ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtask : ĠTask , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstorage : ĠStorage , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconnect Flow able : ĠConnect able Flow able < Progress >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnotification Creator : ĠNotification Creator , ĊĠĠĠĠĠĠĠ Ġtask Recorder : ĠTask Recorder , ĊĠĠĠĠĠĠĠ Ġval Ġtask Limit ation : ĠTask Limit ation Ċ ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Creator . init ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// For Ġdownload Ġuse ĊĠĠĠ Ġprivate Ġval Ġdownload Handler Ġby Ġlazy Ġ{ ĠStatus Handler ( task ) Ġ} ĊĊĠĠĠ Ġ// For Ġrecord Ġuse ĊĠĠĠ Ġprivate Ġval Ġrecord Handler Ġby Ġlazy Ġ{ ĠStatus Handler ( task , Ġtask Recorder ) Ġ} ĊĊĠĠĠ Ġ// For Ġnotification Ġuse ĊĠĠĠ Ġprivate Ġval Ġnotification Handler Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠStatus Handler ( task , Ġlog Tag Ġ= Ġ" Notification ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= Ġnotification Creator . create ( task , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Notification ( task , Ġnotification ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Download Ġdis posable ĊĠĠĠ Ġprivate Ġvar Ġdis posable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdownload Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrecord Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnotification Disposable : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġtag ĠAs Ġthe Ġunique Ġidentifier Ġfor Ġthis Ġsubscription ĊĠĠĠĠ Ġ* Ġ@ param Ġreceive Last Status ĠIf Ġtrue , Ġthe Ġlast Ġstatus Ġwill Ġbe Ġreceived Ġafter Ġsub scri bing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġadd Callback ( tag : ĠAny , Ġreceive Last Status : ĠBoolean , Ġcallback : Ġ( Status ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdownload Handler . add Callback ( tag , Ġreceive Last Status , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove Callback ( tag : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdownload Handler . remove Callback ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcurrent Status () Ġ= Ġdownload Handler . current Status ĊĊĠĠĠ Ġinternal Ġfun ĠgetFile () Ġ= Ġtask . file ( storage ) ĊĊĠĠĠ Ġinternal Ġfun Ġinner Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Started ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsubscribe Notification () ĊĠĠĠĠĠĠĠ Ġsubscribe Record () ĊĠĠĠĠĠĠĠ Ġsubscribe Download () ĊĊĠĠĠĠĠĠĠ Ġdis posable Ġ= Ġconnect Flow able . connect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Download () Ġ{ ĊĠĠĠĠĠĠĠ Ġdownload Disposable Ġ= Ġconnect Flow able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġdownload Handler . on Started () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġdownload Handler . on Downloading ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġdownload Handler . on Completed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ Ġdownload Handler . on Failed ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Cancel Ġ{ Ġdownload Handler . on Paused () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Disposable Ġ= Ġconnect Flow able . sample ( 1 0 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġrecord Handler . on Started () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġrecord Handler . on Downloading ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġrecord Handler . on Completed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ Ġrecord Handler . on Failed ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Cancel Ġ{ Ġrecord Handler . on Paused () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġnotification Disposable Ġ= Ġconnect Flow able . sample ( 5 0 0 , ĠMIL LI SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġnotification Handler . on Started () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġnotification Handler . on Downloading ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġnotification Handler . on Completed () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ Ġnotification Handler . on Failed ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Cancel Ġ{ Ġnotification Handler . on Paused () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinner Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// send Ġpause Ġstatus ĊĠĠĠĠĠĠĠ Ġnotification Handler . on Paused () ĊĠĠĠĠĠĠĠ Ġdownload Handler . on Paused () ĊĠĠĠĠĠĠĠ Ġrecord Handler . on Paused () ĊĊĠĠĠĠĠĠĠ Ġnotification Disposable . safe Dispose () ĊĠĠĠĠĠĠĠ Ġrecord Disposable . safe Dispose () ĊĠĠĠĠĠĠĠ Ġdownload Disposable . safe Dispose () ĊĠĠĠĠĠĠĠ Ġdis posable . safe Dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinner Delete () Ġ{ ĊĠĠĠĠĠĠĠ Ġinner Stop () ĊĊĠĠĠĠĠĠĠ Ġtask . delete ( storage ) ĊĊĠĠĠĠĠĠĠ Ġ// send Ġdelete Ġstatus ĊĠĠĠĠĠĠĠ Ġdownload Handler . on Deleted () ĊĠĠĠĠĠĠĠ Ġnotification Handler . on Deleted () ĊĠĠĠĠĠĠĠ Ġrecord Handler . on Deleted () ĊĊĠĠĠĠĠĠĠ Ġcancel Notification ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend ĠPending Ġstatus ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġinner Pending () Ġ{ ĊĠĠĠĠĠĠĠ Ġdownload Handler . on Pending () ĊĠĠĠĠĠĠĠ Ġrecord Handler . on Pending () ĊĠĠĠĠĠĠĠ Ġnotification Handler . on Pending () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Started (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdis posable Ġ!= Ġnull Ġ&& Ġ! dis posable !!. is Disposed ĊĠĠĠ Ġ} Ċ }