package Ġcom . what 3 words . components . text Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . icu . text . Measure Format Ċ import Ġandroid . icu . text . Measure Format . Format Width Ċ import Ġandroid . icu . util . Measure Ċ import Ġandroid . icu . util . Measure Unit Ċ import Ġandroid . view . View .* Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . WRAP _ CONTENT Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . core . text . TextUtils Compat Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . what 3 words . components . R Ċ import Ġcom . what 3 words . components . utils . Display Units Ċ import Ġcom . what 3 words . components . utils . My Divider Item Decorator Ċ import Ġcom . what 3 words . components . utils . Voice Pulse Layout Ċ import Ġkotlinx . android . synt hetic . main . item _ suggestion . view .* Ċ import Ġjava . text . NumberFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . math . round ToInt ĊĊ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . build ErrorMessage () Ġ{ ĊĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . Margin LayoutParams ( ĊĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠ ĠWR AP _ CONTENT ĊĠĠĠ Ġ) ĊĠĠĠ Ġdefault Invalid Address Message View . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġthis @ build ErrorMessage . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build ErrorMessage . y Ġ+ Ġthis @ build ErrorMessage . height Ġ- Ġresources . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . dim en . tiny _ margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠ Ġ} ĊĠĠĠ Ġ( parent Ġas ? ĠViewGroup )?. addView ( default Invalid Address Message View ) Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . build Correction () Ġ{ ĊĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . Margin LayoutParams ( ĊĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠ ĠWR AP _ CONTENT ĊĠĠĠ Ġ) ĊĠĠĠ Ġdefault Correction Picker . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġthis @ build Correction . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build Correction . y Ġ+ Ġthis @ build Correction . height Ġ- Ġresources . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . dim en . tiny _ margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠ Ġ} ĊĠĠĠ Ġ( parent Ġas ? ĠViewGroup )?. addView ( default Correction Picker ) Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . build Voice () Ġ{ ĊĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . Margin LayoutParams ( ĊĠĠĠĠĠĠĠ Ġresources . get Dimension Pixel Size ( R . dim en . voice _ button _ width ), ĊĠĠĠĠĠĠĠ Ġresources . get Dimension Pixel Size ( R . dim en . input _ height ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġinline Voice Pulse Layout . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils Compat . get Layout Direction From Locale ( Locale . getDefault ()) Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build Voice . x Ġ+ Ġthis @ build Voice . width Ġ- Ġ( resources . get Dimension Pixel Size ( R . dim en . voice _ button _ width )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build Voice . x ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build Voice . y Ġ+ Ġ( resources . get Dimension Pixel Size ( R . dim en . input _ border _ height )) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= Ġif Ġ( voice Enabled ) ĠVIS IBLE Ġelse ĠG ONE ĊĠĠĠĠĠĠĠ ĠsetIs Voice Running ( false ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ( parent Ġas ? ĠViewGroup )?. addView ( inline Voice Pulse Layout ) Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . build Background Voice () Ġ{ ĊĠĠĠ Ġvoice Pulse Layout Ġ= ĠVoice Pulse Layout ( context , Ġvoice Placeholder ) ĊĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . Margin LayoutParams ( ĊĠĠĠĠĠĠĠ Ġ( parent Ġas ? ĠViewGroup )?. root View ?. width Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠ Ġ( parent Ġas ? ĠViewGroup )?. root View ?. height Ġ?: Ġ 0 ĊĠĠĠ Ġ) ĊĠĠĠ Ġvoice Pulse Layout !!. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ ĠsetIs Voice Running ( false , Ġshould Animate Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ(( parent Ġas ? ĠViewGroup )?. root View Ġas ? ĠViewGroup )?. addView ( voice Pulse Layout ) Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . build Suggestion List () Ġ{ ĊĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . Margin LayoutParams ( ĊĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠ ĠWR AP _ CONTENT ĊĠĠĠ Ġ) ĊĠĠĠ Ġdefault Picker . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Focus able In Touch Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġthis @ build Suggestion List . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build Suggestion List . y Ġ+ Ġthis @ build Suggestion List . height Ġ+ Ġresources . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . dim en . input _ margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġval Ġlinear Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠAppCompat Resources . get Drawable ( context , ĠR . drawable . bg _ white _ border _ gray ) ĊĠĠĠĠĠĠĠ Ġresources . get Dimension Pixel Size ( R . dim en . tiny _ margin ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( it , Ġit , Ġit , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġlinear ĊĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( resources , ĠR . drawable . divider , Ġnull )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Divider Item Decorator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ( parent Ġas ? ĠViewGroup )?. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd View ( default Picker ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . show Images ( show Tick : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġis Showing Tick Ġ= Ġshow Tick ĊĠĠĠ Ġif Ġ( TextUtils Compat . get Layout Direction From Locale ( Locale . getDefault ()) Ġ== ĠView Compat . LAYOUT _ DIRECTION _ LTR ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Compound Draw ables ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tick ) Ġtick Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġset Compound Draw ables ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tick ) Ġtick Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! show Tick Ġ&& Ġvoice Enabled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinline Voice Pulse Layout . visibility Ġ= ĠVIS IBLE ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġinline Voice Pulse Layout . visibility Ġ= ĠG ONE ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . show Keyboard () Ġ{ ĊĠĠĠ Ġthis . request Focus () ĊĠĠĠ Ġthis . setSelection ( this . text !!. length ) ĊĠĠĠ Ġval Ġimm : ĠInput Method Manager Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġimm . toggle Soft Input ( Input Method Manager . HIDE _ IMP LICIT _ ONLY , Ġ 0 ) Ċ } Ċ Ċ internal Ġfun ĠW 3 W Auto Suggest EditText . hide Keyboard () Ġ{ ĊĠĠĠ Ġthis . request Focus () ĊĠĠĠ Ġval Ġimm : ĠInput Method Manager Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġimm . hide Soft Input From Window ( window Token , Ġ 0 ) Ċ } Ċ Ċ internal Ġfun Ġformat Units ( distance Km : ĠInt , Ġdisplay Units : ĠDisplay Units , Ġcontext : ĠContext ): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( distance Km Ġ== Ġ 0 Ġ|| ĊĠĠĠĠĠĠĠ Ġ( display Units Ġ== ĠDisplay Units . SYSTEM Ġ&& Ġ! Locale . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Metric () Ġ&& Ġ( distance Km Ġ/ Ġ 1 . 6 0 9 ) Ġ< Ġ 1 ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( display Units Ġ== ĠDisplay Units . IMP ERIAL Ġ&& Ġ( distance Km Ġ/ Ġ 1 . 6 0 9 ) Ġ< Ġ 1 ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( display Units Ġ== ĠDisplay Units . SYSTEM Ġ&& ĠLocale . getDefault (). is Metric ()) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Units Ġ== ĠDisplay Units . METRIC ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfmt Fr Ġ= ĠMeasure Format . getInstance ( Locale . getDefault (), ĠFormat Width . SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeasure F Ġ= ĠMeasure ( 1 , ĠMeasure Unit . KI LO METER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( R . string . distance _ metric _ low , Ġfmt Fr . format ( measure F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( R . string . distance _ metric _ low , Ġ" 1 Ġkm ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfmt Fr Ġ= ĠMeasure Format . getInstance ( Locale . getDefault (), ĠFormat Width . SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeasure F Ġ= ĠMeasure ( 1 , ĠMeasure Unit . M ILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( R . string . distance _ metric _ low , Ġfmt Fr . format ( measure F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( R . string . distance _ imp erial _ low , Ġ" 1 Ġmi ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfmt Fr Ġ= ĠMeasure Format . getInstance ( Locale . getDefault (), ĠFormat Width . SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(( display Units Ġ== ĠDisplay Units . SYSTEM Ġ&& ĠLocale . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Metric ()) Ġ|| Ġdisplay Units Ġ== ĠDisplay Units . METRIC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeasure F Ġ= ĠMeasure ( distance Km , ĠMeasure Unit . KI LO METER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfmt Fr . format ( measure F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeasure F Ġ= ĠMeasure (( distance Km Ġ/ Ġ 1 . 6 0 9 ). round ToInt (), ĠMeasure Unit . M ILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfmt Fr . format ( measure F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Format Ġ= ĠNumber Format . getNumber Instance ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( display Units Ġ== ĠDisplay Units . SYSTEM Ġ&& ĠLocale . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Metric ()) Ġ|| Ġdisplay Units Ġ== ĠDisplay Units . METRIC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( R . string . distance _ metric , Ġn Format . format ( distance Km )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . distance _ imp erial , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Format . format (( distance Km Ġ/ Ġ 1 . 6 0 9 ). round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ internal Ġfun ĠLocale . is Metric (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( country . toUpperCase ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" US ", Ġ" GB ", Ġ" MM ", Ġ" LR " Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠ Ġ} Ċ }