/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠGoogle ĠInc . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . github . w atab ee . trivial d rives ample Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġcom . github . w atab ee . trivial d rives ample . billing . Billing DataSource Ċ import Ġcom . github . w atab ee . trivial d rives ample . db . GameState Model Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠThe Ġrepository Ġuses Ġdata Ġfrom Ġthe ĠBilling Ġdata Ġsource Ġand Ġthe Ġgame Ġstate Ġmodel Ġtogether Ġto Ġgive Ċ Ġ* Ġa Ġunified Ġversion Ġof Ġthe Ġstate Ġof Ġthe Ġgame Ġto Ġthe ĠViewModel . ĠIt Ġworks Ġclosely Ġwith Ġthe Ċ Ġ* ĠBilling DataSource Ġto Ġimplement Ġconsum able Ġitems , Ġprem ium Ġitems , Ġetc . Ċ Ġ*/ Ċ class ĠT rivial Drive Repository ( ĊĠĠĠ Ġprivate Ġval Ġbilling DataSource : ĠBilling DataSource , ĊĠĠĠ Ġprivate Ġval Ġgame State Model : ĠGameState Model , ĊĠĠĠ Ġprivate Ġval Ġdefault Scope : ĠCor outine Scope Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgame Messages : ĠMutable Shared Flow < Int > Ġ= ĠMutable Shared Flow () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġup Ġthe Ġevent Ġthat Ġwe Ġcan Ġuse Ġto Ġsend Ġmessages Ġup Ġto Ġthe ĠUI Ġto Ġbe Ġused Ġin ĠSn ack bars . ĊĠĠĠĠ Ġ* ĠThis Ġcollect s Ġnew Ġpurchase Ġevents Ġfrom Ġthe ĠBilling DataSource , Ġtransform ing Ġthe Ġknown ĠSK U ĊĠĠĠĠ Ġ* Ġstrings Ġinto Ġuseful ĠString Ġmessages , Ġand Ġemit ting Ġthe Ġmessages Ġinto Ġthe Ġgame Ġmessages Ġflow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpost Messages From Billing Flow () Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . getNew P urchases (). collect Ġ{ Ġsku List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠHandle Ġmulti - line Ġpurch ases Ġbetter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( Ġsku Ġin Ġsku List Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sku ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ G AS Ġ-> Ġgame Messages . emit ( R . string . message _ more _ gas _ acquire d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ PRE MI UM Ġ-> Ġgame Messages . emit ( R . string . message _ premium ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ INF IN ITE _ G AS _ MONTH LY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ INF IN ITE _ G AS _ YEAR LY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġmakes Ġsure Ġthat Ġupgrades / down grade s Ġto Ġsubscriptions Ġare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreflected Ġcorrectly Ġin Ġour Ġuser Ġinterface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . refresh P urchases () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Messages . emit ( R . string . message _ subscribed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Collection Ġcomplete ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Collection ĠCor outine ĠScope ĠEx ited ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUses Ġone Ġunit Ġof Ġgas Ġif Ġwe Ġdon 't Ġhave Ġa Ġsubscription . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġdrive () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġgas Tank Level Ġ= Ġgas Tank Level (). first ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG AS _ T ANK _ INF IN ITE Ġ-> ĠsendMessage ( R . string . message _ infinite _ drive ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG AS _ T ANK _ MIN Ġ-> ĠsendMessage ( R . string . message _ out _ of _ gas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Gas Level Ġ= Ġgas Tank Level Ġ- Ġgame State Model . decrement Gas ( G AS _ T ANK _ MIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Old ĠG as ĠLevel : Ġ$ gas Tank Level ĠNew ĠG as ĠLevel : Ġ$ new Gas Level ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Gas Level Ġ== ĠG AS _ T ANK _ MIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( R . string . message _ out _ of _ gas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( R . string . message _ you _ dro ve ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAutomatic Ġsupport Ġfor Ġupgrading / down grading Ġsubscription . ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġsku ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuy Sku ( activity : ĠActivity , Ġsku : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġold Sku : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhen Ġ( sku ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ INF IN ITE _ G AS _ MONTH LY Ġ-> Ġold Sku Ġ= ĠSK U _ INF IN ITE _ G AS _ YEAR LY ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ INF IN ITE _ G AS _ YEAR LY Ġ-> Ġold Sku Ġ= ĠSK U _ INF IN ITE _ G AS _ MONTH LY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( old Sku Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . launch Billing Flow ( activity , Ġsku ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . launch Billing Flow ( activity , Ġsku , Ġold Sku ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn ĠFlow Ġthat Ġindicates Ġwhether Ġthe Ġsku Ġis Ġcurrently Ġpurch ased . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsku Ġthe ĠSK U Ġto Ġget Ġand Ġobserve Ġthe Ġvalue Ġfor ĊĠĠĠĠ Ġ* Ġ@ return ĠFlow Ġthat Ġreturns Ġtrue Ġif Ġthe Ġsku Ġis Ġpurch ased . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Purchase d ( sku : ĠString ): ĠFlow < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbilling DataSource . is Purchase d ( sku ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe Ġcan Ġbuy Ġgas Ġif : ĊĠĠĠĠ Ġ* Ġ 1 ) ĠWe Ġcan Ġadd Ġat Ġleast Ġone Ġunit Ġof Ġgas ĊĠĠĠĠ Ġ* Ġ 2 ) ĠThe Ġbilling Ġdata Ġsource Ġallows Ġus Ġto Ġpurchase , Ġwhich Ġmeans Ġthat Ġthe Ġitem Ġisn 't Ġalready ĊĠĠĠĠ Ġ* ĠĠĠ Ġpurch ased . ĊĠĠĠĠ Ġ* ĠFor Ġother Ġsk us , Ġwe Ġrely Ġon Ġjust Ġthe Ġdata Ġfrom Ġthe Ġbilling Ġdata Ġsource . ĠFor Ġsubscriptions , ĊĠĠĠĠ Ġ* Ġonly Ġone Ġcan Ġbe Ġheld Ġat Ġa Ġtime , Ġand Ġpurch asing Ġone Ġsubscription Ġwill Ġuse Ġthe Ġbilling Ġfeature ĊĠĠĠĠ Ġ* Ġto Ġupgrade Ġor Ġdown grade Ġthe Ġuser Ġfrom Ġthe Ġother . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsku Ġthe ĠSK U Ġto Ġget Ġand Ġobserve Ġthe Ġvalue Ġfor ĊĠĠĠĠ Ġ* Ġ@ return ĠFlow < Boolean > Ġthat Ġreturns Ġtrue Ġif Ġthe Ġsku Ġcan Ġbe Ġpurch ased ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcan Purchase ( sku : ĠString ): ĠFlow < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( sku ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ G AS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . can Purchase ( sku ). combine ( gas Tank Level ()) Ġ{ Ġcan Purchase , Ġgas Tank Level Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Purchase Ġ&& Ġgas Tank Level Ġ< ĠG AS _ T ANK _ MAX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbilling DataSource . can Purchase ( sku ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombine Ġthe Ġresults Ġfrom Ġour Ġsubscription Ġflow Ġwith Ġour Ġgas Ġtank Ġlevel Ġfrom Ġthe Ġgame Ġstate ĊĠĠĠĠ Ġ* Ġdatabase Ġto Ġget Ġour Ġdisplayed Ġgas Ġtank Ġlevel , Ġwhich Ġwill Ġbe Ġinfinite Ġif Ġa Ġsubscription Ġis ĊĠĠĠĠ Ġ* Ġactive . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠFlow Ġthat Ġrepresents Ġthe Ġgas Tank Level Ġby Ġgame Ġlogic . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgas Tank Level (): ĠFlow < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgas Tank Level Flow Ġ= Ġgame State Model . gas Tank Level () ĊĠĠĠĠĠĠĠ Ġval Ġmonthly Sub Purchase d Flow Ġ= Ġis Purchase d ( SK U _ INF IN ITE _ G AS _ MONTH LY ) ĊĠĠĠĠĠĠĠ Ġval Ġyear ly Sub Purchase d Flow Ġ= Ġis Purchase d ( SK U _ INF IN ITE _ G AS _ YEAR LY ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcombine ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgas Tank Level Flow , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonthly Sub Purchase d Flow , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear ly Sub Purchase d Flow ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġgas Tank Level , Ġmonthly Sub Purchase d , Ġyear ly Sub Purchase d Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonthly Sub Purchase d Ġ|| Ġyear ly Sub Purchase d Ġ-> ĠG AS _ T ANK _ INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġgas Tank Level ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġrefresh P urchases () Ġ{ ĊĠĠĠĠĠĠĠ Ġbilling DataSource . refresh P urchases () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbilling Lifecycle Observer : ĠLifecycle Observer ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbilling DataSource ĊĊĠĠĠ Ġ// ĠThere 's Ġlots Ġof Ġinformation Ġin ĠSk u Details , Ġbut Ġour Ġapp Ġonly Ġneeds Ġa Ġfew Ġthings , Ġsince Ġour ĊĠĠĠ Ġ// Ġgoods Ġnever Ġgo Ġon Ġsale , Ġhave Ġintro duct ory Ġpr icing , Ġetc . ĊĠĠĠ Ġfun Ġget Sku Title ( sku : ĠString ): ĠFlow < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbilling DataSource . get Sku Title ( sku ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Sku Price ( sku : ĠString ): ĠFlow < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbilling DataSource . get Sku Price ( sku ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Sku Description ( sku : ĠString ): ĠFlow < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbilling DataSource . get Sku Description ( sku ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmessages : ĠFlow < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġgame Messages ĊĊĠĠĠ Ġsuspend Ġfun ĠsendMessage ( string Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgame Messages . emit ( string Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbilling Flow In Process : ĠFlow < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbilling DataSource . get Billing Flow In Process () ĊĊĠĠĠ Ġfun Ġdebug Consume Prem ium () Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . consume In app Purchase ( SK U _ PRE MI UM ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSource Ġfor Ġall Ġconstants ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG AS _ T ANK _ MIN Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG AS _ T ANK _ MAX Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG AS _ T ANK _ INF IN ITE Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfollowing ĠSK U Ġstrings Ġmust Ġmatch Ġthe Ġones Ġwe Ġhave Ġin Ġthe ĠGoogle ĠPlay Ġdeveloper Ġconsole . ĊĠĠĠĠĠĠĠ Ġ// ĠSK Us Ġfor Ġnon - subscription Ġpurch ases ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSK U _ PRE MI UM Ġ= Ġ" premium " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSK U _ G AS Ġ= Ġ" gas " ĊĊĠĠĠĠĠĠĠ Ġ// ĠSK U Ġfor Ġsubscription Ġpurch ases Ġ( infinite Ġgas ) ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSK U _ INF IN ITE _ G AS _ MONTH LY Ġ= Ġ" infinite _ gas _ monthly " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSK U _ INF IN ITE _ G AS _ YEAR LY Ġ= Ġ" infinite _ gas _ year ly " ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠT rivial Drive Repository :: class . simple Name ĊĠĠĠĠĠĠĠ Ġval ĠIN APP _ SK US Ġ= ĠarrayOf ( SK U _ PRE MI UM , ĠSK U _ G AS ) ĊĠĠĠĠĠĠĠ Ġval ĠSUB SCRIPTION _ SK US Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ INF IN ITE _ G AS _ MONTH LY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSK U _ INF IN ITE _ G AS _ YEAR LY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠAUTO _ CON SU ME _ SK US Ġ= ĠarrayOf ( SK U _ G AS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpost Messages From Billing Flow () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSince Ġboth Ġare Ġtied Ġto Ġapplication Ġlifecycle , Ġwe Ġcan Ġlaunch Ġthis Ġscope Ġto Ġcollect ĊĠĠĠĠĠĠĠ Ġ// Ġconsumed Ġpurch ases Ġfrom Ġthe Ġbilling Ġdata Ġsource Ġwhile Ġthe Ġapp Ġprocess Ġis Ġalive . ĊĠĠĠĠĠĠĠ Ġdefault Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling DataSource . get Cons umed P urchases (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( Ġsku Ġin Ġit Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sku Ġ== ĠSK U _ G AS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame State Model . increment Gas ( G AS _ T ANK _ MAX ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ