/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġcode station . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . code station . h enk ak user ver Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . net . wifi . Wifi Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Requires Permission Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ import Ġjava . io . IOException ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ// ĠINSTANCE ĠOF ĠAND ROID ĠWEB ĠSERVER ĊĠĠĠ Ġprivate Ġvar Ġh enk aku Server : ĠH enk aku Server Ġ= ĠH enk aku Server ( this , ĠBuild Config . default Port ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġversion Text . text Ġ= ĠBuild Config . VERSION _ NAME ĊĊĠĠĠĠĠĠĠ ĠtextView Ip Access . text Ġ= ĠgetString ( R . string . enable _ access _ point ) ĊĊĠĠĠĠĠĠĠ Ġfloating ActionButton On Off . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Server Status () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠINIT ĠBRO ADCAST ĠRE CE IVER ĠTO ĠLIST EN ĠNET WORK ĠSTATE ĠCH ANG ED ĊĠĠĠĠĠĠĠ Ġinit Broadcast Receiver Network StateChanged () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Server Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ap Online ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Started Ġ&& Ġstart Android WebServer ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Ip Access . text Ġ= ĠgetString ( R . string . default _ host , ĠBuild Config . default Address , ĠBuild Config . default Port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloating ActionButton On Off . background Tint List Ġ= ĠContext Compat . getColor State List ( this @ MainActivity , ĠR . color . color Green ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( stop Android WebServer ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Message . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Ip Access . text Ġ= ĠgetString ( R . string . enable _ access _ point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloating ActionButton On Off . background Tint List Ġ= ĠContext Compat . getColor State List ( this @ MainActivity , ĠR . color . color Red ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( coordinator Layout , ĠgetString ( R . string . wifi _ message ), ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region ĠStart ĠAnd ĠStop ĠAndroid WebServer ĊĠĠĠ Ġprivate Ġfun Ġstart Android WebServer (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh enk aku Server . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( coordinator Layout , Ġ" Cannot Ġstart ĠH enk aku Server Ġlistening Ġon Ġport Ġ${ Build Config . default Port }", ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Android WebServer (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh enk aku Server . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġprivate Ġfun Ġinit Broadcast Receiver Network StateChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġfilters . addAction (" android . net . wifi . WIFI _ STATE _ CHANGED ") ĊĠĠĠĠĠĠĠ Ġfilters . addAction (" android . net . wifi . STATE _ CHANGE ") ĊĠĠĠĠĠĠĠ Ġfilters . addAction (" android . net . wifi . WIFI _ AP _ STATE _ CHANGED ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbroadcast Receiver Network State Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Server Status () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . register Receiver ( broadcast Receiver Network State , Ġfilters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Permission ( value Ġ= ĠManifest . permission . ACCESS _ NETWORK _ STATE ) ĊĠĠĠ Ġprivate Ġfun Ġis Ap Online (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwifi Manager Ġ= Ġapplication Context . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġwifi Manager . java Class . getDeclared Method (" is Wifi Ap Enabled ") ĊĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod . invoke ( wifi Manager ) Ġas ĠBoolean ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevt : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . warning ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . dialog _ exit _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( android . R . string . ok )) Ġ{ Ġ_, Ġ_ Ġ-> Ġfinish () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( resources . getString ( android . R . string . cancel ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġstop Android WebServer () ĊĠĠĠĠĠĠĠ Ġis Started Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Started Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ Ċ } Ċ