package Ġcom . h bb 2 0 . country picker . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . emoji . text . Emoji Compat Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . h bb 2 0 . country picker . config . CP Dialog Config Ċ import Ġcom . h bb 2 0 . country picker . config . CP List Config Ċ import Ġcom . h bb 2 0 . country picker . config . CP Row Config Ċ import Ġcom . h bb 2 0 . country picker . config . CP View Config Ċ import Ġcom . h bb 2 0 . country picker . data generator . CP DataStore Generator Ċ import Ġcom . h bb 2 0 . country picker . dialog . CP Dialog Helper Ċ import Ġcom . h bb 2 0 . country picker . flag provider . CP Flag Image Provider Ċ import Ġcom . h bb 2 0 . country picker . flag provider . Default Emoji Flag Provider Ċ import Ġcom . h bb 2 0 . country picker . helper . CP Country Detector Ċ import Ġcom . h bb 2 0 . country picker . models . CP Country Ċ import Ġcom . h bb 2 0 . country picker . models . CP DataStore Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ class ĠCP View Helper ( ĊĠĠĠ Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġval Ġcp DataStore : ĠCP DataStore Ġ= ĠCP DataStore Generator . generate ( context ), ĊĠĠĠ Ġval Ġcp View Config : ĠCP View Config Ġ= ĠCP View Config (), ĊĠĠĠ Ġval Ġcp Dialog Config : ĠCP Dialog Config Ġ= ĠCP Dialog Config (), ĊĠĠĠ Ġval Ġcp List Config : ĠCP List Config Ġ= ĠCP List Config (), ĊĠĠĠ Ġval Ġcp Row Config : ĠCP Row Config Ġ= ĠCP Row Config ( cp Flag Provider Ġ= Ġcp View Config . cp Flag Provider ), ĊĠĠĠ Ġval ĠisIn Edit Mode : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ selected Country Ġ= ĠMutable LiveData < CP Country ?> (). apply Ġ{ Ġvalue Ġ= Ġnull Ġ} ĊĠĠĠ Ġval Ġselected Country : ĠLive Data < CP Country ?> Ġ= Ġ_ selected Country ĊĠĠĠ Ġval Ġcountry Detector Ġ= ĠCP Country Detector ( context ) ĊĠĠĠ Ġprivate Ġvar Ġview Component Group : ĠView Component Group ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Country Changed Listener : Ġ(( CP Country ?) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. invoke ( selected Country . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Initial Country ( cp View Config . initial Selection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Initial Country ( ĊĠĠĠĠĠĠĠ Ġinitial Selection : ĠCP View Config . Initial Selection ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( initial Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCP View Config . Initial Selection . Empty Selection Ġ-> Ġclear Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCP View Config . Initial Selection . Auto Detect Country Ġ-> Ġset Auto Detected Country ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Selection . auto Detect Sources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCP View Config . Initial Selection . Specific Country Ġ-> Ġset Country For Alpha Code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Selection . country Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCountry Code Ġcan Ġbe Ġalpha 2 Ġor Ġalpha 3 Ġcode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Country For Alpha Code ( country Code : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcountry Ġ= Ġcp DataStore . country List . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . alpha 2 . equals ( country Code , Ġtrue ) Ġ|| Ġit . alpha 3 . equals ( country Code , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Country ( country ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Selection () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Country ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Auto Detected Country ( country Detect Sources : ĠList < CP Country Detector . Source > Ġ= ĠCP View Config . default Country Detector Sources ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdetected Alpha 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġ" US " Ġelse Ġcountry Detector . detect Country ( country Detect Sources ) ĊĠĠĠĠĠĠĠ Ġval Ġdetected Country Ġ= Ġcp DataStore . country List . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . alpha 2 . toLowerCase ( Locale . ROOT ) Ġ== Ġdetected Alpha 2 ?. toLowerCase ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . ROOT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Country ( detected Country ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Helper Ġ= ĠCP Dialog Helper ( cp DataStore , Ġcp Dialog Config , Ġcp List Config , Ġcp Row Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Country ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog Helper . create Dialog ( context ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach View Components ( ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġtv Country Info : ĠTextView , ĊĠĠĠĠĠĠĠ Ġtv Emoji Flag : ĠTextView ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġimg Flag : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . view Component Group Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Component Group ( container , Ġtv Country Info , Ġtv Emoji Flag , Ġimg Flag ) ĊĠĠĠĠĠĠĠ Ġview Component Group ?. container ?. setOnClickListener Ġ{ Ġlaunch Dialog () Ġ} ĊĠĠĠĠĠĠĠ Ġrefresh View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Country ( cp Country : ĠCP Country ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Country . value Ġ= Ġcp Country ĊĠĠĠĠĠĠĠ Ġrefresh View () ĊĠĠĠĠĠĠĠ Ġon Country Changed Listener ?. invoke ( cp Country ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Country Ġ= Ġ_ selected Country . value ĊĠĠĠĠĠĠĠ Ġview Component Group ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Country Info . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Country Ġ!= Ġnull ) Ġcp View Config . view Text Generator ( selected Country ) Ġelse Ġcp DataStore . message Group . selection Placeholder Text ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflag Provider Ġ= Ġcp View Config . cp Flag Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Flag ?. isVisible Ġ= Ġflag Provider Ġis ĠCP Flag Image Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Emoji Flag ?. isVisible Ġ= Ġflag Provider Ġis ĠDefault Emoji Flag Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag Provider Ġis ĠDefault Emoji Flag Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflag Emoji Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Provider . use Emoji Compat Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmoji Compat . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. process ( selected Country ?. flag Emoji Ġ?: Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġselected Country ?. flag Emoji Ġ?: Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Emoji Flag ?. setText ( flag Emoji ) Ġ?: Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" No Ġtv Emoji Flag Ġprovided Ġto Ġload Ġemoji Ġflag ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( flag Provider Ġis ĠCP Flag Image Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflag Res Id Ġ= Ġselected Country ?. let Ġ{ Ġflag Provider . get Flag ( it . alpha 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Res Id Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Flag ?. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Flag ?. setImage Resource ( flag Res Id ) Ġ?: Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" No Ġimg Flag Ġprovided Ġto Ġload Ġflag Ġimage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Flag ?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠView Component Group ( ĊĠĠĠĠĠĠĠ Ġval Ġcontainer : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġval Ġtv Country Info : ĠTextView , ĊĠĠĠĠĠĠĠ Ġval Ġtv Emoji Flag : ĠTextView ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġimg Flag : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } Ċ