package Ġorg . step ik . android . remote . billing Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . Single Ċ import Ġorg . solo vy ev . android . checkout . Billing Ċ import Ġorg . solo vy ev . android . checkout . Checkout Ċ import Ġorg . solo vy ev . android . checkout . Inventory Ċ import Ġorg . solo vy ev . android . checkout . Purchase Ċ import Ġorg . solo vy ev . android . checkout . P urchases Ċ import Ġorg . solo vy ev . android . checkout . RequestListener Ċ import Ġorg . solo vy ev . android . checkout . Sku Ċ import Ġorg . step ic . d roid . di . qual ifiers . Main Scheduler Ċ import Ġorg . step ic . d roid . util . consume Rx Ċ import Ġorg . step ic . d roid . util . on Ready Ċ import Ġorg . step ik . android . data . billing . source . Billing Remote DataSource Ċ import Ġorg . step ik . android . domain . billing . exception . Billing NotSupportedException Ċ import Ġorg . step ik . android . view . injection . billing . System Checkout Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠBilling Remote DataSource Impl Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġbilling : ĠBilling , ĊĊĠĠĠ Ġ@ System Checkout ĊĠĠĠ Ġprivate Ġval Ġcheckout : ĠCheckout , ĊĊĠĠĠ Ġ@ Main Scheduler ĊĠĠĠ Ġprivate Ġval Ġmain Scheduler : ĠScheduler Ċ ) Ġ: ĠBilling Remote DataSource Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Inventory ( product Type : ĠString , Ġsku Ids : ĠList < String >): ĠSingle < List < Sku >> Ġ= ĊĠĠĠĠĠĠĠ ĠSingle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create < List < Sku >> Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠInventory . Request . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . load All P urchases () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . load Sk us ( product Type , Ġsku Ids . distinct ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheckout . load Inventory ( request ) Ġ{ Ġproducts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! emitter . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct Ġ= Ġproducts [ product Type ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( product . supported ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . on Success ( product . sk us ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( Billing NotSupportedException ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( main Scheduler ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll P urchases ( product Type : ĠString ): ĠSingle < List < Purchase >> Ġ= ĊĠĠĠĠĠĠĠ ĠSingle . create Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Requests Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll P urchases ( product Type , Ġobject Ġ: ĠRequest Listener < P urchases > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( p urchases : ĠP urchases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! emitter . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . on Success ( p urchases . list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( response : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! emitter . is Disposed ) Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconsume Purchase ( purchase : ĠPurchase ): ĠComp letable Ġ= ĊĠĠĠĠĠĠĠ Ġcheckout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Ready () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ Ġrequests Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequests . consume Rx ( purchase . token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( main Scheduler ) Ċ }