package Ġcom . map swith me . maps . purchase Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Bundle Ċ import Ġcom . android . billing client . api . Billing Client . Billing Response Ċ import Ġcom . android . billing client . api . Purchase Ċ import Ġcom . android . billing client . api . Sku Details Ċ Ċ import Ġcom . map swith me . util . log . LoggerFactory Ċ import Ġjava . util .* Ċ Ċ internal Ġabstract Ġclass ĠAbstract Purchase Controller < V , ĠB , ĠUi Callback Ġ: ĠPurchase Callback >( ĊĠĠĠ Ġval Ġvalidator : ĠPurchase Validator < V >, ĊĠĠĠ Ġval Ġbilling Manager : ĠBilling Manager < B >, ĊĠĠĠ Ġvar arg Ġproduct Ids : ĠString ? Ċ ) Ġ: ĠPurchase Controller < Ui Callback > Ġ{ ĊĠĠĠ Ġvar Ġui Callback : ĠUi Callback ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġval Ġm Product Ids : ĠList < String >? ĊĠĠĠ Ġoverride Ġfun Ġinitialize ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbilling Manager . initialize ( activity ) ĊĠĠĠĠĠĠĠ Ġon Initialize ( activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġbilling Manager . destroy () ĊĠĠĠĠĠĠĠ Ġon Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Callback ( callback : ĠUi Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġui Callback Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Purchase Supported : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbilling Manager . is Billing Supported ĊĊĠĠĠ Ġoverride Ġfun Ġlaunch Purchase Flow ( productId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbilling Manager . launch Billing Flow For Product ( productId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Product Details () Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( m Product Ids ) Ġ{ Ġ" Product Ġids Ġmust Ġbe Ġnon - null !" Ġ} ĊĠĠĠĠĠĠĠ Ġbilling Manager . query Product Details ( m Product Ids ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate Existing P urchases () Ġ{ ĊĠĠĠĠĠĠĠ Ġbilling Manager . query Existing P urchases () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Target Purchase ( p urchases : ĠList < Purchase ?> ): ĠPurchase ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Product Ids Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( purchase Ġin Ġpurch ases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Product Ids . contains ( purchase !!. sku )) Ġreturn Ġpurchase ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Initialize ( activity : ĠActivity ) ĊĠĠĠ Ġabstract Ġfun Ġon Destroy () ĊĠĠĠ Ġoverride Ġfun Ġon Save ( out State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidator . on Save ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore ( in State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidator . on Restore ( in State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġabstract Ġclass ĠAbstract Play Store Billing Callback Ġ: ĊĠĠĠĠĠĠĠ ĠPlay Store Billing Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Purchase Successful ( p urchases : ĠList < Purchase >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġfind Target Purchase ( p urchases ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Valid ating Ġpurchase Ġ'" Ġ+ Ġtarget . sku Ġ+ Ġ" Ġ" Ġ+ Ġtarget . orderId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"' Ġon Ġbackend Ġserver ..." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ( target . original Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui Callback Ġ!= Ġnull ) Ġui Callback ?. on Validation Started () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Product Details Loaded ( details : ĠList < Sku Details >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui Callback Ġ!= Ġnull ) Ġui Callback !!. on Product Details Loaded ( details ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Purchase Failure (@ Billing Response Ġerror : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui Callback Ġ!= Ġnull ) Ġui Callback !!. on Payment Failure ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Product Details Failure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui Callback Ġ!= Ġnull ) Ġui Callback !!. on Product Details Failure () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Store Connection Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui Callback Ġ!= Ġnull ) Ġui Callback !!. on Store Connection Failed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Consumption Success () Ġ{ Ġ// ĠDo Ġnothing Ġby Ġdefault . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Consumption Failure () Ġ{ Ġ// ĠDo Ġnothing Ġby Ġdefault . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġvalidate ( purchase Data : ĠString ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoggerFactory . INSTANCE . getLogger ( LoggerFactory . Type . B ILL ING ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠAbstract Purchase Controller :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Product Ids Ġ= Ġif Ġ( product Ids Ġ!= Ġnull ) ĠCollections . unmodifiable List ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . asList < String >(* product Ids ) ĊĠĠĠĠĠĠĠ Ġ) Ġelse Ġnull ĊĠĠĠ Ġ} Ċ }