package Ġcom . stripe . android . view Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View . On Focus ChangeListener Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Auto Complete TextView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . annotation . Restrict To Ċ import Ġandroidx . annotation . Style Res Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . core . content . with Styled Attributes Ċ import Ġandroidx . core . os . Configuration Compat Ċ import Ġandroidx . core . view . do On Next Layout Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ import Ġcom . stripe . android . R Ċ import Ġcom . stripe . android . model . CountryCode Ċ import Ġkotlinx . parcel ize . Parcel ize Ċ import Ġjava . util . Locale Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ /** Ċ Ġ* ĠA Ġsubclass Ġof Ġ[ TextInput Layout ] Ġthat Ġprogram matically Ġwraps Ġa Ġstyle able Ġ[ Auto Complete TextView ], Ċ Ġ* Ġwhich Ġconfig ures Ġa Ġ[ Country Adapter ] Ġto Ġdisplay Ġlist Ġof Ġcountries Ġin Ġits Ġpopup . Ċ Ġ* Ċ Ġ* ĠThe Ġstyle Ġof Ġ[ Auto Complete TextView ] Ġcan Ġbe Ġchanged Ġvia Ċ Ġ* Ġ[ R . style able . Stripe Country Auto Complete TextInput Layout _ country Auto Complete Style ], Ċ Ġ* Ġthe Ġlayout Ġof Ġpopup Ġitems Ġcan Ġbe Ġchanged Ġvia Ċ Ġ* Ġ[ R . style able . Stripe Country Auto Complete TextInput Layout _ country Item Layout ], Ġnote Ġthis Ġlayout Ġmust Ċ Ġ* Ġbe Ġa Ġ[ TextView ]. Ċ Ġ*/ Ċ @ Suppress Lint (" Use Compat Loading For Draw ables ") Ċ @ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ġ// ĠFor Ġpayments heet Ċ class ĠCountry TextInput Layout Ġ@ Jvm Over loads Ġinternal Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġcom . google . android . material . R . attr . textInput Style Ċ ) Ġ: ĠText Input Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġ@ Style Res ĊĠĠĠ Ġprivate Ġvar Ġcountry Auto Complete Style Res : ĠInt Ġ= ĠINVALID _ COUNTRY _ AUTO _ COMPLETE _ STYLE ĊĊĠĠĠ Ġ@ Layout Res ĊĠĠĠ Ġprivate Ġvar Ġitem Layout Res : ĠInt Ġ= ĠDEFAULT _ ITEM _ LAYOUT ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ġ// ĠFor Ġpayments heet ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġval Ġcountry Autocomplete : ĠAuto Complete TextView ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ 2 Ġdigit Ġcountry Ġcode Ġof Ġthe Ġcountry Ġselected Ġby Ġthis Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġvar Ġselected CountryCode : ĠCountry Code ? Ġby ĠDeleg ates . observable ( ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ) Ġ{ Ġ_, Ġ_, Ġnew Country Value Ġ-> ĊĠĠĠĠĠĠĠ Ġnew Country Value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Code Change Callback ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCountry Utils . get Country By Code ( it , Ġget Locale ()) ?. let Ġ{ Ġcountry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Change Callback ( country ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ġ// ĠFor Ġpayments heet ĊĠĠĠ Ġfun Ġget Selected CountryCode () Ġ= Ġselected CountryCode ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ġ// ĠFor Ġpayments heet ĊĠĠĠ Ġfun ĠsetSelected CountryCode ( country Code : ĠCountry Code ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected CountryCode Ġ= Ġcountry Code ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġselected Country : ĠCountry ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġselected CountryCode ?. let Ġ{ ĠCountry Utils . get Country By Code ( it , Ġget Locale ()) Ġ} ĊĊĠĠĠ Ġ@ Deprecated ( ĊĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Will Ġbe Ġremoved Ġin Ġa Ġfuture Ġversion ", ĊĠĠĠĠĠĠĠ Ġreplace With Ġ= ĠReplace With (" country Code Change Callback ") ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġinternal Ġvar Ġcountry Change Callback : Ġ( Country ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ġ// ĠFor Ġpayments heet ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġvar Ġcountry Code Change Callback : Ġ( CountryCode ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġprivate Ġvar Ġcountry Adapter : ĠCountry Adapter ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . with Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Stripe Country Auto Complete TextInput Layout ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Auto Complete Style Res Ġ= Ġget ResourceId ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Stripe Country Auto Complete TextInput Layout _ country Auto Complete Style , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINVALID _ COUNTRY _ AUTO _ COMPLETE _ STYLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Layout Res Ġ= Ġget ResourceId ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Stripe Country Auto Complete TextInput Layout _ country Item Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ ITEM _ LAYOUT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcountry Autocomplete Ġ= Ġinitialize Country Auto Complete With Style () ĊĠĠĠĠĠĠĠ Ġadd View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Autocomplete , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params ( LayoutParams . MATCH _ PARENT , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠApp store Ġchange ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . setTextColor ( Color . WHITE ) ĊĊĠĠĠĠĠĠĠ Ġcountry Adapter Ġ= ĠCountry Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCountry Utils . get Ordered Countries ( getLocale ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Layout Res ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġitem Ġmust Ġbe Ġa ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( item Layout Res , Ġit , Ġfalse ) Ġas ĠTextView ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . threshold Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . setAdapter ( country Adapter ) ĊĠĠĠĠĠĠĠ Ġ// ĠApp store Ġchange ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . set DropDown Background Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . stripe _ payments heet _ edit text _ bg ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . on ItemClickListener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdapter View . On ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Selected CountryCode ( country Adapter . getItem ( position ). code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . on Focus ChangeListener Ġ= ĠOn Focus ChangeListener Ġ{ Ġ_, Ġfocused Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( focused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Autocomplete . show DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Entered Ġ= Ġcountry Autocomplete . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCountry Utils . get CountryCode ByName ( country Entered , Ġget Locale ()) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui For Country Entered ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġselected CountryCode Ġ= Ġcountry Adapter . first Item . code ĊĠĠĠĠĠĠĠ Ġupdate Initial Country () ĊĊĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġresources . getString ( R . string . address _ country _ invalid ) ĊĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . validator Ġ= ĠCountry Auto Complete TextView Validator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Adapter ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcountry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected CountryCode Ġ= Ġcountry ?. code ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( country Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠerrorMessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġdo On Next Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Autocomplete . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Country ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSelected Country State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠSelected Country State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestore Selected Country ( state ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġfun Ġrestore Selected Country ( state : ĠSelected Country State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state . super State ) ĊĠĠĠĠĠĠĠ Ġstate . country Code . let Ġ{ Ġcountry Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Selected CountryCode ( country Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui For Country Entered ( country Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġencaps ulated Ġ[ Auto Complete TextView ] Ġwith Ġ[ country Auto Complete Style Res ] Ġstyle ĊĠĠĠĠ Ġ* Ġresource Ġread Ġfrom Ġstyle able . ĊĠĠĠĠ Ġ* ĠIf Ġno Ġstyle Ġresource Ġis Ġset , Ġcreate Ġone Ġwith Ġdefault Ġstyle Ġattributes ĊĠĠĠĠ Ġ* Ġ[ R . attr . auto Complete TextView Style ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinitialize Country Auto Complete With Style () Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( country Auto Complete Style Res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINVALID _ COUNTRY _ AUTO _ COMPLETE _ STYLE Ġ-> ĠAuto Complete TextView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . attr . auto Complete TextView Style ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAuto Complete TextView ( context , Ġnull , Ġ 0 , Ġcountry Auto Complete Style Res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Initial Country () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial Country Ġ= Ġcountry Adapter . first Item ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . setText ( initial Country . name ) ĊĠĠĠĠĠĠĠ Ġselected CountryCode Ġ= Ġinitial Country . code ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Country Codes ĠA Ġset Ġof Ġallowed Ġcountry Ġcodes . ĠWill Ġbe Ġignored Ġif Ġempty . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġset Allowed Country Codes ( allowed Country Codes : ĠSet < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Updated Ġ= Ġcountry Adapter . update Un filtered Countries ( allowed Country Codes ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Initial Country () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcountry Code Ġspecify Ġa Ġcountry Ġcode Ġto Ġdisplay Ġin Ġthe Ġinput . ĠThe Ġinput Ġwill Ġdisplay ĊĠĠĠĠ Ġ* Ġthe Ġfull Ġcountry Ġdisplay Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġfun Ġset Country Selected ( country Code : ĠCountry Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Ui For Country Entered ( country Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated ( ĊĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" This Ġwill Ġbe Ġremoved Ġin Ġa Ġfuture Ġversion ", ĊĠĠĠĠĠĠĠ Ġreplace With Ġ= ĠReplace With ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġ" set Country Selected ( CountryCode . create ( country Code )) ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports Ġ= Ġ[" com . stripe . android . model . CountryCode "] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġfun Ġset Country Selected ( country Code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Ui For Country Entered ( CountryCode . create ( country Code )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) ĊĠĠĠ Ġfun Ġupdate Ui For Country Entered ( country Code : ĠCountry Code ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser - typed Ġcountry Ġmatches Ġa Ġvalid Ġcountry , Ġupdate Ġthe Ġselected Ġcountry ĊĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġrevert Ġback Ġto Ġlast Ġvalid Ġcountry Ġif Ġcountry Ġis Ġnot Ġrecognized . ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Country Ġ= ĠCountry Utils . get Country By Code ( country Code , Ġget Locale ()) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Selected CountryCode ( country Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠCountry Utils . get Country By Code ( selected CountryCode , Ġget Locale ()) ĊĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . setText ( display Country ?. name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġupdated Selected CountryCode ( country Code : ĠCountry Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Error () ĊĠĠĠĠĠĠĠ Ġif Ġ( selected CountryCode Ġ!= Ġcountry Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected CountryCode Ġ= Ġcountry Code ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġvalidate Country () Ġ{ ĊĠĠĠĠĠĠĠ Ġcountry Autocomplete . perform Validation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġis Error Enabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Locale (): ĠLocale Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠConfiguration Compat . get Locales ( context . resources . configuration )[ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINVALID _ COUNTRY _ AUTO _ COMPLETE _ STYLE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ ITEM _ LAYOUT Ġ= ĠR . layout . country _ text _ view ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġinternal Ġdata Ġclass ĠSelected Country State ( ĊĠĠĠĠĠĠĠ Ġval Ġcountry Code : ĠCountry Code , ĊĠĠĠĠĠĠĠ Ġval Ġsuper State : ĠParcel able ? ĊĠĠĠ Ġ) Ġ: ĠParcel able Ċ } Ċ