/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ 2 0 2 1 Ġr js uz uki Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . z uk o . billing z . amazon . store . client Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . amazon . device . dr m . Lic ensing Service Ċ import Ġcom . amazon . device . i ap . P urch asing Listener Ċ import Ġcom . amazon . device . i ap . P urch asing Service Ċ import Ġcom . amazon . device . i ap . model . Product Data Response Ċ import Ġcom . amazon . device . i ap . model . Purchase Response Ċ import Ġcom . amazon . device . i ap . model . Purchase Updates Response Ċ import Ġcom . amazon . device . i ap . model . UserData Response Ċ import Ġcom . z uk o . billing z . amazon . store . inventory . Amazon Inventory z Ċ import Ġcom . z uk o . billing z . amazon . store . sales . Amazon Sale z Ċ import Ġcom . z uk o . billing z . core . Log Util z Ċ import Ġcom . z uk o . billing z . core . store . client . Client z Ċ Ċ class ĠAmazon Client ( val Ġinventory : ĠAmazon Inventory z , Ġval Ġsales : ĠAmazon Sale z ) Ġ: ĠAmazon Client z Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġis Initialized Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Connected Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar ĠuserData Response : ĠUser Data Response ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġvar Ġconnection State Ġ= ĠMutable LiveData < Client z . Connection Status >() ĊĊĠĠĠ Ġoverride Ġfun Ġinitialized (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Initialized ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Ready (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinitialized () Ġ&& Ġis Connected Ġ&& Ġconnection State . value Ġ== ĠClient z . Connection Status . CONNECTED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( context : ĠContext ?, Ġconnection Listener : ĠClient z . Connection Listener ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( TAG , Ġ" Initializing ĠAmazon Client ") ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ ĠLic ensing Service . verify License ( context ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . d ( TAG , Ġ" License ĠStatus : Ġ${ response . request Status . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( TAG , Ġ" Connecting Ġto ĠAmazon ĠI AP ...") ĊĠĠĠĠĠĠĠ Ġconnection State . post Value ( Client z . Connection Status . CONNECT ING ) ĊĠĠĠĠĠĠĠ Ġregister P urch asing Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection State . post Value ( Client z . Connection Status . CLOSED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest UserData () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( TAG , Ġ" Request ing Ġuser Ġdata ...") ĊĠĠĠĠĠĠĠ Ġ// ĠCall Ġthis Ġmethod Ġto Ġretrieve Ġthe Ġapp - specific ĠID Ġand Ġmarket place Ġfor Ġthe Ġuser Ġwho Ġis ĊĠĠĠĠĠĠĠ Ġ// Ġcurrently Ġlogged Ġon . ĠFor Ġexample , Ġif Ġa Ġuser Ġswitched Ġaccounts Ġor Ġif Ġmultiple Ġusers ĊĠĠĠĠĠĠĠ Ġ// Ġaccessed Ġyour Ġapp Ġon Ġthe Ġsame Ġdevice , Ġthis Ġcall Ġwill Ġhelp Ġyou Ġmake Ġsure Ġthat Ġthe Ġreceipt s ĊĠĠĠĠĠĠĠ Ġ// Ġthat Ġyou Ġretrieve Ġare Ġfor Ġthe Ġcurrent Ġuser Ġaccount . ĊĠĠĠĠĠĠĠ Ġval Ġuser RequestId Ġ= ĠP urch asing Service . getUser Data () Ġ// Ġclient ĊĠĠĠĠĠĠĠ ĠLog Util z . log . d ( TAG , Ġ" UserData Ġrequest Ġid : Ġ$ user RequestId ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister P urch asing Listener () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( TAG , Ġ" register Listener ") ĊĊĠĠĠĠĠĠĠ ĠP urch asing Service . register Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠP urch asing Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon UserData Response ( response : ĠUser Data Response ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . d ( TAG , Ġ" on Purchase Updates Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInv oked Ġafter Ġa Ġcall Ġto Ġget UserData (). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermines Ġthe ĠUserId Ġand Ġmarket place Ġof Ġthe Ġcurrently Ġlogged Ġon Ġuser . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( response ?. request Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Data Response . Request Status . SUCCESS FUL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Successful Ġuser Ġdata Ġrequest : Ġ${ response . requestId }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n marketplace : Ġ${ response . userData ?. marketplace }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Response Ġ= Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State . post Value ( Client z . Connection Status . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Data Response . Request Status . FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . e ( TAG , Ġ" Failed Ġuser Ġdata Ġrequest : Ġ${ response . requestId }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State . post Value ( Client z . Connection Status . DIS CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Data Response . Request Status . NOT _ SUPPORTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . w tf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported Ġuser Ġdata Ġrequest : Ġ${ response . requestId }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unknown Ġrequest Ġstatus : Ġ${ response ?. requestId }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Product Data Response ( response : ĠProduct Data Response ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . d ( TAG , Ġ" on Product Data Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInv oked Ġafter Ġa Ġcall Ġto Ġget Product Data Request ( java . util . Set Ġsk us ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieves Ġinformation Ġabout ĠSK Us Ġyou Ġwould Ġlike Ġto Ġsell Ġfrom Ġyour Ġapp . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġvalid ĠSK Us Ġin Ġon Purchase Response (). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinventory . process Qu er ied Products ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Purchase Response ( response : ĠPurchase Response ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . d ( TAG , Ġ" on Purchase Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInv oked Ġafter Ġa Ġcall Ġto Ġpurchase ( String Ġsku ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUsed Ġto Ġdetermine Ġthe Ġstatus Ġof Ġa Ġpurchase . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsales . process Purchase ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Purchase Updates Response ( response : ĠPurchase Updates Response ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util z . log . d ( TAG , Ġ" on Purchase Updates Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInv oked Ġafter Ġa Ġcall Ġto Ġget Purchase Updates ( boolean Ġreset ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieves Ġthe Ġpurchase Ġhistory . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAmazon Ġrecomm ends Ġthat Ġyou Ġpersist Ġthe Ġreturned ĠPurchase Updates Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdata Ġand Ġquery Ġthe Ġsystem Ġonly Ġfor Ġupdates . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsales . process Purchase Updates ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( TAG , Ġ" disconnect ing Ġfrom ĠAmazon ĠI AP ") ĊĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġconnection State . post Value ( Client z . Connection Status . DIS CONNECTED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Connection () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" check Connection :" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n SDK _ VERSION : Ġ${ P urch asing Service . SDK _ VERSION }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n SDK _ MODE : Ġ${ Lic ensing Service . getApp store SDK Mode () }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Ready ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest UserData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util z . log . v ( TAG , Ġ" Destroy ing Ġclient ...") ĊĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdisconnect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Amazon Client " ĊĠĠĠ Ġ} Ċ } Ċ