package Ġcom . sle ew ell . sle ew ell . mvp . menu . profile . presenter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġcom . sle ew ell . sle ew ell . api . sle ew ell . model . profile . Profile Info Ċ import Ġcom . sle ew ell . sle ew ell . api . sle ew ell . model . profile . ResponseBody Ċ import Ġcom . sle ew ell . sle ew ell . api . sle ew ell . model . profile . Response Success Ċ import Ġcom . sle ew ell . sle ew ell . mvp . main Activity . view . MainActivity Ċ import Ġcom . sle ew ell . sle ew ell . mvp . menu . profile . contract . Profile Contract Ċ import Ġcom . sle ew ell . sle ew ell . mvp . menu . profile . model . Profile Model Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . io .* Ċ Ċ /** Ċ Ġ* ĠPres enter Ġfor Ġthe ĠProfile Ġfragment , Ġit Ġwill Ġlink Ġthe ĠHome View Ġand Ġthe ĠHome Model Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreates Ġa Ġpresenter Ġbased Ġon Ġthe ĠContract Ċ Ġ* Ġ@ param Ġview ĠView Ġthat Ġinherits Ġthe ĠView Ġfrom Ġthe ĠContract Ċ Ġ* Ġ@ param Ġcontext ĠContext Ġof Ġthe Ġactivity Ġ/ Ġview Ċ Ġ* Ġ@ author ĠT it ou an ĠF i anc ette Ċ Ġ*/ Ċ class ĠProfile Presenter ( view : ĠProfile Contract . View , val Ġcontext : ĠContext ) Ġ: ĠProfile Contract . Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġview : ĠProfile Contract . View ? Ġ= Ġview ĊĠĠĠ Ġprivate Ġvar Ġmodel : ĠProfile Contract . Model Ġ= ĠProfile Model ( context ) ĊĠĠĠ Ġprivate Ġvar Ġcoroutine : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġusername : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar ĠfirstName : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar ĠlastName : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġemail : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Profile Information () ĊĠĠĠĠĠĠĠ Ġget Profile Picture () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Profile Information () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġ" Bearer Ġ${ MainActivity . accessToken S le ew ell }" ĊĊĠĠĠĠĠĠĠ Ġmodel . get Profile Information ( token , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠProfile Contract . Model . On Profile Info Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( profile Info : ĠProfile Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! profile Info . username . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Username ( profile Info . username ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Username ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset FirstName ( profile Info . firstname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset LastName ( profile Info . lastname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Email ( profile Info . email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. update Profile Info Widgets ( username , ĠfirstName , ĠlastName , Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Error : Ġcould Ġnot Ġretrieve Ġuser Ġinformation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Profile Information () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠMainActivity . accessToken S le ew ell ĊĊĠĠĠĠĠĠĠ Ġmodel . update Profile Information ( token , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĠfirstName , ĠlastName , Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject : ĠProfile Contract . Model . On Update Profile Info Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( response : ĠResponse Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Saved ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Error : Ġcould Ġnot Ġupdate Ġuser Ġinformation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Profile Picture () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠMainActivity . accessToken S le ew ell ĊĊĠĠĠĠĠĠĠ Ġmodel . get Profile Picture ( token , ĊĠĠĠĠĠĠĠ Ġobject : ĠProfile Contract . Model . On Finished Listener < ResponseBody > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( response : ĠResponse Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . filePath . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. set Profile Picture Bitmap ( response . filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Error : Ġcould Ġnot Ġget Ġuser Ġpicture ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Profile Picture ( picture : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠMainActivity . accessToken S le ew ell ĊĊĠĠĠĠĠĠĠ Ġ// Convert Ġbitmap Ġto Ġbyte Ġarray ĊĠĠĠĠĠĠĠ Ġcoroutine Ġ= ĠCor outine Scope ( Job ()). launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . cacheDir , Ġ" avatar . jpg ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicture . compress ( Bitmap . Compress Format . JPEG , Ġ 5 0 Ġ/* ignored Ġfor ĠPNG */, Ġb os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Data Ġ= Ġb os . toByteArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// write Ġthe Ġbytes Ġin Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġf os : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os ?. write ( bitmap Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os ?. flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmodel . upload Profile Picture ( token , Ġfile ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Avatar ĠSaved ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Error : Ġcould Ġnot Ġupload Ġyour Ġavatar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġretrofit 2 . HttpException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Error : Ġcould Ġnot Ġupload Ġyour Ġavatar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlogout User () Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . remove Token () ĊĠĠĠĠĠĠĠ Ġmodel . delete All Night Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Account () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠMainActivity . accessToken S le ew ell ĊĊĠĠĠĠĠĠĠ Ġmodel . delete Account ( token , ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠProfile Contract . Model . On Finished Listener < Response Success > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( response : ĠResponse Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. logout User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Account Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Toast (" Error : Ġcould Ġnot Ġdelete Ġthe Ġaccount ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Username ( username : ĠString ) Ġ{ Ġthis . username Ġ= Ġusername Ġ} ĊĠĠĠ Ġoverride Ġfun Ġset FirstName ( firstName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( firstName Ġ!= Ġnull ) Ġ{ Ġthis . firstName Ġ= ĠfirstName Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset LastName ( lastName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lastName Ġ!= Ġnull ) Ġ{ Ġthis . lastName Ġ= ĠlastName Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Email ( email : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( email Ġ!= Ġnull ) Ġ{ Ġthis . email Ġ= Ġemail Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġcancel Http Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine ?. cancel () ĊĠĠĠ Ġ} ĊĊ Ċ }