package Ġir . ca feb az aar . pool a key . billing . connection Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġir . ca feb az aar . pool a key . Purchase Type Ċ import Ġir . ca feb az aar . pool a key . billing . purchase . Purchase Weak Holder Ċ import Ġir . ca feb az aar . pool a key . billing . query . Query Function Ċ import Ġir . ca feb az aar . pool a key . billing . query . Query Function Request Ċ import Ġir . ca feb az aar . pool a key . billing . sk ude tail . Sku Detail Function Request Ċ import Ġir . ca feb az aar . pool a key . billing . sk ude tail . extract Sku Detail Data From Bundle Ċ import Ġir . ca feb az aar . pool a key . callback . Connection Callback Ċ import Ġir . ca feb az aar . pool a key . callback . Consume Callback Ċ import Ġir . ca feb az aar . pool a key . callback . Get Sku Details Callback Ċ import Ġir . ca feb az aar . pool a key . callback . Purchase Intent Callback Ċ import Ġir . ca feb az aar . pool a key . callback . Purchase Query Callback Ċ import Ġir . ca feb az aar . pool a key . config . Payment Configuration Ċ import Ġir . ca feb az aar . pool a key . config . Security Check Ċ import Ġir . ca feb az aar . pool a key . constant . B az aar Intent Ċ import Ġir . ca feb az aar . pool a key . constant . B az aar Intent . REQUEST _ SK U _ DETAILS _ LIST Ċ import Ġir . ca feb az aar . pool a key . constant . Billing Ċ import Ġir . ca feb az aar . pool a key . constant . Const . BA ZA AR _ PACKAGE _ NAME Ċ import Ġir . ca feb az aar . pool a key . exception . B az aar NotSupportedException Ċ import Ġir . ca feb az aar . pool a key . exception . Consume FailedException Ċ import Ġir . ca feb az aar . pool a key . exception . Disconnect Exception Ċ import Ġir . ca feb az aar . pool a key . exception . I AP NotSupportedException Ċ import Ġir . ca feb az aar . pool a key . exception . Purchase H ij ack ed Exception Ċ import Ġir . ca feb az aar . pool a key . exception . Result Not Ok ay Exception Ċ import Ġir . ca feb az aar . pool a key . exception . Sub s NotSupportedException Ċ import Ġir . ca feb az aar . pool a key . get Package Info Ċ import Ġir . ca feb az aar . pool a key . receiver . Billing Receiver Ċ import Ġir . ca feb az aar . pool a key . receiver . Billing Receiver Com municator Ċ import Ġir . ca feb az aar . pool a key . request . Purchase Request Ċ import Ġir . ca feb az aar . pool a key . request . purchase Extra Data Ċ import Ġir . ca feb az aar . pool a key . sdk Aware Version Code Ċ import Ġir . ca feb az aar . pool a key . security . Security Ċ import Ġir . ca feb az aar . pool a key . take If Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ internal Ġclass ĠReceiver Billing Connection ( ĊĠĠĠ Ġprivate Ġval Ġpayment Configuration : ĠPayment Configuration , ĊĠĠĠ Ġprivate Ġval Ġquery Function : ĠQuery Function Ċ ) Ġ: ĠBilling Connection Com municator Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġconsume Callback : Ġ( Consume Callback . () Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġquery Callback : Ġ( Purchase Query Callback . () Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsku Detail Callback : Ġ( Get Sku Details Callback . () Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġconnection Callback Reference : ĠWeak Reference < Connection Callback >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcontext Reference : ĠWeak Reference < Context >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġreceiver Com municator : ĠBilling Receiver Com municator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdisconnected : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġpurchase Fragment Weak Reference : ĠWeak Reference < Purchase Weak Holder < Fragment >> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpurchase Activity Weak Reference : ĠWeak Reference < Purchase Weak Holder < Activity >> ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġstart Connection ( context : ĠContext , Ġcallback : ĠConnection Callback ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection Callback Reference Ġ= ĠWeak Reference ( callback ) ĊĠĠĠĠĠĠĠ Ġcontext Reference Ġ= ĠWeak Reference ( context ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Security . verify B az aar Is Installed ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbaz aar Version Code Ġ= Ġget Package Info ( context , ĠB AZ A AR _ PACKAGE _ NAME )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsdk Aware Version Code ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Connect With Receiver Component ( baz aar Version Code ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Receiver Connection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Broadcast () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Purchase Type Supported () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbaz aar Version Code Ġ> Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . connection Failed . invoke ( B az aar NotSupportedException ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Connect With Receiver Component ( baz aar Version Code : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbaz aar Version Code Ġ> ĠB AZ A AR _ WITH _ RECE IVER _ CONNECTION _ VERSION ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Receiver Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġreceiver Com municator Ġ= Ġobject Ġ: ĠBilling Receiver Com municator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Broadcast Received ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent ?. action ?. take If ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis IsTrue Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Bundle Signature Valid ( intent . extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand IfNot Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Callback Reference ?. get ()?. connection Failed ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPurchase H ij ack ed Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. take If ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis IsTrue Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! disconnected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand IfNot Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Callback Reference ?. get ()?. connection Failed ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDis connect Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. let Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Received ( action , Ġintent . extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Action Received ( action : ĠString , Ġextras : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RECEIVE _ B ILL ING _ SUPPORT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Billing Support Action Received ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RECEIVE _ CON SU ME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Consume Action Received ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RECEIVE _ PUR CH ASE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Purchase Received ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RECEIVE _ QUERY _ PUR CH ASE S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Purchase Received ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RECEIVE _ SK U _ DETAILS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Get Sku Details Received ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Purchase Type Supported () Ġ{ ĊĠĠĠĠĠĠĠ Ġget New Intent For Broadcast (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠACTION _ B ILL ING _ SUPPORT ĊĠĠĠĠĠĠĠ Ġ}. run (:: send Broadcast ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconsume ( purchase Token : ĠString , Ġcallback : ĠCons ume Callback . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsume Callback Ġ= Ġcallback ĊĊĠĠĠĠĠĠĠ Ġget New Intent For Broadcast (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠACTION _ CON SU ME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ TOKEN , Ġpurchase Token ) ĊĠĠĠĠĠĠĠ Ġ}. run (:: send Broadcast ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Purchase d Products ( ĊĠĠĠĠĠĠĠ Ġpurchase Type : ĠPurchase Type , ĊĠĠĠĠĠĠĠ Ġcallback : ĠPurchase Query Callback . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġget New Intent For Broadcast (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠACTION _ QUERY _ PUR CH ASE S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ ITEM _ TYPE , Ġpurchase Type . type ) ĊĠĠĠĠĠĠĠ Ġ}. run (:: send Broadcast ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpurchase ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠ Ġpurchase Request : ĠPurchase Request , ĊĠĠĠĠĠĠĠ Ġpurchase Type : ĠPurchase Type , ĊĠĠĠĠĠĠĠ Ġcallback : ĠPurchase Intent Callback . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference Ġ= ĠWeak Reference ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPurchase Weak Holder ( activity , Ġpurchase Request . request Code , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsend Purchase Broadcast ( purchase Request , Ġpurchase Type , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpurchase ( ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġpurchase Request : ĠPurchase Request , ĊĠĠĠĠĠĠĠ Ġpurchase Type : ĠPurchase Type , ĊĠĠĠĠĠĠĠ Ġcallback : ĠPurchase Intent Callback . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpurchase Fragment Weak Reference Ġ= ĠWeak Reference ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPurchase Weak Holder ( fragment , Ġpurchase Request . request Code , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsend Purchase Broadcast ( purchase Request , Ġpurchase Type , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sku Details ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠSk u Detail Function Request , ĊĠĠĠĠĠĠĠ Ġcallback : ĠGet Sku Details Callback . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsku Detail Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġget New Intent For Broadcast (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠACTION _ GET _ SK U _ DETAIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ ITEM _ TYPE , Ġrequest . purchase Type . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ArrayList Extra ( REQUEST _ SK U _ DETAILS _ LIST , ĠArrayList ( request . sku Ids )) ĊĠĠĠĠĠĠĠ Ġ}. run (:: send Broadcast ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Purchase Broadcast ( ĊĠĠĠĠĠĠĠ Ġpurchase Request : ĠPurchase Request , ĊĠĠĠĠĠĠĠ Ġpurchase Type : ĠPurchase Type , ĊĠĠĠĠĠĠĠ Ġcallback : ĠPurchase Intent Callback . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPurchase Intent Callback (). apply ( callback ). purchase Flow Be gan . invoke () ĊĠĠĠĠĠĠĠ Ġget New Intent For Broadcast (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠACTION _ PUR CH ASE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ SK U , Ġpurchase Request . productId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ DE VELO PER _ PAYLOAD , Ġpurchase Request . payload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ ITEM _ TYPE , Ġpurchase Type . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( KEY _ EXTRA _ INFO , Ġpurchase Request . purchase Extra Data ()) ĊĠĠĠĠĠĠĠ Ġ}. run (:: send Broadcast ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisconnected Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġclear References () ĊĊĠĠĠĠĠĠĠ Ġreceiver Com municator ?. let ( Billing Receiver :: remove Observer ) ĊĠĠĠĠĠĠĠ Ġreceiver Com municator Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear References () Ġ{ ĊĠĠĠĠĠĠĠ Ġconsume Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġquery Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsku Detail Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġconnection Callback Reference Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcontext Reference Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġpurchase Fragment Weak Reference ?. clear () ĊĠĠĠĠĠĠĠ Ġpurchase Fragment Weak Reference Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference ?. clear () ĊĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Query Purchase Received ( extras : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Callback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Function . function ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Function Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Type Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Bundle Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġextras Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Purchase Received ( extras : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Response Suc ceed ( extras )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference ?. get () Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Purchase Activity With Activity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( purchase Activity Weak Reference ?. get ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Purchase Intent ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Fragment Weak Reference ?. get () Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Purchase Activity With Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( purchase Fragment Weak Reference ?. get ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Purchase Intent ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinvalid Ġstate , Ġwe Ġreceive Ġpurchase Ġbut Ġall Ġreference Ġis Ġnull , Ġmight Ġbe Ġconnection Ġdisconnected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Purchase Callback ()?. let Ġ{ Ġpurchase Callback Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPurchase Intent Callback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( purchase Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. failed To Begin Flow . invoke ( Disconnect Exception ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Purchase Callback (): Ġ( Purchase Intent Callback . () Ġ-> ĠUnit )? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference ?. get () Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference ?. get ()?. callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Fragment Weak Reference ?. get () Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Activity Weak Reference ?. get ()?. callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Purchase Activity With Activity ( ĊĠĠĠĠĠĠĠ Ġpurchase Weak Holder : ĠPurchase Weak Holder < Activity >, ĊĠĠĠĠĠĠĠ Ġpurchase Intent : ĠIntent ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpurchase Weak Holder . component . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Weak Holder . request Code ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Purchase Activity With Fragment ( ĊĠĠĠĠĠĠĠ Ġpurchase Weak Holder : ĠPurchase Weak Holder < Fragment >, ĊĠĠĠĠĠĠĠ Ġpurchase Intent : ĠIntent ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpurchase Weak Holder . component . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Weak Holder . request Code ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Purchase Intent ( extras : ĠBundle ?): ĠIntent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġextras ?. get Parcelable ( KEY _ RESPONSE _ BU Y _ INT ENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Consume Action Received ( extras : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( consume Callback Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCons ume Callback (). apply ( require NotNull ( consume Callback )). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Response Suc ceed ( extras )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Suc ceed . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Failed . invoke ( Consume FailedException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Get Sku Details Received ( extras : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sku Detail Callback Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Response Suc ceed ( extras )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġextract Sku Detail Data From Bundle ( require NotNull ( extras )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGet Sku Details Callback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( require NotNull ( sku Detail Callback )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Sku Details Suc ceed . invoke ( require NotNull ( response )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGet Sku Details Callback (). apply ( require NotNull ( sku Detail Callback )). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Sku Details Failed . invoke ( Result Not Ok ay Exception ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Billing Support Action Received ( extras : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Response Suc ceed Ġ= Ġis Response Suc ceed ( extras ) ĊĠĠĠĠĠĠĠ Ġval Ġis Subscription Support Ġ= Ġis Subscription Support ( extras ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Response Suc ceed Ġ&& Ġis Subscription Support Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Callback Reference ?. get ()?. connection Suc ceed ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! is Response Suc ceed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Callback Reference ?. get ()?. connection Failed ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI AP NotSupportedException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Callback Reference ?. get ()?. connection Failed ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSub s NotSupportedException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Subscription Support ( extras : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Subscription Support Ġ= Ġextras ?. getBoolean ( KEY _ SUB SCRIPTION _ SUPPORT ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġ! payment Configuration . should Support Subscription Ġ|| Ġis Subscription Support ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Response Suc ceed ( extras : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġextras ?. getInt ( RESPONSE _ CODE ) Ġ== ĠB az aar Intent . RESPONSE _ RESULT _ OK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Bundle Signature Valid ( extras : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Secure Signature () Ġ== Ġextras ?. getString ( KEY _ SECURE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Broadcast () Ġ{ ĊĠĠĠĠĠĠĠ ĠBilling Receiver . add Observer ( require NotNull ( receiver Com municator )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget New Intent For Broadcast (): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( KEY _ PACKAGE _ NAME , Ġcontext Reference ?. get ()?. packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( KEY _ SECURE , Ġget Secure Signature ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( KEY _ API _ VERSION , ĠBilling . IN _ APP _ B ILL ING _ VERSION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` package ` Ġ= ĠB AZ A AR _ PACKAGE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extras ( bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Secure Signature (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrsa Key Ġ= Ġ( payment Configuration . local Security Check Ġas ? ĠSecurity Check . Enable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . rsa PublicKey ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrsa Key Ġ?: ĠDEFAULT _ SECURE _ SIGNATURE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Broadcast ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Reference ?. get ()?. send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB AZ A AR _ WITH _ RECE IVER _ CONNECTION _ VERSION Ġ= Ġ 8 0 1 3 0 1 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ SECURE _ SIGNATURE Ġ= Ġ" secure Broadcast Key " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ BA ZA AR _ BASE Ġ= Ġ" ir . m services . market ." ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ BA ZA AR _ POST Ġ= Ġ". i ab " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ B ILL ING _ SUPPORT Ġ= ĠACTION _ BA ZA AR _ BASE Ġ+ Ġ" billing Support " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ CON SU ME Ġ= ĠACTION _ BA ZA AR _ BASE Ġ+ Ġ" consume " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ PUR CH ASE Ġ= ĠACTION _ BA ZA AR _ BASE Ġ+ Ġ" purchase " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ QUERY _ PUR CH ASE S Ġ= ĠACTION _ BA ZA AR _ BASE Ġ+ Ġ" get Purchase " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ GET _ SK U _ DETAIL Ġ= ĠACTION _ BA ZA AR _ BASE Ġ+ Ġ" sku Detail " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ RECEIVE _ CON SU ME Ġ= ĠACTION _ CON SU ME Ġ+ ĠACTION _ BA ZA AR _ POST ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ RECEIVE _ PUR CH ASE Ġ= ĠACTION _ PUR CH ASE Ġ+ ĠACTION _ BA ZA AR _ POST ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ RECEIVE _ B ILL ING _ SUPPORT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ B ILL ING _ SUPPORT Ġ+ ĠACTION _ BA ZA AR _ POST ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ RECEIVE _ QUERY _ PUR CH ASE S Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ QUERY _ PUR CH ASE S Ġ+ ĠACTION _ BA ZA AR _ POST ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ RECEIVE _ SK U _ DETAILS Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ GET _ SK U _ DETAIL Ġ+ ĠACTION _ BA ZA AR _ POST ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ SUB SCRIPTION _ SUPPORT Ġ= Ġ" subscription Support " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PACKAGE _ NAME Ġ= Ġ" packageName " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ API _ VERSION Ġ= Ġ" apiVersion " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ SK U Ġ= Ġ" sku " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ITEM _ TYPE Ġ= Ġ" item Type " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ DE VELO PER _ PAYLOAD Ġ= Ġ" developer Payload " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ EXTRA _ INFO Ġ= Ġ" extra Info " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ SECURE Ġ= Ġ" secure " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ RESPONSE _ BU Y _ INT ENT Ġ= Ġ" BU Y _ INT ENT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRESP ONSE _ CODE Ġ= Ġ" RESPONSE _ CODE " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TOKEN Ġ= Ġ" token " ĊĠĠĠ Ġ} Ċ } Ċ