package Ġcom . ad ap ty . api Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġcom . ad ap ty . api . requests .* Ċ import Ġcom . ad ap ty . api . responses .* Ċ import Ġcom . ad ap ty . utils . Log Helper Ċ import Ġcom . ad ap ty . utils . Preference Manager Ċ import Ġcom . google . gson . Gson Ċ import Ġjava . io .* Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . zip . GZIP InputStream Ċ Ċ const Ġval ĠAUTH ORIZ ATION _ KEY Ġ= Ġ" Authorization " Ċ const Ġval ĠAPI _ KEY _ PREFIX Ġ= Ġ" Api - Key Ġ" Ċ const Ġval ĠTAG Ġ= Ġ"[ Ad ap ty ]" Ċ const Ġval ĠTIME OUT Ġ= Ġ 3 0 Ġ* Ġ 1 0 0 0 Ċ Ċ class ĠApi Client ( private Ġvar Ġcontext : ĠContext , Ġprivate Ġval Ġgson Ġ: ĠGson ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġserver Url Ġ= Ġ" https :// api . ad ap ty . io / api / v 1 /" ĊĠĠĠ Ġprivate Ġval Ġpreference Manager Ġ= ĠPreference Manager ( context ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCREATE _ PROFILE _ REQ _ ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUPDATE _ PROFILE _ REQ _ ID Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSY NC _ META _ REQ _ ID Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVALID ATE _ PUR CH ASE _ REQ _ ID Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREST ORE _ PUR CH ASE _ REQ _ ID Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGET _ PROFILE _ REQ _ ID Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGET _ CONTAIN ERS _ REQ _ ID Ġ= Ġ 6 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUPDATE _ ATTRIBUT ION _ REQ _ ID Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGET _ PRO MO _ REQ _ ID Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEXTER NAL _ ANAL YT ICS _ ENABLED _ REQ _ ID Ġ= Ġ 9 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTRAN SACTION _ VARI ATION _ REQ _ ID Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPOST Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP ATCH Ġ= Ġ" PATCH " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGET Ġ= Ġ" GET " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Profile ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠCreate Profile Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( CREATE _ PROFILE _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Profile Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE _ PROFILE _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Profile ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠUpdate Profile Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpatch ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( UPDATE _ PROFILE _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Profile Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUPDATE _ PROFILE _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Profile ( ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( GET _ PROFILE _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP urch aser Info Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET _ PROFILE _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Pay wall s ( ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( GET _ CONTAIN ERS _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPay wall s Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET _ CONTAIN ERS _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsync Meta ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠSync Meta Install Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( SYNC _ META _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSync Meta Install Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSY NC _ META _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate Purchase ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠValidate Receipt Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( VALIDATE _ PUR CH ASE _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValidate Receipt Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVALID ATE _ PUR CH ASE _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestore Purchase ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠRestore Receipt Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( REST ORE _ PUR CH ASE _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRestore Receipt Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREST ORE _ PUR CH ASE _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate At tribution ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠUpdate At tribution Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( UPDATE _ ATTRIBUT ION _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAny (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUPDATE _ ATTRIBUT ION _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset External Analytics Enabled ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠExternal Analytics Enabled Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( EXTERNAL _ ANAL YT ICS _ ENABLED _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAny (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEXTER NAL _ ANAL YT ICS _ ENABLED _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Transaction Variation Id ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠTransaction Variation Id Request , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( TRANSACTION _ VARI ATION _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAny (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTRAN SACTION _ VARI ATION _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Promo ( ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Url ( GET _ PRO MO _ REQ _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProm o Response (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET _ PRO MO _ REQ _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest ( ĊĠĠĠĠĠĠĠ Ġtype : ĠString , ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġo response : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġreq ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr String Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Url Ġ= ĠURL ( url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġmy Url . open Connection () Ġas ĠHttp URLConnection ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . read Timeout Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . connect Timeout Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . request Method Ġ= Ġtype ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property (" Content - type ", Ġ" application / vnd . api + json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property (" Accept - Encoding ", Ġ" gzip ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property (" ADAP TY - SDK - PROFILE - ID ", Ġpreference Manager . profile ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property (" ADAP TY - SDK - PLATFORM ", Ġ" Android ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetCurrent Locale ( context )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ADAP TY - SDK - LOCAL E ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . language }_${ it . country }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property (" ADAP TY - SDK - VERSION ", Ġcom . ad ap ty . Build Config . VERSION _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ADAP TY - SDK - VERSION - BUILD ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . ad ap ty . Build Config . VERSION _ CODE . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAUTH ORIZ ATION _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAPI _ KEY _ PREFIX . plus ( preference Manager . app Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . setRequest Property (" Connection ", Ġ" close ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . setProperty (" java . net . prefer IPv 4 Stack ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . setProperty (" http . keep Alive ", Ġ" false ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . do Input Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= ĠGET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġgson . toJson ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . do Output Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġos Ġ= Ġconn . output Stream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBuffered Writer ( OutputStream Writer ( os , Ġ" UTF - 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( req ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . connect () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Code Ġ= Ġconn . response Code ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Code Ġ== ĠHttp URLConnection . HTTP _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġresponse Code Ġ== ĠHttp URLConnection . HTTP _ CREATED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġresponse Code Ġ== ĠHttp URLConnection . HTTP _ ACCEPT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġresponse Code Ġ== ĠHttp URLConnection . HTTP _ NO _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġresponse Code Ġ== Ġ 2 0 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġresponse Code Ġ== Ġ 2 0 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġconn . inputStream ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr String Ġ= ĠtoString Utf 8 ( inputStream , ĠisIn G zip ( conn )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr String Ġ= ĠtoString Utf 8 ( conn . error Stream , ĠisIn G zip ( conn )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAd ap ty Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Request Ġis Ġun successful . Ġ$ req ID ĠUrl : Ġ$ my Url ĠResponse ĠCode : Ġ$ response Code , ĠMessage : Ġ$ r String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty ErrorCode Ġ= ĠAd ap ty ErrorCode . from Network ( response Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Runnable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAd ap ty Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Error Ġ= Ġe , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Request ĠException . Ġ$ req ID Ġ${ e . message } Ġ${ e . localized Message } ĠMessage : Ġ$ r String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty ErrorCode Ġ= ĠAd ap ty ErrorCode . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Runnable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse Obj : ĠAny ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Obj Ġ= Ġif Ġ( ore sponse Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( r String , Ġo response . java Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ( response Obj , Ġreq ID , Ġad ap ty Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAd ap ty Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Error Ġ= Ġe , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Request ĠException . Ġ$ req ID Ġ${ e . message } Ġ${ e . localized Message } ĠMessage : Ġ$ r String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty ErrorCode Ġ= ĠAd ap ty ErrorCode . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Locale ( context : ĠContext ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . configuration . locales . get ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . configuration . locale ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest : ĠAny , ĊĠĠĠĠĠĠĠ Ġo response : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġreq ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest ( POST , Ġurl , Ġrequest , Ġo response , Ġreq ID , Ġad ap ty Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpatch ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest : ĠAny , ĊĠĠĠĠĠĠĠ Ġo response : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġreq ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest ( PATCH , Ġurl , Ġrequest , Ġo response , Ġreq ID , Ġad ap ty Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġo response : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġreq ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest ( GET , Ġurl , Ġnull , Ġo response , Ġreq ID , Ġad ap ty Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsuccess ( ĊĠĠĠĠĠĠĠ Ġresponse : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġreq ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . log Verbose (" Response Ġsuccess Ġ$ req ID ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Handler Ġ= ĠHandler ( context . main Looper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Runnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty System Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . success ( response , Ġreq ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Profile Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result (( response Ġas ĠUpdate Profile Response ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Validate Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result (( response Ġas ĠValidate Receipt Response ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Restore Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result (( response Ġas ĠRestore Receipt Response ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty P urch aser Info Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġ( response Ġas ĠP urch aser Info Response ). data ?. attributes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( res , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Pay wall s Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġ( response Ġas ĠPay wall s Response ). data Ġ?: Ġarray ListOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= Ġ( response ). meta ?. products Ġ?: Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( data , Ġmeta , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Prom os Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result (( response Ġas ? ĠProm o Response )?. data ?. attributes , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler . post ( my Runnable ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . log Error (" Callback Ġsuccess Ġerror Ġ$ req ID : Ġ${ e . message } Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfail ( ĊĠĠĠĠĠĠĠ Ġerror : ĠAd ap ty Error , ĊĠĠĠĠĠĠĠ Ġreq ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġad ap ty Callback : ĠAd ap ty Callback ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . log Error (" Request Ġfailed Ġ$ req ID Ġ${ error . message }") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Handler E Ġ= ĠHandler ( context . main Looper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Runnable E Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġad ap ty Callback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty System Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . fail ( error , Ġreq ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Profile Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( null , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Validate Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( null , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Restore Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( null , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty P urch aser Info Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( null , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAd ap ty Pay wall s Callback Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Result ( array ListOf (), Ġarray ListOf (), Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler E . post ( my Runnable E ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . log Error (" Callback ĠFail Ġerror Ġ$ req ID : Ġ${ e . message } Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠtoString Utf 8 ( inputStream : ĠInputStream , ĠisIn G zip : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠBufferedReader ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInputStreamReader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn G zip ) ĠG ZIP InputStream ( inputStream ) Ġelse ĠinputStream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChar sets . UTF _ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? Ġ= Ġr . readLine () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal . append ( line ). append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġr . readLine () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Url ( req Id : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( req Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE _ PROFILE _ REQ _ ID , ĠUPDATE _ PROFILE _ REQ _ ID , ĠGET _ PROFILE _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / analytics / profiles /${ preference Manager . profile ID }/ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSY NC _ META _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / analytics / profiles /${ preference Manager . profile ID }/ installation - metas /${ preference Manager . installation Meta ID }/ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVALID ATE _ PUR CH ASE _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / in - apps / google / token / validate /" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREST ORE _ PUR CH ASE _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / in - apps / google / token / restore /" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET _ CONTAIN ERS _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / in - apps / purchase - containers /? profile _ id =${ preference Manager . profile ID }& automatic _ pay wall s _ screen _ reporting _ enabled = false " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUPDATE _ ATTRIBUT ION _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / analytics / profiles /${ preference Manager . profile ID }/ at tribution /" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET _ PRO MO _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / analytics / profiles /${ preference Manager . profile ID }/ promo /" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEXTER NAL _ ANAL YT ICS _ ENABLED _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / analytics / profiles /${ preference Manager . profile ID }/ analytics - enabled /" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTRAN SACTION _ VARI ATION _ REQ _ ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ server Url } sdk / in - apps / transaction - variation - id /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġserver Url ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn G zip ( conn : ĠHttp URLConnection ) Ġ= ĊĠĠĠĠĠĠĠ Ġconn . getHeader Field (" Content - Encoding ") ?. contains (" gzip ", Ġtrue ) Ġ?: Ġfalse Ċ } Ċ