package Ġcom . very good security . vg sc heck out . collect . widget Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . very good security . vg sc heck out . R Ċ import Ġcom . very good security . vg sc heck out . collect . view . Input Field View Ċ import Ġcom . very good security . vg sc heck out . collect . view . card . FieldType Ċ import Ġcom . very good security . vg sc heck out . collect . view . card . validation . rules . V GS Info Rule Ċ import Ġcom . very good security . vg sc heck out . collect . view . core . serializers . Country Name To Iso Serializer Ċ import Ġcom . very good security . vg sc heck out . util . country . Countries Helper Ċ import Ġcom . very good security . vg sc heck out . util . country . model . Country Ċ import Ġcom . very good security . vg sc heck out . util . logger . VG SC heck out Logger Ċ Ċ internal Ġclass ĠV G SC o untry EditText Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 , Ċ ) Ġ: ĠInput Field View ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcountries : ĠList < Country > Ġ= ĠCount ries Helper . countries ĊĊĠĠĠ Ġvar Ġselected Country : ĠCountry Ġ= ĠCount ries Helper . get Country ( Countries Helper . ISO . USA ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Country Selected Listener ?. on Country Selected ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( value . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġon Country Selected Listener : ĠOn Country Selected Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup ViewType ( FieldType . COUNTRY ) ĊĊĠĠĠĠĠĠĠ Ġapply Validation Rule ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV GS Info Rule . Validation Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Allow able Min Length ( B ILL ING _ ADDRESS _ MIN _ CHARS _ COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġshow Country Selection Dialog () Ġ} ĊĠĠĠĠĠĠĠ Ġset Field Data Serializer ( Country Name To Iso Serializer ()) ĊĠĠĠĠĠĠĠ Ġset Text ( selected Country . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( INSTANCE _ STATE , Ġsuper . on Save InstanceState ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( COUNTRY , Ġselected Country ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Country Ġ= Ġstate . get Parcelable ( COUNTRY ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state . get Parcelable ( INSTANCE _ STATE )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Countries () Ġ= Ġcountries ĊĊĠĠĠ Ġfun Ġset Countries ( codes : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( codes . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcountries Ġ= ĠCount ries Helper . getCount ries ( codes ) ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Countries Ġ= Ġcountries . filter Ġ{ Ġ! it . isValid () Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( invalid Countries . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Invalid Country Codes ( invalid Countries ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalid Countries Ġ= Ġcountries Ġ- Ġinvalid Countries ĊĠĠĠĠĠĠĠ Ġif Ġ( valid Countries . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog No Valid Countries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . countries Ġ= Ġvalid Countries ĊĠĠĠĠĠĠĠ Ġthis . selected Country Ġ= Ġvalid Countries . first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Country ( code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcountry Ġ= ĠCount ries Helper . get Country ( code ) ĊĠĠĠĠĠĠĠ Ġif Ġ( country . isValid () Ġ&& Ġcountries . contains ( country )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Country Ġ= Ġcountry ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Invalid Country Codes ( countries : ĠList < Country >) Ġ{ ĊĠĠĠĠĠĠĠ ĠV G SC heck out Logger . debug ( message Ġ= Ġ" Invalid Ġcountry ĠISO ĠCode s Ġprovided Ġand Ġwill Ġbe Ġignored : Ġ${ countries . map Ġ{ Ġit . code Ġ}} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog No Valid Countries () Ġ{ ĊĠĠĠĠĠĠĠ ĠV G SC heck out Logger . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Ġvalid Ġcountry ĠISO ĠCode s Ġprovided . ĠAll Ġcountries Ġwill Ġbe Ġused . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNOTE : ĠCheck Ġvalid Ġcountry ĠISO Ġcodes Ġhere : Ġhttps :// en . wikipedia . org / wiki / ISO _ 3 1 6 6 - 1 _ alpha - 2 ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcountry Dialog : ĠDialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġfun Ġshow Country Selection Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( country Dialog Ġ== Ġnull Ġ|| Ġ! country Dialog !!. is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Names Ġ= Ġcountries . map Ġ{ Ġit . name Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Index Ġ= Ġcountries . indexOf ( selected Country ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Dialog Ġ= ĠMaterial AlertDialog Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . vgs _ checkout _ select _ country _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Single Choice Items ( country Names , Ġselected Index ) Ġ{ Ġ_, Ġwhich Ġ-> Ġselected Ġ= Ġwhich Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . vgs _ checkout _ select _ country _ dialog _ negative _ button _ title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . vgs _ checkout _ select _ country _ dialog _ positive _ button _ title ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountries . get OrNull ( selected )?. let Ġ{ Ġselected Country Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . show () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB ILL ING _ ADDRESS _ MIN _ CHARS _ COUNT Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINSTANCE _ STATE Ġ= Ġ" on _ save _ instance _ state " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOUN TRY Ġ= Ġ" billing _ country " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Country Selected Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Country Selected ( country : ĠCountry ) ĊĠĠĠ Ġ} Ċ }