package Ġcom . sha un . coding compet itions Ċ Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Malformed URLException Ċ import Ġjava . net . URL Ċ Ċ enum Ġclass ĠDownload Status Ġ{ ĊĠĠĠ ĠOK , ĠID LE , ĠNOT _ INITIAL I SED , ĠFAILED _ OR _ EMPTY , ĠPER MISSION _ ERROR , ĠERROR Ċ } Ċ Ċ class ĠGet RawData ( private Ġval Ġlistener : ĠO nd own load Complete ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Get RawData " ĊĠĠĠ Ġprivate Ġvar Ġdownload Status Ġ= ĠDownload Status . IDLE ĊĊĠĠĠ Ġinterface ĠO nd own load Complete Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Download Complete ( data : ĠString , Ġstatus : ĠDownload Status , Ġid : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Post Execute ( result : ĠString , Ġid : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on PO st ĠEx Ġwith Ġval Ġ$ result ") ĊĠĠĠĠĠĠĠ Ġlistener ?. on Download Complete ( result , Ġdownload Status , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo In Background ( var arg Ġparams : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Do In Background ĠStarts Ġwith Ġlink Ġ${ params [ 0 ]} ") ĊĠĠĠĠĠĠĠ Ġif Ġ( params [ 0 ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= ĠDownload Status . NOT _ INITIAL I SED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" no ĠURL Ġspecified " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= ĠDownload Status . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" try ing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠData Ġ= ĠURL ( params [ 0 ]). read Text () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĠData ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠData ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMal formed URLException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= ĠDownload Status . NOT _ INITIAL I SED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" do In Background : Invalid ĠURL Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIOException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= ĠDownload Status . FAILED _ OR _ EMPTY ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" do In Background : IO ĠException Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSecurity Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= ĠDownload Status . PERMISSION _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" do In Background : Security ĠException Ġ: ĠGive Ġthe ĠG odd am n Ġpermission Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= ĠDownload Status . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Un k own ĠError Ġ: Ġ${ e . message }" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠerrorMessage ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute ( link : ĠString , Ġid : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo In Background ( link ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Execute ( result , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġdownload String ( link : String ?): String { Ċ // ĠĠĠĠĠĠĠ Ġval Ġresult = StringBuilder () Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl = URL ( link ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection : Http URLConnection = url . open Connection () Ġas ĠHttp URLConnection Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= connection . response Code Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," Response Ġcode Ġwas Ġ$ response ") Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream = connection . inputStream Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin out StreamReader = InputStream Reader ( inputStream ) Ċ //// ĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader = BufferedReader ( inout StreamReader ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= BufferedReader ( InputStream Reader ( connection . inputStream )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Buffer Ġ= CharArray ( Ġ 5 0 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchars Read = 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( chars Read <= 0 ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchars Read = reader . read ( input Buffer ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( chars Read > 0 ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( String ( input Buffer , 0 , chars Read )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreader . close () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," rec ived Ġ${ result . length }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () Ċ // ĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠMal formed URLException ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," FU CK ĠHO Ġg ya Ġ${ e . message }") Ċ // ĠĠĠĠĠĠĠ Ġ} catch Ġ( e : IOException ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," IO ĠEXCEPTION Ġ${ e . message }") Ċ // ĠĠĠĠĠĠĠ Ġ} catch Ġ( e : java . lang . Exception ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," Un k own Ġerror ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ"" Ċ // ĠĠĠ Ġ} Ċ }