package Ġat . r tr . r mb t . android . ui . dialog Ċ Ċ import Ġandroid . location . Address Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġat . r tr . r mb t . android . R Ċ import Ġat . r tr . r mb t . android . databinding . Dialog Map Search Binding Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . IOException Ċ Ċ class ĠMap Search Dialog Ġ: ĠFull screen Dialog () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠDialog Map Search Binding ĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope : ĠCor outine Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main ) ĊĠĠĠ Ġprivate Ġvar Ġsearch Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġcallback : ĠCallback ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Fragment Ġis ĠCallback Ġ-> Ġtarget Fragment Ġas ĠCallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġis ĠCallback Ġ-> Ġactivity Ġas ĠCallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . dialog _ map _ search , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . edit Text Value . setOn Editor ActionListener Ġ{ Ġv , Ġaction Id , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġwhen Ġ( action Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Info . IME _ ACTION _ SEARCH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Search () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Search . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Search () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Job ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠString Ġ= Ġbinding . edit Text Value . text . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Search . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progressbar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Job ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Job Ġ= Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Results ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Address Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Search . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progressbar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Results ( value : ĠString , Ġfound : Ġ( Address ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgeo coder Ġ= ĠGeo coder ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval Ġaddress List : ĠList < Address >? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress List Ġ= Ġgeo coder . get From Location Name ( value , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! address List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound . invoke ( address List [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound . invoke ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfound . invoke ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġdialog ĊĠĠĠĠĠĠĠ Ġdialog ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . window ?. set Gravity ( Gravity . CENTER _ HORIZONTAL Ġor ĠGr avity . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . window ?. add Flags ( WindowManager . LayoutParams . FLAG _ DIM _ BE H IND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . window ?. set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ STATE _ ALWAYS _ VISIBLE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġinstance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠFull screen Dialog Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Search Dialog Ġ= ĠMap Search Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Search Dialog . setTarget Fragment ( fragment , Ġrequest Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap Search Dialog ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Address Result ( address : ĠAddress ?) ĊĠĠĠ Ġ} Ċ }