/* Ċ Ġ* Ġ***************************************************************** ******* Ċ Ġ* Ġ ĠVL CB illing Dialog . kt Ċ Ġ* Ġ************************************************************************* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠV LC Ġauthors Ġand ĠVideo LAN Ċ Ġ* ĠAuthor : ĠN icol as ĠPO ME PU Y Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware ; Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġthe ĠFree ĠSoftware ĠFoundation ; Ġeither Ġversion Ġ 2 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram ; Ġif Ġnot , Ġwrite Ġto Ġthe ĠFree ĠSoftware Ċ Ġ* ĠFoundation , ĠInc ., Ġ 5 1 ĠFranklin ĠStreet , ĠFifth ĠFloor , ĠBoston ĠMA Ġ 0 2 1 1 0 - 1 3 0 1 , ĠUSA . Ċ Ġ* Ġ************************************************************************* * Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġorg . vide ol an . v lc . gui . dialogs Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . text . style . Underline Span Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġnl . d ion se gi jn . kon f et ti . models . Shape Ċ import Ġnl . d ion se gi jn . kon f et ti . models . Size Ċ import Ġorg . vide ol an . tools .* Ċ import Ġorg . vide ol an . v lc . R Ċ import Ġorg . vide ol an . v lc . databinding . Don ations Binding Ċ import Ġorg . vide ol an . v lc . don ations . VL CB illing Ċ import Ġorg . vide ol an . v lc . don ations . util . I ab Helper Ċ import Ġorg . vide ol an . v lc . don ations . util . I ab Result Ċ import Ġorg . vide ol an . v lc . don ations . util . Purchase Ċ import Ġorg . vide ol an . v lc . gui . view . Don ation Sku View Ċ Ċ class ĠVL CB illing Dialog Ġ: ĠVL CB ottom Sheet Dialog Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġin Thank You Mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠDon ations Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv lc Billing : ĠVL CB illing ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdon ation Entries : ĠArray < Don ation Sku View > ĊĊĠĠĠ Ġoverride Ġfun ĠgetDefault State () Ġ= ĠBottom Sheet Behavior . STATE _ EXP AN DED ĊĊĠĠĠ Ġoverride Ġfun Ġneed To Manage Orientation () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġinitial Focused View () Ġ= Ġbinding . don ate Logo ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Settings . show Tv Ui ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). set Theme ( R . style . Theme _ VL C _ Black ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġv lc Billing Ġ= ĠVL CB illing . getInstance ( require Activity (). application ) ĊĠĠĠĠĠĠĠ Ġv lc Billing . reload Sk us () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠDon ations Binding . inflate ( layout Inflater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġdon ation Entries Ġ= ĠarrayOf ( binding . don ation Tier 1 , Ġbinding . don ation Tier 2 , Ġbinding . don ation Tier 3 , Ġbinding . don ation Tier 4 , Ġbinding . don ation Tier 5 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( DeviceInfo ( require Activity ()). is Android Tv ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cancel Subscription . text Ġ= ĠgetString ( R . string . subscription _ cancel _ tv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" g . co / play / subscriptions " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠgetString ( R . string . don ate _ unsubscribe _ tv , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp anned Ġ= ĠSp ann able String ( string ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġstring . indexOf ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġstring . indexOf ( url ) Ġ+ Ġurl . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp anned . set Span ( Underline Span (), Ġstart , Ġend , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp anned . set Span ( ForegroundColor Span ( Context Compat . getColor ( require Activity (), ĠR . color . orange 5 0 0 )), Ġstart , end , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Un subscribe Description . text Ġ= Ġsp anned ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cancel Subscription . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . tv Un subscribe . visibility Ġ== ĠView . VISIBLE ) Ġbinding . tv Un subscribe . set G one () Ġelse Ġbinding . tv Un subscribe . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠonClick Listener Ġ= ĠView . OnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Entries . forEach Ġ{ Ġdon ation Sku View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Sku View . isSelected Ġ= Ġdon ation Sku View Ġ== Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . send Don ation . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdon ation Entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener ( on ClickListener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . subscription Checkbox . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Prices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun selectAll () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpopulate Prices () ĊĊĠĠĠĠĠĠĠ Ġbinding . send Don ation . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdon ation view Ġ= ĠarrayOf ( binding . don ation Tier 1 , Ġbinding . don ation Tier 2 , Ġbinding . don ation Tier 3 , Ġbinding . don ation Tier 4 , Ġbinding . don ation Tier 5 ). first Ġ{ Ġit . isSelected Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . subscription Checkbox . isChecked Ġ-> Ġv lc Billing . i ab Helper . launch Subscription Purchase Flow ( require Activity (), Ġdon ation view . sku Detail . sku , Ġ 1 0 0 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI ab Helper . On I ab Purchase Finished Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon I ab Purchase Finished ( result : ĠI ab Result ?, Ġpurchase : ĠPurchase ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ== Ġnull Ġ|| Ġresult . is Failure Ġ|| Ġpurchase Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" VL CB illing ", Ġ" Error Ġpurch asing : Ġ$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Thank You () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv lc Billing . reload Sk us () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ" v WG pk j Y Ij 2 IY UQ 8 8 ci Nu PO It F 1 g 7 v S " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġv lc Billing . i ab Helper . launch Purchase Flow ( require Activity (), Ġdon ation view . sku Detail . sku , Ġ 1 0 0 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI ab Helper . On I ab Purchase Finished Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon I ab Purchase Finished ( result : ĠI ab Result ?, Ġpurchase : ĠPurchase ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ== Ġnull Ġ|| Ġresult . is Failure Ġ|| Ġpurchase Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" VL CB illing ", Ġ" Error Ġpurch asing : Ġ$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv lc Billing . i ab Helper . consume Async ( purchase ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Thank You () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ" j T 6 R Gl Eh th Mb Z 9 xu 1 7 fm RQ 4 e J NT 3 Ea " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . another Don ation . setOnClickListener Ġ{ Ġswitch Thank You () Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun selectAll () Ġ{ ĊĠĠĠĠĠĠĠ Ġdon ation Entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . send Don ation . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate Prices () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsku Details Ġ= Ġif Ġ( binding . subscription Checkbox . isChecked ) Ġv lc Billing . subs Details Ġelse Ġv lc Billing . sku Details ĊĠĠĠĠĠĠĠ Ġdon ation Entries . forEach Indexed Ġ{ Ġindex , Ġdon ation Sku View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sku Details . size Ġ> Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsku Detail Ġ= Ġsku Details [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Sku View . setText ( sku Detail . price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpurchase Ġ= Ġv lc Billing . p urchases . first OrNull Ġ{ Ġit . sku Ġ== Ġsku Detail . sku Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Sku View . isChecked Ġ= Ġpurchase Ġ!= Ġnull Ġ&& Ġpurchase . is Auto Renew ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Sku View . sku Detail Ġ= Ġsku Detail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Sku View . sku Purchase d Ġ= Ġpurchase Ġ!= Ġnull Ġ Ġ&& Ġpurchase . is Auto Renew ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Sku View . is Clickable Ġ= Ġpurchase Ġ== Ġnull Ġ Ġ|| Ġ! purchase . is Auto Renew ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . subscription Checkbox . isChecked Ġ&& Ġv lc Billing . p urchases . isNotEmpty () Ġ&& Ġv lc Billing . p urchases . any Ġ{ Ġit . is Auto Renew ing Ġ} ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . already Sub scribed . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cancel Subscription . setVisible () ĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . already Sub scribed . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cancel Subscription . set G one () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfire works Handler Ġ= ĠHandler () ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Thank You () Ġ{ ĊĠĠĠĠĠĠĠ Ġin Thank You Mode Ġ= Ġ! in Thank You Mode ĊĠĠĠĠĠĠĠ Ġval Ġdon ation Views Ġ= ĠarrayOf ( binding . don ation Tier 1 , Ġbinding . don ation Tier 2 , Ġbinding . don ation Tier 3 , Ġbinding . don ation Tier 4 , Ġbinding . don ation Tier 5 , Ġbinding . don ation Emoji Tier 1 , Ġbinding . don ation Emoji Tier 2 , Ġbinding . don ation Emoji Tier 3 , Ġbinding . don ation Emoji Tier 4 , Ġbinding . don ation Emoji Tier 5 , Ġbinding . subscription Checkbox , Ġbinding . already Sub scribed ) ĊĠĠĠĠĠĠĠ Ġif Ġ( in Thank You Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . don ations Title . text Ġ= Ġrequire Activity (). getText ( R . string . th ank _ you ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . don ations Description . text Ġ= Ġrequire Activity (). getText ( R . string . th ank _ you _ desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . another Don ation . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . send Don ation . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Views . forEach Ġ{ Ġit . set G one () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfire works Runnable Ġ= object Ġ: Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠcurrentIndex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġbinding . don ate Logo . x Ġ+ Ġbinding . don ate Logo . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġbinding . don ate Logo . y Ġ+ Ġbinding . don ate Logo . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( currentIndex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġbinding . don ate Logo . x Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġ 1 8 . dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġbinding . don ate Logo . x Ġ+ Ġbinding . don ate Logo . width Ġ+ Ġbinding . don ate Logo . x Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġ 1 8 . dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . kon f et ti . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Colors ( Context Compat . getColor ( require Activity (), ĠR . color . orange 1 0 0 ), Context Compat . getColor ( require Activity (), ĠR . color . orange 5 0 0 ), Context Compat . getColor ( require Activity (), ĠR . color . orange 9 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Direction ( 0 . 0 , Ġ 3 5 9 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Speed ( 1 f , Ġ 9 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fade Out Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime To Live ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Shapes ( Shape . Circle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Sizes ( Size ( size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setPosition ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setRotation Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. burst ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentIndex Ġ> Ġ 1 ) ĠcurrentIndex Ġ= Ġ 0 Ġelse ĠcurrentIndex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire works Handler . post Delayed ( this , Ġ 1 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire works Handler . post ( fire works Runnable ) ĊĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . don ations Title . text Ġ= Ġrequire Activity (). getText ( R . string . tip _ jar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . don ations Description . text Ġ= Ġrequire Activity (). getText ( R . string . don ation _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . another Don ation . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . send Don ation . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Views . forEach Ġ{ Ġit . setVisible () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Prices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . kon f et ti . stop Grace fully () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire works Handler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }