package Ġk nf . k uma . i ap čĊč Ċ import Ġandroid . app . Activity č Ċ import Ġandroid . app . Pending Intent č Ċ import Ġandroid . content .* č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . os . IB inder č Ċ import Ġandroid . util . Log č Ċ import Ġandroidx . annotation . NonNull č Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog č Ċ import Ġk nf . k uma . App č Ċ import Ġk nf . k uma . Build Config č Ċ import Ġk nf . k uma . commons . EA Helper č Ċ import Ġk nf . k uma . commons . safe Show č Ċ import Ġx d roid . to aster . To aster čĊčĊč Ċ class ĠI AP Wrapper ( private Ġval Ġcontext : ĠContext ) Ġ: ĠService Connection Ġ{ čĊĠĠĠ Ġval Ġis Enabled : ĠBoolean Ġget () Ġ= ĠI AP Helper . has Wallet Installed ( context ) Ġ&& ĠBuild Config . BUILD _ TYPE Ġ!= Ġ" play store " čĊĠĠĠ Ġprivate Ġvar Ġi ap Service : ĠI AP Service ? Ġ= Ġnull čĊĠĠĠ Ġvar Ġinventory : ĠInventory ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġon Connected Listener : Ġ(( success : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull čĊčĊĠĠĠ Ġval Ġis Available Ġget () Ġ= Ġi ap Service Ġ!= Ġnull Ġ&& Ġinventory Ġ!= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġis Connected Ġ= Ġfalse čĊčĊĠĠĠ Ġfun ĠsetUp ( on Connect : Ġ( success : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ čĊĠĠĠĠĠĠĠ Ġon Connected Listener Ġ= Ġon Connect čĊĠĠĠĠĠĠĠ Ġif Ġ( isConnected ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Connect . invoke ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled Ġ&& ĠEA Helper . phase Ġ< Ġ 4 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . bind Service ( Intent ( Build Config . IAB _ BIND _ ACTION ). set Package ( Build Config . IAB _ BIND _ PACKAGE ), Ġthis , ĠContext . BIND _ AUTO _ CREATE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Connect . invoke ( true ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġon Connect . invoke ( false ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġon Destroy () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled Ġ&& Ġis Available ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . unbind Service ( this ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinventory Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġshow Install Dialog () Ġ{ čĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( context ). safe Show Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ( text Ġ= Ġ" Para Ġhacer Ġcomp ras Ġen ĠUK IK U , Ġse Ġneces ita Ġla Ġcar ter a ĠApp Coin ĠDB S ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( text Ġ= Ġ" Inst alar ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo To Store ( context ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Button ( text Ġ= Ġ" Cancel ar ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ NonNull čĊĠĠĠ Ġprivate Ġfun Ġgo To Store ( activity : ĠContext ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġapp PackageName Ġ= Ġ" com . app coins . wallet " čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse (" market :// details ? id =$ app PackageName "))) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( an fe : ĠActivity NotFoundException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( Intent ( Intent . ACTION _ VIEW , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" https :// play . google . com / store / apps / details ? id =$ app PackageName "))) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġi ap Service Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġfalse čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġservice ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ap Service Ġ= ĠI AP Service ( service ). also Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinventory Ġ= ĠInventory ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Billing Supported ( 3 , Ġcontext . packageName , ĠITEM _ TYPE _ IN APP ) Ġ== ĠB ILL ING _ RESPONSE _ RESULT _ OK ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Connected Listener ?. invoke ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Connected Listener ?. invoke ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġlaunch Purchase Flow ( activity : ĠActivity , Ġsku : ĠString , Ġextra Data : ĠString ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Bundle Ġ= Ġi ap Service ?. get Buy Intent ( 3 , ĠApp . context . packageName , Ġsku , ĠITEM _ TYPE _ IN APP , Ġextra Data ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Bundle ?. response Code Ġ== ĠB ILL ING _ RESPONSE _ RESULT _ OK ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= Ġintent Bundle . get Parcelable < Pending Intent >( RESPONSE _ BU Y _ INT ENT ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . start Intent Sender For Result ( pending Intent . intent Sender , ĠP UR CH ASE _ CODE , ĠIntent (), Ġ 0 , Ġ 0 , Ġ 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo aster . toast (" Error Ġal Ġin iciar Ġcomp ra ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠTo aster . toast (" Error Ġal Ġin iciar Ġcomp ra ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġhandle Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?, Ġcallback : Ġ( success : ĠBoolean , Ġsku : ĠString ?) Ġ-> ĠUnit ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ!= ĠP UR CH ASE _ CODE ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( false , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( NAME , Ġ" Null Ġdata ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( false , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġpurchase Data Ġ= Ġdata . getString Extra ( RESPONSE _ IN APP _ PUR CH ASE _ DATA ) čĊĠĠĠĠĠĠĠ Ġval Ġdata Signature Ġ= Ġdata . getString Extra ( RESPONSE _ IN APP _ SIGNATURE ) čĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġdata . getString Extra ( RESPONSE _ IN APP _ PUR CH ASE _ ID ) čĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġdata . extras ?. response Code Ġ== ĠB ILL ING _ RESPONSE _ RESULT _ OK ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( purchase Data Ġ== Ġnull Ġ|| Ġdata Signature Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( NAME , Ġ" Data Ġor Ġsignature Ġnull ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( false , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpurchase Ġ= ĠInventory . Purchase ( id , Ġpurchase Data , Ġdata Signature ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Security . verify Purchase ( purchase Data , Ġdata Signature )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo aster . toast (" Ver ificacion Ġde Ġfir ma Ġfall ida ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( NAME , Ġ" Signature Ġverification Ġfailed ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( false , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinventory ?. add Purchase ( purchase ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( false , Ġpurchase . sku ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNAME Ġ= Ġ" Purchase " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ OK Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ USER _ C ANCE LED Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ SERVICE _ UN AVAILABLE Ġ= Ġ 2 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ B ILL ING _ UN AVAILABLE Ġ= Ġ 3 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ ITEM _ UN AVAILABLE Ġ= Ġ 4 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ DE VELO PER _ ERROR Ġ= Ġ 5 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ ERROR Ġ= Ġ 6 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ ITEM _ AL READY _ OWN ED Ġ= Ġ 7 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB ILL ING _ RESPONSE _ RESULT _ ITEM _ NOT _ OWN ED Ġ= Ġ 8 čĊčĊĠĠĠĠĠĠĠ Ġ// ĠI AB ĠHelper Ġerror Ġcodes čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ ERROR _ BASE Ġ= Ġ- 1 0 0 0 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ REMOTE _ EXCEPTION Ġ= Ġ- 1 0 0 1 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ BAD _ RESPONSE Ġ= Ġ- 1 0 0 2 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ VER IFICATION _ FAILED Ġ= Ġ- 1 0 0 3 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ SEND _ INT ENT _ FAILED Ġ= Ġ- 1 0 0 4 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ USER _ CANCEL LED Ġ= Ġ- 1 0 0 5 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ UNKNOWN _ PUR CH ASE _ RESPONSE Ġ= Ġ- 1 0 0 6 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ MISSING _ TOKEN Ġ= Ġ- 1 0 0 7 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ UNKNOWN _ ERROR Ġ= Ġ- 1 0 0 8 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ SUB SCRIPTION S _ NOT _ AVAILABLE Ġ= Ġ- 1 0 0 9 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ INVALID _ CON SU MP TION Ġ= Ġ- 1 0 1 0 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠI AB HELPER _ SUB SCRIPTION _ UPDATE _ NOT _ AVAILABLE Ġ= Ġ- 1 0 1 1 čĊčĊĠĠĠĠĠĠĠ Ġ// ĠKeys Ġfor Ġthe Ġresponses Ġfrom ĠIn App Billing Service čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ CODE Ġ= Ġ" RESPONSE _ CODE " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ GET _ SK U _ DETAILS _ LIST Ġ= Ġ" DETAILS _ LIST " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ BU Y _ INT ENT Ġ= Ġ" BU Y _ INT ENT " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ PUR CH ASE _ DATA Ġ= Ġ" IN APP _ PUR CH ASE _ DATA " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ SIGNATURE Ġ= Ġ" IN APP _ DATA _ SIGNATURE " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ ITEM _ LIST Ġ= Ġ" IN APP _ PUR CH ASE _ ITEM _ LIST " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ PUR CH ASE _ DATA _ LIST Ġ= Ġ" IN APP _ PUR CH ASE _ DATA _ LIST " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ SIGNATURE _ LIST Ġ= Ġ" IN APP _ DATA _ SIGNATURE _ LIST " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠIN APP _ CONT IN UATION _ TOKEN Ġ= Ġ" IN APP _ CONT IN UATION _ TOKEN " čĊčĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ PUR CH ASE _ ID _ LIST Ġ= Ġ" IN APP _ PUR CH ASE _ ID _ LIST " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ IN APP _ PUR CH ASE _ ID Ġ= Ġ" IN APP _ PUR CH ASE _ ID " čĊčĊĠĠĠĠĠĠĠ Ġ// ĠItem Ġtypes čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠITEM _ TYPE _ IN APP Ġ= Ġ" in app " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠITEM _ TYPE _ SUB S Ġ= Ġ" subs " čĊčĊĠĠĠĠĠĠĠ Ġ// Ġsome Ġfields Ġon Ġthe Ġget Sku Details Ġresponse Ġbundle čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGET _ SK U _ DETAILS _ ITEM _ LIST Ġ= Ġ" ITEM _ ID _ LIST " čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGET _ SK U _ DETAILS _ ITEM _ TYPE _ LIST Ġ= Ġ" ITEM _ TYPE _ LIST " čĊčĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP UR CH ASE _ CODE Ġ= Ġ 6 7 4 5 čĊčĊĠĠĠĠĠĠĠ Ġval ĠBundle . response Code : ĠInt čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget ( RESPONSE _ CODE )?. toString ()?. toInt () Ġ?: Ġ- 1 čĊĠĠĠ Ġ} č Ċ }