package Ġse . g ust av kar l sson . sky light . android . lib . reverse geo coder Ċ Ċ import Ġandroid . location . Address Ċ import Ġandroid . location . Geo coder Ċ import Ġarrow . core . Option Ċ import Ġarrow . core . to Option Ċ import Ġcom . dropbox . android . external . store 4 . Fetcher Ċ import Ġcom . dropbox . android . external . store 4 . Fetcher Result Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Coroutine Name Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġse . g ust av kar l sson . sky light . android . core . logging . log Info Ċ import Ġse . g ust av kar l sson . sky light . android . core . logging . log Warn Ċ import Ġse . g ust av kar l sson . sky light . android . lib . location . Approx imated Location Ċ import Ġjava . io . IOException Ċ Ċ internal Ġfun Ġcreate Android Reverse Geo coder Fetcher ( ĊĠĠĠ Ġgeo coder : ĠGeo coder , ĊĠĠĠ Ġdispatcher : ĠCor outine Dispatcher Ċ ): ĠFetch er < Approx imated Location , ĠOption < String >> Ġ= ĠFetch er . of Result Ġ{ Ġlocation Ġ-> ĊĠĠĠ Ġwith Context ( dispatcher Ġ+ ĠCor outine Name (" reverse Geo coder Fetcher ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses Ġ= Ġgeo coder . get From Location ( location . latitude , Ġlocation . longitude , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Name Ġ= Ġaddresses . get Best Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Info Ġ{ Ġ" Reverse Ġgeo coded Ġ$ location Ġto Ġ$ best Name " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch er Result . Data ( best Name . to Option ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Warn ( e ) Ġ{ Ġ" Failed Ġto Ġreverse Ġgeo code : Ġ$ location " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch er Result . Error . Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠList < Address >. get Best Name () Ġ= ĊĠĠĠ Ġmap NotNull Ġ{ Ġit . locality Ġ?: Ġit . sub Admin Area Ġ?: Ġit . admin Area Ġ}. first OrNull () Ċ