package Ġcom . che ise _ proj . parent app . utils Ċ Ċ import Ġandroid . app . Download Manager Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . DOWNLOAD _ SERVICE Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġandroid . widget . Toast Ċ import Ġcom . che ise _ proj . presentation . utils . ID own load File Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠDownload File Impl Ġ@ Inject Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠID own load File Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdownload Id : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġoverride Ġfun Ġget FileName From Uri ( file Uri : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile Uri ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . substring ( it . lastIndexOf ("/") Ġ+ Ġ 1 , Ġit . length ). trim () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Download ( file Uri : ĠString ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( file Uri ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDownload Manager . Request ( uri ) ĊĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġget FileName From Uri ( file Uri ) ĊĠĠĠĠĠĠĠ Ġrequest . set Allowed Network Types ( Download Manager . Request . NETWORK _ WIFI Ġor ĠDownload Manager . Request . NETWORK _ MOB ILE ) ĊĠĠĠĠĠĠĠ Ġrequest . setTitle ( filename ) ĊĠĠĠĠĠĠĠ Ġrequest . setDescription (" file Ġdownloading ...") ĊĠĠĠĠĠĠĠ Ġrequest . set Notification Visibility ( Download Manager . Request . VIS IBILITY _ VISIBLE _ NOTIFY _ COMPLETED ) ĊĠĠĠĠĠĠĠ Ġrequest . set Destination In External Public Dir ( Environment . DIRECTORY _ DOWNLOAD S , Ġfilename ) ĊĠĠĠĠĠĠĠ Ġval Ġdownload M anger Ġ= Ġcontext . getSystem Service ( DOWNLOAD _ SERVICE ) Ġas ĠDownload Manager ĊĠĠĠĠĠĠĠ Ġdownload Id Ġ= Ġdownload M anger . enqueue ( request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister Download Broad Cast () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter ( Download Manager . ACTION _ DOWNLOAD _ COMPLETE ) ĊĠĠĠĠĠĠĠ Ġcontext . register Receiver ( broadcast Receiver (), Ġintent Filter ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġget Download Status (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdownload Query Ġ= ĠDownload Manager . Query () ĊĠĠĠĠĠĠĠ Ġdownload Query . set Filter ById ( download Id ) ĊĠĠĠĠĠĠĠ Ġval Ġdownload M anger Ġ= Ġcontext . getSystem Service ( DOWNLOAD _ SERVICE ) Ġas ĠDownload Manager ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdownload M anger . query ( download Query ) ĊĠĠĠĠĠĠĠ Ġval ĠcolumnIndex Ġ= Ġcursor . getColumnIndex ( Download Manager . COLUMN _ STATUS ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . getInt ( column Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDownload Manager . ERROR _ UNKNOWN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbroadcast Receiver (): ĠBroadcast Receiver Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġintent ?. getLong Extra ( Download Manager . EXTRA _ DOWNLOAD _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġdownload Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Download Status () Ġ== ĠDownload Manager . STATUS _ SUCCESS FUL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Download Ġcomplete ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Download Ġnot Ġcomplete ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }