/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠBy ĠG eek s ĠEmp ire . Ċ Ġ* Ċ Ġ* ĠCreated Ġby ĠE li as ĠF azel Ġon Ġ 3 / 8 / 2 0 Ġ 7 : 2 3 ĠAM Ċ Ġ* ĠLast Ġmodified Ġ 3 / 8 / 2 0 Ġ 7 : 2 3 ĠAM Ċ Ġ* Ċ Ġ* ĠLicensed ĠUnder ĠMIT ĠLicense . Ċ Ġ* Ġhttps :// opensource . org / licenses / MIT Ċ Ġ*/ Ċ Ċ package Ġnet . ge ek st ools . float short . PRO . Util . I AP . Util Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . android . billing client . api .* Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġnet . ge ek st ools . float short . PRO . Util . Functions . Functions Class Ċ import Ġnet . ge ek st ools . float short . PRO . Util . Functions . Functions Class Debug . Companion . Print Debug Ċ import Ġnet . ge ek st ools . float short . PRO . Util . I AP . billing . Billing Manager Ċ Ċ class ĠP urchases Checkpoint ( var Ġapp Compat Activity : ĠAppCompatActivity ) Ġ{ ĊĊĠĠĠ Ġval Ġfunctions Class : ĠFunctions Class Ġ= ĠFunctions Class ( app Compat Activity ) ĊĊĠĠĠ Ġfun Ġtrigger () Ġ: ĠBilling Client Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbilling Client Ġ= ĠBilling Client . newBuilder ( app Compat Activity ). set Listener Ġ{ Ġbilling Result , Ġpurchase List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( billing Result . response Code Ġ== ĠBilling Client . Billing Response Code . OK Ġ&& Ġpurchase List Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( billing Result . response Code Ġ== ĠBilling Client . Billing Response Code . USER _ C ANCE LED ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. enable Pending P urchases (). build () ĊĊĠĠĠĠĠĠĠ Ġ// In - App ĠBilling ĊĠĠĠĠĠĠĠ Ġif Ġ( functions Class . network Connection ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Restore ĠPurchase d ĠItem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Client . start Connection ( object Ġ: ĠBilling Client State Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Billing Setup Finished ( billing Result : ĠBilling Result ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( billing Result . response Code Ġ== ĠBilling Client . Billing Response Code . OK ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpurch ases Ġ= Ġbilling Client . query P urchases ( Billing Client . Sku Type . IN APP ). p urchases List ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p urchases Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( purchase Ġin Ġpurch ases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Debug (" *** ĠPurchase d ĠItem : Ġ$ purchase Ġ*** ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions Class . save Preference (". Purchase d Item ", Ġpurchase . sku , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Consume ĠDon ation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( purchase . sku Ġ== ĠBilling Manager . i ap Don ation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġfunctions Class . already Don ated ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsume Response Listener Ġ= ĠCons ume Response Listener Ġ{ Ġbilling Result , Ġpurchase Token Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( billing Result . response Code Ġ== ĠBilling Client . Billing Response Code . OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Debug (" *** ĠCon su med ĠItem : Ġ$ purchase Token Ġ*** ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions Class . save Preference (". Purchase d Item ", Ġpurchase . sku , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsume Params Ġ= ĠCons ume Params . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Params . set Purchase Token ( purchase . purchase Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Client . consume Async ( consume Params . build (), Ġconsume Response Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Ack nowledge Process ( billing Client , Ġpurchase , ĠBilling Client . Sku Type . IN APP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Billing Service Disconnected () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Restore ĠSub scribed ĠItem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Client . start Connection ( object Ġ: ĠBilling Client State Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Billing Setup Finished ( billing Result : ĠBilling Result ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( billing Result . response Code Ġ== ĠBilling Client . Billing Response Code . OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions Class . save Preference (". Sub scribed Item ", ĠBilling Manager . i ap Remove Ads , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpurch ases Ġ= Ġbilling Client . query P urchases ( Billing Client . Sku Type . SUB S ). p urchases List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p urchases Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( purchase Ġin Ġpurch ases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Debug (" *** ĠSub scribed ĠItem : Ġ$ purchase Ġ*** ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions Class . save Preference (". Sub scribed Item ", Ġpurchase . sku , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpurchase Ack nowledge Process ( billing Client , Ġpurchase , ĠBilling Client . Sku Type . SUB S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Billing Service Disconnected () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbilling Client ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpurchase Ack nowledge Process ( billing Client : ĠBilling Client , Ġpurchase : ĠPurchase , Ġpurchase Type : ĠString ) Ġ= ĠCor outine Scope ( Supervisor Job () Ġ+ ĠDispatch ers . IO ). launch Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( purchase . purchase State Ġ== ĠPurchase . Purchase State . PUR CH ASE D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Debug (" *** Ġ${ purchase . sku } ĠPurchase ĠAck nowled ged : Ġ${ purchase . is Ack nowled ged } Ġ*** ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! purchase . is Ack nowled ged ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġacknowledge Purchase Params Ġ= ĠAck nowledge Purchase Params . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Purchase Token ( purchase . purchase Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Purchase Result : ĠBilling Result Ġ= Ġbilling Client . ack nowledge Purchase ( ack nowledge Purchase Params . build ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Debug (" *** ĠPurchase d ĠAck nowled ged ĠResult : Ġ${ purchase . sku } Ġ-> Ġ${ a Purchase Result . debug Message } Ġ*** ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }