// Ġ ĠP urchases Ċ // Ċ // Ġ ĠCopyright ĠÂ© Ġ 2 0 1 9 ĠRe venue Cat , ĠInc . ĠAll Ġrights Ġreserved . Ċ // Ċ Ċ package Ġcom . re venue cat . p urchases Ċ Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġorg . json . JSONObject Ċ import Ġjava . util . Date Ċ Ċ /** Ċ Ġ* ĠClass Ġcontaining Ġall Ġinformation Ġregarding Ġthe Ġpurch aser Ċ Ġ* Ġ@ property Ġpurch ased Non Subscription Sk us ĠSet Ġof Ġnon - subscription , Ġnon - consumed Ġsk us Ċ Ġ* Ġ@ property Ġall Expiration Dates By Product ĠMap Ġof Ġsk us Ġto Ġexpiration Ġdates Ċ Ġ* Ġ@ property Ġall Purchase Dates By Product ĠMap Ġof Ġsk us Ġto Ġpurchase Ġdates Ċ Ġ* Ġ@ property Ġall Expiration Dates By Ent itlement ĠMap Ġof Ġent itlement Ġids Ġto Ġexpiration Ġdates Ċ Ġ* Ġ@ property Ġall Purchase Dates By Ent itlement ĠMap Ġof Ġent itlement Ġids Ġto Ġpurchase Ġdates Ċ Ġ* Ġ@ property Ġrequest Date ĠDate Ġwhen Ġthis Ġinfo Ġwas Ġrequested Ċ Ġ*/ Ċ class ĠP urch aser Info Ġinternal Ġconstructor ( ĊĠĠĠ Ġval Ġpurch ased Non Subscription Sk us : ĠSet < String >, ĊĠĠĠ Ġval Ġall Expiration Dates By Product : ĠMap < String , ĠDate ? >, ĊĠĠĠ Ġval Ġall Purchase Dates By Product : ĠMap < String , ĠDate ? >, ĊĠĠĠ Ġval Ġall Expiration Dates By Ent itlement : ĠMap < String , ĠDate ? >, ĊĠĠĠ Ġval Ġall Purchase Dates By Ent itlement : ĠMap < String , ĠDate ? >, ĊĠĠĠ Ġval Ġrequest Date : ĠDate ?, ĊĠĠĠ Ġinternal Ġval ĠjsonObject : ĠJSONObject Ċ ) Ġ: ĠParcel able Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( parcel : ĠParcel ): Ġthis ( ĊĠĠĠĠĠĠĠ Ġparcel . readInt (). let Ġ{ Ġsize Ġ-> Ġ( 0 Ġuntil Ġsize ). map Ġ{ Ġparcel . readString () Ġ}. toSet () Ġ}, ĊĠĠĠĠĠĠĠ Ġparcel . readString Date Map (), ĊĠĠĠĠĠĠĠ Ġparcel . readString Date Map (), ĊĠĠĠĠĠĠĠ Ġparcel . readString Date Map (), ĊĠĠĠĠĠĠĠ Ġparcel . readString Date Map (), ĊĠĠĠĠĠĠĠ Ġparcel . read Long (). let Ġ{ Ġdate Ġ-> Ġif Ġ( date Ġ== Ġ- 1 L ) Ġnull Ġelse ĠDate ( date ) Ġ}, ĊĠĠĠĠĠĠĠ ĠJSONObject ( parcel . readString ()) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠSet Ġof Ġactive Ġsubscription Ġsk us ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġactive Subscriptions : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġactive Identifiers ( all Expiration Dates By Product ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠSet Ġof Ġpurch ased Ġsk us , Ġactive Ġand Ġinactive ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġall Purchase d Sk us : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . purchase d Non Subscription Sk us Ġ+ Ġall Expiration Dates By Product . keys ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġlatest Ġexpiration Ġdate Ġof Ġall Ġpurch ased Ġsk us ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlatest Expiration Date : ĠDate ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġall Expiration Dates By Product . values . sorted By Ġ{ Ġit Ġ}. take Unless Ġ{ Ġit . isEmpty () Ġ} ?. last () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġidentifiers Ġof Ġall Ġthe Ġactive Ġent itlement s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġactive Ent itlement s : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġactive Identifiers ( all Expiration Dates By Ent itlement ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġexpiration Ġdate Ġfor Ġa Ġgiven Ġsku ĊĠĠĠĠ Ġ* Ġ@ param Ġsku ĠSk u Ġfor Ġwhich Ġto Ġretrieve Ġexpiration Ġdate ĊĠĠĠĠ Ġ* Ġ@ return ĠExp iration Ġdate Ġfor Ġgiven Ġsku ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Expiration Date For Sku ( sku : ĠString ): ĠDate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġall Expiration Dates By Product [ sku ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġpurchase Ġdate Ġfor Ġgiven Ġsku ĊĠĠĠĠ Ġ* Ġ@ param Ġsku ĠSk u Ġfor Ġwhich Ġto Ġretrieve Ġexpiration Ġdate ĊĠĠĠĠ Ġ* Ġ@ return ĠPurchase Ġdate Ġfor Ġgiven Ġsku ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Purchase Date For Sku ( sku : ĠString ): ĠDate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġall Purchase Dates By Product [ sku ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġexpiration Ġdate Ġfor Ġa Ġgiven Ġent itlement ĊĠĠĠĠ Ġ* Ġ@ param Ġent itlement ĠEnt itlement Ġfor Ġwhich Ġto Ġreturn Ġexpiration Ġdate ĊĠĠĠĠ Ġ* Ġ@ return ĠExp iration Ġdate Ġfor Ġa Ġgiven Ġent itlement ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Expiration Date For Ent itlement ( ent itlement : ĠString ): ĠDate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġall Expiration Dates By Ent itlement [ ent itlement ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġpurchase Ġdate Ġfor Ġa Ġgiven Ġent itlement ĊĠĠĠĠ Ġ* Ġ@ param Ġent itlement ĠEnt itlement Ġfor Ġwhich Ġto Ġreturn Ġpurchase Ġdate ĊĠĠĠĠ Ġ* Ġ@ return ĠPurchase Ġdate Ġfor Ġgiven Ġent itlement ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Purchase Date For Ent itlement ( ent itlement : ĠString ): ĠDate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġall Purchase Dates By Ent itlement [ ent itlement ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġactive Identifiers ( exp ir ations : ĠMap < String , ĠDate ?> ): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexp ir ations . filter Values Ġ{ Ġdate Ġ-> Ġdate Ġ== Ġnull Ġ|| Ġdate . after ( request Date Ġ?: ĠDate ()) Ġ}. keys ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠP urch aser Info ĊĊĠĠĠĠĠĠĠ Ġif Ġ( all Expiration Dates By Product Ġ!= Ġother . all Expiration Dates By Product ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( all Purchase Dates By Product Ġ!= Ġother . all Purchase Dates By Product ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( all Expiration Dates By Ent itlement Ġ!= Ġother . all Expiration Dates By Ent itlement ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( all Purchase Dates By Ent itlement Ġ!= Ġother . all Purchase Dates By Ent itlement ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( purchase d Non Subscription Sk us Ġ!= Ġother . purchase d Non Subscription Sk us ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( active Ent itlement s Ġ!= Ġother . active Ent itlement s ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĊĠĠĠĠĠĠĠ Ġ"< P urch aser Info \ n Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" latest Expiration Date : Ġ$ latest Expiration Date \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" active Subscriptions : Ġ Ġ${ active Subscriptions . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto Ġmap Of (" expires Date " Ġto Ġget Expiration Date For Sku ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap ()}, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" active Ent itlement s : Ġ${ active Ent itlement s . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto Ġmap Of (" expires Date " Ġto Ġget Expiration Date For Ent itlement ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap ()}, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" non Consum able P urchases : Ġ$ purchase d Non Subscription Sk us ,\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" request Date : Ġ$ request Date \ n >" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( parcel : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparcel . writeInt ( purchase d Non Subscription Sk us . size ) ĊĠĠĠĠĠĠĠ Ġpurch ased Non Subscription Sk us . forEach Ġ{ Ġentry Ġ-> Ġparcel . writeString ( entry ) Ġ} ĊĠĠĠĠĠĠĠ Ġparcel . writeString Date Map ( all Expiration Dates By Product ) ĊĠĠĠĠĠĠĠ Ġparcel . writeString Date Map ( all Purchase Dates By Product ) ĊĠĠĠĠĠĠĠ Ġparcel . writeString Date Map ( all Expiration Dates By Ent itlement ) ĊĠĠĠĠĠĠĠ Ġparcel . writeString Date Map ( all Purchase Dates By Ent itlement ) ĊĠĠĠĠĠĠĠ Ġparcel . write Long ( request Date ?. time Ġ?: Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġparcel . writeString ( jsonObject . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġpurch ased Non Subscription Sk us . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġall Expiration Dates By Product . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġall Purchase Dates By Product . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġall Expiration Dates By Ent itlement . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġall Purchase Dates By Ent itlement . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( request Date ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠjsonObject . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < P urch aser Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( parcel : ĠParcel ): ĠP urch aser Info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠP urch aser Info ( parcel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < P urch aser Info ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ