package Ġcom . co oler fall . download sample Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . S parseInt Array Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . OnClickListener Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . co oler fall . download . Download Callback Ċ import Ġcom . co oler fall . download . Download Manager Ċ import Ġcom . co oler fall . download . Download Manager . Builder Ċ import Ġcom . co oler fall . download . Download Request Ċ import Ġcom . co oler fall . download . Ok Http Downloader . Companion . create Ċ import Ġcom . co oler fall . download . Priority . HIGH Ċ import Ġcom . co oler fall . download . Priority . NORMAL Ċ import Ġcom . co oler fall . download sample . R . id Ċ import Ġcom . co oler fall . download sample . R . layout Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . TimeUnit . SECONDS Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠOn ClickListener Ġ{ ĊĠ Ġprivate Ġval Ġids Ġ= ĠS parseInt Array () ĊĠ Ġprivate Ġvar ĠprogressBar : ĠProgress Bar ? Ġ= Ġnull ĊĠ Ġprivate Ġvar ĠprogressBar 1 : ĠProgress Bar ? Ġ= Ġnull ĊĠ Ġprivate Ġvar ĠprogressBar 2 : ĠProgress Bar ? Ġ= Ġnull ĊĠ Ġprivate Ġvar ĠprogressBar 3 : ĠProgress Bar ? Ġ= Ġnull ĊĠ Ġprivate Ġvar ĠprogressBar 4 : ĠProgress Bar ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtext Speed : ĠTextView ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtext Speed 1 : ĠTextView ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtext Speed 2 : ĠTextView ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtext Speed 3 : ĠTextView ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġtext Speed 4 : ĠTextView ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġdownload Manager : ĠDownload Manager ? Ġ= Ġnull ĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( layout . activity _ main ) ĊĠĠĠ ĠfindViewById < View >( id . download _ btn _ start ). setOnClickListener ( this ) ĊĠĠĠ ĠfindViewById < View >( id . download _ btn _ start 1 ). setOnClickListener ( this ) ĊĠĠĠ ĠfindViewById < View >( id . download _ btn _ start 2 ). setOnClickListener ( this ) ĊĠĠĠ ĠfindViewById < View >( id . download _ btn _ start 3 ). setOnClickListener ( this ) ĊĠĠĠ ĠfindViewById < View >( id . download _ btn _ start 4 ). setOnClickListener ( this ) ĊĠĠĠ ĠprogressBar Ġ= ĠfindViewById ( id . download _ progress ) ĊĠĠĠ ĠprogressBar 1 Ġ= ĠfindViewById ( id . download _ progress 1 ) ĊĠĠĠ ĠprogressBar 2 Ġ= ĠfindViewById ( id . download _ progress 2 ) ĊĠĠĠ ĠprogressBar 3 Ġ= ĠfindViewById ( id . download _ progress 3 ) ĊĠĠĠ ĠprogressBar 4 Ġ= ĠfindViewById ( id . download _ progress 4 ) ĊĠĠĠ Ġtext Speed Ġ= ĠfindViewById ( id . download _ tv _ speed 0 ) ĊĠĠĠ Ġtext Speed 1 Ġ= ĠfindViewById ( id . download _ tv _ speed 1 ) ĊĠĠĠ Ġtext Speed 2 Ġ= ĠfindViewById ( id . download _ tv _ speed 2 ) ĊĠĠĠ Ġtext Speed 3 Ġ= ĠfindViewById ( id . download _ tv _ speed 3 ) ĊĠĠĠ Ġtext Speed 4 Ġ= ĠfindViewById ( id . download _ tv _ speed 4 ) ĊĠĠĠ Ġval Ġclient : ĠOk HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġdownload Manager Ġ= ĠBuilder (). context ( this ) ĊĠĠĠĠĠĠĠ Ġ. downloader ( create ( client )) ĊĠĠĠĠĠĠĠ Ġ. thread PoolSize ( 3 ) ĊĠĠĠĠĠĠĠ Ġ. logger Ġ{ Ġmessage Ġ-> ĠLog . d ( TAG , Ġmessage ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġdownload Manager !!. release () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠ Ġid . download _ btn _ start Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= ĠINDEX _ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġid . download _ btn _ start 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= ĠINDEX _ 1 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġid . download _ btn _ start 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= ĠINDEX _ 2 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġid . download _ btn _ start 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= ĠINDEX _ 3 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġid . download _ btn _ start 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Ġ= ĠINDEX _ 4 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġid Ġ= Ġids [ index , Ġ- 1 ] ĊĠĠĠ Ġif Ġ( download Manager !!. is Downloading ( id )) Ġ{ ĊĠĠĠĠĠ Ġdownload Manager !!. cancel ( id ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDownload Request . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL [ index ] ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ. download Callback ( Listener ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. retry Time ( 5 ) ĊĠĠĠĠĠĠĠĠĠ Ġ. retry Interval ( 5 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠ Ġ. progress Interval ( 1 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠ Ġ. relative Directory ("/ test ") ĊĠĠĠĠĠĠĠĠĠ Ġ. priority ( if Ġ( index Ġ== Ġ 4 ) ĠHIGH Ġelse ĠNORMAL ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġval Ġdownload Id Ġ= Ġdownload Manager !!. add ( request ) ĊĠĠĠĠĠ Ġids . put ( index , Ġdownload Id ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġquery Index ( id : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġids . size ()) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( ids . value At ( i ) Ġ== Ġid ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġids . key At ( i ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 ĊĠ Ġ} ĊĊĠ Ġprivate Ġinner Ġclass ĠListener Ġ: ĠDownload Callback Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġstart Timestamp : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġstart Size : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun ĠonStart ( ĊĠĠĠĠĠ Ġdownload Id : ĠInt , ĊĠĠĠĠĠ Ġtotal Bytes : ĠLong ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" start Ġdownload : Ġ$ download Id ") ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" total Bytes : Ġ$ total Bytes ") ĊĠĠĠĠĠ Ġstart Timestamp Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Retry ( download Id : ĠInt ) Ġ{ ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" retry Ġdownload Id : Ġ$ download Id ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") Ġoverride Ġfun Ġon Progress ( ĊĠĠĠĠĠ Ġdownload Id : ĠInt , ĊĠĠĠĠĠ Ġbytes Written : ĠLong , ĊĠĠĠĠĠ Ġtotal Bytes : ĠLong ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġval Ġprogress Ġ= Ġ( bytes Written Ġ* Ġ 1 0 0 f Ġ/ Ġtotal Bytes ). toInt () ĊĠĠĠĠĠ Ġval Ġcurrent Timestamp Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" progress : Ġ$ progress ") ĊĠĠĠĠĠ Ġval Ġspeed : ĠInt ĊĠĠĠĠĠ Ġval Ġdelta Time Ġ= Ġ( current Timestamp Ġ- Ġstart Timestamp Ġ+ Ġ 1 ). toInt () ĊĠĠĠĠĠ Ġspeed Ġ= Ġ(( bytes Written Ġ- Ġstart Size ) Ġ* Ġ 1 0 0 0 Ġ/ Ġdelta Time ). toInt () Ġ/ Ġ 1 0 2 4 ĊĠĠĠĠĠ Ġstart Size Ġ= Ġbytes Written ĊĠĠĠĠĠ Ġwhen Ġ( query Index ( download Id )) Ġ{ ĊĠĠĠĠĠĠĠ ĠINDEX _ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠprogressBar !!. progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠ Ġtext Speed !!. text Ġ= Ġspeed . toString () Ġ+ Ġ" kb / s " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠINDEX _ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠprogressBar 1 !!. progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠ Ġtext Speed 1 !!. text Ġ= Ġspeed . toString () Ġ+ Ġ" kb / s " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠINDEX _ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠprogressBar 2 !!. progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠ Ġtext Speed 2 !!. text Ġ= Ġspeed . toString () Ġ+ Ġ" kb / s " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠINDEX _ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠprogressBar 3 !!. progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠ Ġtext Speed 3 !!. text Ġ= Ġspeed . toString () Ġ+ Ġ" kb / s " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠINDEX _ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠprogressBar 4 !!. progress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠ Ġtext Speed 4 !!. text Ġ= Ġspeed . toString () Ġ+ Ġ" kb / s " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonSuccess ( ĊĠĠĠĠĠ Ġdownload Id : ĠInt , ĊĠĠĠĠĠ Ġfilepath : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" success : Ġ" Ġ+ Ġdownload Id Ġ+ Ġ" Ġsize : Ġ" Ġ+ ĠFile ( filepath ). length ()) ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġdownload Manager !!. copy To Public Download Dir ( filepath ) ĊĠĠĠĠĠ ĠLog . i ( TAG , Ġ" result Ġof Ġcopying Ġfile : Ġ$ result ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Failure ( ĊĠĠĠĠĠ Ġdownload Id : ĠInt , ĊĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠ ĠerrMsg : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" fail : Ġ$ download Id Ġ$ statusCode Ġ$ err Msg ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Http Download Manager " ĊĠĠĠ Ġprivate Ġval ĠURL Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ Ġ" https :// f - d roid . org / repo / com . gitlab . ma hc 9 ke z . shadow socks . fo ss _ 5 0 1 0 4 0 0 0 . apk ", ĊĠĠĠĠĠĠĠ Ġ" https :// f - d roid . org / repo / org . mo ire . ultr ason ic _ 1 0 0 . apk ", ĊĠĠĠĠĠĠĠ Ġ" https :// f - d roid . org / repo / com . simple mobile tools . draw . pro _ 6 5 . apk ", ĊĠĠĠĠĠĠĠ Ġ" https :// f - d roid . org / repo / im . vector . app _ 4 0 1 0 3 1 8 0 . apk ", ĊĠĠĠĠĠĠĠ Ġ" https :// f - d roid . org / repo / it . rey bo z . b ust or ino _ 3 8 . apk " ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġconst Ġval ĠINDEX _ 0 Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠINDEX _ 1 Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġconst Ġval ĠINDEX _ 2 Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġconst Ġval ĠINDEX _ 3 Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġconst Ġval ĠINDEX _ 4 Ġ= Ġ 4 ĊĠ Ġ} Ċ }