package Ġcom . if an r . tang zhi . ui . signin . widget Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Asset Manager Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . if an r . tang zhi . R Ċ import Ġcom . if an r . tang zhi . ext .* Ċ import Ġcom . if an r . tang zhi . util . App Gson Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ private Ġvar ĠCOUN TRY _ CODES Ġ= ĠlistOf < CountryCode >() Ċ Ċ /** Ċ Ġ* Ġ æīĭæľº åı· çłģ éĩĮ çļĦ åĽ½å®¶ ä»£çłģ éĢīæĭ© åĻ¨ Ċ Ġ*/ Ċ @ Suppress Lint (" SetText I 1 8 n ") Ċ class ĠPhone CountryCode Selector : ĠConstraint Layout Ġ{ ĊĊĠĠĠ Ġvar Ġon ValueChanged : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . invoke ( selected . code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcountry Code : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġselected : ĠCountry Code Ġby ĠDeleg ates . observable ( ĊĠĠĠĠĠĠĠ ĠCountry Code ( code Ġ= Ġ 0 , Ġcountry Ġ= Ġ"") ĊĠĠĠ Ġ) Ġ{ Ġ_, Ġ_, Ġnew Ġ-> ĊĠĠĠĠĠĠĠ Ġcountry Code . text Ġ= Ġ"+ ${ new . code } Ġ(${ new . country })" ĊĠĠĠĠĠĠĠ Ġon ValueChanged . invoke ( new . code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late Into ( R . layout . phone _ country _ code _ selector ) ĊĠĠĠĠĠĠĠ Ġcountry Code Ġ= ĠfindViewById ( R . id . selector CountryCode Tv ) ĊĠĠĠĠĠĠĠ Ġselected Ġ= ĠCountry Code ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 8 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġ" ä¸ŃåĽ½ å¤§ éĻĨ " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinit Country Codes () ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Items ( COUNTRY _ CODES . map Ġ{ Ġ"+ ${ it . code } Ġ(${ it . country })" Ġ}. to Typed Array ()) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= ĠCOUN TRY _ CODES [ which ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġinit Country Codes () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( COUNTRY _ CODES . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad CountryCode Job ( context . assets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠCOUN TRY _ CODES Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . e (" Load CountryCode Job ", Ġit . message , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġfun ĠLoad CountryCode Job ( am : ĠAsset Manager ) Ġ= ĠSingle . from Callable Ġ{ ĊĠĠĠ Ġval Ġroot Ġ= ĠApp Gson . fromJson ( ĊĠĠĠĠĠĠĠ Ġam . open (" phone _ code . json "). use Ġ{ ĠString ( it . read Bytes ()) Ġ}, ĠJsonObject :: class . java ) ĊĠĠĠ Ġroot . entrySet () ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . value . as JsonArray . map Ġ{ Ġit . as JsonObject Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . entrySet (). first (). let Ġ{ Ġit . key Ġto Ġit . value . asString Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCountry Code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġit . second . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġdata Ġclass ĠCountry Code ( ĊĠĠĠ Ġval Ġcode : ĠInt , ĊĠĠĠ Ġval Ġcountry : ĠString Ċ )