package Ġkr . ac . k pu . l bs _ platform . global Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . android . vol ley .* Ċ import Ġcom . android . vol ley . Request Queue . Request Finished Listener Ċ import Ġcom . android . vol ley . toolbox . JsonObject Request Ċ import Ġcom . android . vol ley . toolbox . String Request Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkr . ac . k pu . l bs _ platform . activity . MainActivity Ċ import Ġorg . json . JSONObject Ċ import Ġsplit ties . toast . toast Ċ import Ġjava . nio . charset . Charset Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ class ĠRequest Helper Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġfn : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġrequest () Ġ{ ĊĠĠĠĠĠĠĠ Ġfn () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Body ContentType Ġ= Ġ" application / x - www - form - urlencoded ; Ġcharset = UTF - 8 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder < T Ġ: Ġkr . ac . k pu . l bs _ platform . po ko . remote . Request >( var Ġpok o : ĠK Class < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Fragment : ĠFragment ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġdest Fragment : ĠFragment ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġurl Parameter : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġparams : ĠMap < String , ĠString > Ġ= Ġmap Of () ĊĠĠĠĠĠĠĠ Ġvar Ġjson Obj : ĠJSONObject ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġform Obj : ĠByteArray ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġmethod : ĠInt Ġ= ĠRequest . Method . POST ĊĠĠĠĠĠĠĠ Ġvar Ġqueue : ĠRequest Queue ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġbody ContentType : ĠString Ġ= Ġdefault Body ContentType ĊĠĠĠĠĠĠĠ Ġvar Ġis Async : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar ĠbaseUrl : ĠString Ġ= ĠServer Url . url ĊĠĠĠĠĠĠĠ Ġvar Ġbypass Fail : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġrequest Type : ĠString Ġ= Ġ" string " ĊĠĠĠĠĠĠĠ Ġvar Ġon Failure Callback : Ġ( response Object : ĠT ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Fragment ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( response . comment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar ĠonSuccess Callback : Ġ( response Object : ĠT ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Fragment ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest Fragment Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Fragment ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Ch anger . change ( it , Ġdest Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġraw On Success Callback : Ġ( response Object : ĠNetwork Response ) Ġ-> ĠUnit Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfn () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Name Ġ= Ġcurrent Fragment ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ" Request Helper " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( context Ġ== Ġnull Ġ&& Ġactivity Ġ== Ġnull Ġ&& Ġcurrent Fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= Ġcurrent Fragment ?. activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( queue Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġ= ĠVol ley . new Request Queue ( MainActivity . instance !!. application Context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Response Ġ= Ġ{ Ġresponse : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Request Helper ", Ġresponse . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Object Ġ= Ġgson . fromJson ( response , Ġpok o . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response Object . success Ġ&& Ġ! bypass Fail ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Fragment ?. toast ( response Object . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Callback ( response Object Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠonError Ġ= Ġ{ Ġerror : ĠVol ley Error ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( fragment Name , Ġerror . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ?. network Response ?. data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= ĠString ( it , ĠCharset . default Charset ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( fragment Name , Ġresponse Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġgson . fromJson ( response Body , Ġpok o . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( fragment Name , Ġrequest . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Callback ( request Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( request Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġobject Ġ: ĠString Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , Ġ"${ baseUrl }/ $ url Parameter ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> Ġon Response ( e )}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> ĠonError ( e )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Body ContentType (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this @ Builder . body ContentType Ġ== Ġdefault Body ContentType Ġ&& Ġmethod Ġ== ĠRequest . Method . GET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Builder . body ContentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Auth Failure Error :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġget Params (): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Builder . params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue ?. add ( req ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" json " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġobject Ġ: ĠJsonObject Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , Ġ"${ baseUrl }/ $ url Parameter ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Obj , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> Ġon Response ( e . toString ()) }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> ĠonError ( e )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue ?. add ( req ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" form " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġobject Ġ: ĠVol ley Multipart Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , Ġ"${ baseUrl }/ $ url Parameter ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> Ġraw On Success Callback ( e )}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> ĠonError ( e )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Byte Data (): ĠMutable Map < String , ĠData Part > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmutable Map Of ( Pair (" file ", ĠData Part (" image 1 . png ", Ġform Obj ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue ?. add ( req ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠRequest Helper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRequest Helper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Async ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }