package Ġcom . n ain . easy loader . loader Ċ Ċ import Ġcom . n ain . easy loader . handler . Data Handler Ċ import Ġcom . n ain . easy loader . task . C ancellable Task Ċ import Ġcom . n ain . easy loader . task . Task Manager Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . concurrent . Future Ċ Ċ /** Ċ Ġ* Ġ@ author Ġj ulk ar Ġn ain Ċ Ġ* Ġ@ since Ġ 4 / 1 8 / 1 9 Ċ Ġ*/ Ċ open Ġclass ĠBase Loader Ġ: ĠC ancellable Task Ġ{ ĊĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġurl : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtask Ġ: ĠFuture < *> ĊĊĠĠĠ Ġinternal Ġfun Ġdownload ( data Handler : ĠData Handler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Ġ= ĠTask Manager . add Task ( Runnable Task ( url , Ġdata Handler )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel Task (){ ĊĠĠĠĠĠĠĠ ĠTask Manager . cancel Task ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠRunnable Task ( val Ġurl : ĠString , Ġval Ġdata Handler : ĠData Handler ) Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCN NECTION _ TIME _ OUT Ġ= Ġ 3 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREAD _ TIME _ OUT Ġ= Ġ 3 0 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Url Ġ= ĠURL ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection : ĠHttp URLConnection Ġ= Ġformatted Url . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . set Connect Timeout ( CN NECTION _ TIME _ OUT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . set Read Timeout ( READ _ TIME _ OUT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . set Instance Follow Redirect s ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠInputStream ? Ġ= Ġconnection . getInputStream () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Handler . on Success ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Handler . on Failure (" op ps Ġsomething Ġwrong ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Handler . on Failure ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ