package Ġcom . ps android labs . chat app . utils čĊč Ċ import Ġandroid . content . Context č Ċ import Ġandroid . widget . Array Adapter č Ċ import Ġcom . ps android labs . chat app . R č Ċ import Ġkotlinx . coroutines .* č Ċ import Ġjava . net . Data gram Socket č Ċ import Ġjava . net . Inet Address č Ċ import Ġjava . util . regex . Pattern čĊč Ċ object ĠIP Ġ: ĠCor outine Scope Ġ{ čĊĠĠĠ Ġprivate Ġval Ġparent Job Ġ= ĠJob () čĊĠĠĠ Ġoverride Ġval Ġcoroutine Context Ġ= Ġparent Job Ġ+ ĠDispatch ers . IO čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠUse Ġa Ġdata gram Ġsocket Ġto Ġfind Ġthe Ġdevice ĠIP Ġon Ġthe Ġlocal Ġnetwork . čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġget IpAddress (): ĠString Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġip Ġ= Ġ"" čĊčĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData gram Socket (). use Ġ{ Ġsocket Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . connect ( Inet Address . get ByName (" 8 . 8 . 8 . 8 "), ĠConstants . PORT _ 1 0 2 7 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġip Ġ= Ġsocket . local Address . host Address čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġip čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġget Port List ( context : ĠContext ): ĠArray Adapter < Int > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠlistOf ( Constants . PORT _ 1 0 2 7 , ĠConstants . PORT _ 1 0 2 8 , ĠConstants . PORT _ 1 0 2 9 ) čĊĠĠĠĠĠĠĠ Ġreturn ĠArray Adapter ( context , ĠR . layout . list _ item , Ġitems ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġvalidate Ip ( text : ĠString ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġip Regex Ġ= Ġ"^ (([ 0 - 9 ] |[ 1 - 9 ][ 0 - 9 ]| 1 [ 0 - 9 ][ 0 - 9 ]| 2 [ 0 - 4 ][ 0 - 9 ]| 2 5 [ 0 - 5 ]) (\\ .( ?! $ )| $ )){ 4 }$ " čĊĠĠĠĠĠĠĠ Ġreturn ĠPattern . matches ( ip Regex , Ġtext ) čĊĠĠĠ Ġ} č Ċ }