/* Ċ Copyright Ġ 2 0 2 0 ĠRe think DNS Ġand Ġits Ġauthors Ċ Ċ 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 Ċ Ċ https :// 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 . cel zero . br aved ns . service Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Info Ċ import Ġandroid . os . Build . VERSION Ċ import Ġandroid . os . Build . VERSION _ CODES Ċ import Ġandroid . util . Log Ċ import Ġjava . net . Inet Address Ċ import Ġjava . util .* ĊĊ Ċ class ĠNetwork Manager ( context : ĠContext , Ġnetwork Listener : ĠNetwork Listener ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġconnectivity Manager : ĠConnect ivity Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbroadcast Receiver : ĠBroadcast Receiver ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġapplication Context : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnetwork Listener : ĠNetwork Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinterface ĠNetwork Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Network Connected ( network Info : ĠNetwork Info ?) ĊĠĠĠĠĠĠĠ Ġfun Ġon Network Disconnected () ĊĠĠĠ Ġ} ĊĊĠĠ Ġ/* Ġfun ĠNetwork Manager ( context : ĠContext , Ġnetwork Listener : ĠNetwork Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication Context Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠ Ġconnectivity Manager Ġ= Ġapplication Context !!. getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġthis . network Listener Ġ= Ġnetwork Listener ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Connectivity Manager . CONNECT IVITY _ ACTION ) ĊĠĠĠĠĠĠĠ Ġbroadcast Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Changed ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapplication Context !!. register Receiver ( this . broadcast Receiver , Ġintent Filter ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFire Ġon Network Connected Ġlistener Ġimmediately Ġif Ġwe Ġare Ġonline . ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Info : ĠNetwork Info Ġ= Ġconnectivity Manager !!. getActive Network Info () ĊĠĠĠĠĠĠĠ Ġif Ġ( network Info Ġ!= Ġnull Ġ&& Ġnetwork Info . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Listener . on Network Connected ( network Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}*/ ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication Context Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠ Ġconnectivity Manager Ġ= Ġapplication Context !!. getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġthis . network Listener Ġ= Ġnetwork Listener ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Connectivity Manager . CONNECT IVITY _ ACTION ) ĊĠĠĠĠĠĠĠ Ġbroadcast Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Changed ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapplication Context !!. register Receiver ( this . broadcast Receiver , Ġintent Filter ) ĊĠĠĠĠĠĠĠ Ġ// ĠFire Ġon Network Connected Ġlistener Ġimmediately Ġif Ġwe Ġare Ġonline . ĊĠĠĠĠĠĠĠ Ġconnectivity Manager ?. active Network Info ?. take If Ġ{ Ġit . isConnected Ġ} ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Listener . on Network Connected ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( broadcast Receiver Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context !!. unregister Receiver ( broadcast Receiver ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Network Manager "," Error Ġunregister ing Ġnetwork Ġreceiver : Ġ" Ġ+ Ġe . message , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Receiver Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnectivity Changed ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Network Info Ġ= Ġconnectivity Manager !!. active Network Info ĊĠĠĠĠĠĠĠ Ġval Ġintent Network Info Ġ= ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . get Parcelable Extra < Network Info >(" network Info ") ĊĠĠĠĠĠĠĠ Ġif Ġ( network Listener Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( isConnected Network ( active Network Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġintent Network Info Ġ!= Ġnull Ġ&& Ġintent Network Info . type Ġ== ĠConnect ivity Manager . TYPE _ VPN ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVPN Ġstate Ġchanged , Ġwe Ġhave Ġconnectivity , Ġignore . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! isConnected Network ( active Network Info )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġactive Ġnetwork , Ġsignal Ġdisconnect Ġevent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Listener !!. on Network Disconnected () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( active Network Info !!. type Ġ!= ĠConnect ivity Manager . TYPE _ VPN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġan Ġactive Ġnetwork , Ġmake Ġsure Ġit Ġis Ġnot Ġa ĠVPN Ġto Ġsignal Ġa Ġconnected Ġevent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Listener !!. on Network Connected ( active Network Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġtrue Ġif Ġthe Ġsupplied Ġnetwork Ġis Ġconnected Ġand Ġavailable ĊĠĠĠ Ġ// TODO Ġ: ĠLook out Ġfor ĠConnect ivity Manager . Network Callback ĠAPI Ġinstead Ġof ĠNetwork Info ĊĠĠĠ Ġprivate Ġfun Ġis Connected Network ( network Info : ĠNetwork Info ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( network Info Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnetwork Info . isConnected Or Connecting Ġ&& Ġnetwork Info . is Available ĊĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġfun Ġget System Resolvers (): ĠList < Inet Address >? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġlist Ġof Ġnetwork Ġtypes Ġis Ġin Ġroughly Ġdescending Ġpriority Ġorder , Ġso Ġthat Ġthe Ġfirst ĊĠĠĠĠĠĠĠ Ġ// Ġentries Ġin Ġthe Ġreturned Ġlist Ġare Ġmost Ġlikely Ġto Ġbe Ġthe Ġappropriate Ġresolver s . ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Types Ġ= Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity Manager . TYPE _ ETHER NET , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity Manager . TYPE _ WIFI , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity Manager . TYPE _ MOB ILE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity Manager . TYPE _ WI MAX ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresolver s : ĠMutable List < Inet Address > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Network Manager "," This Ġfunction Ġshould Ġnever Ġbe Ġcalled Ġin ĠL + .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresolver s ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLink Properties ĠConnect ivity Manager . get Link Properties ( int Ġtype ) Ġ( removed Ġin ĠL ol lip op ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Link Properties Ġ= ĠConnect ivity Manager :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getMethod (" get Link Properties ", ĠInt :: class . java Primitive Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLink Properties , Ġwhich Ġexisted Ġbefore ĠL ol lip op Ġbut Ġhad Ġa Ġdifferent ĠAPI Ġand Ġwas Ġnot Ġexposed . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Properties Class Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass . forName (" android . net . Link Properties ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCollection < Inet Address > ĠLink Properties . get Dn ses () Ġ( re placed Ġby Ġget Dns Servers Ġin ĠL ol lip op ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Dn ses Ġ= Ġlink Properties Class . getMethod (" get Dn ses ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( network Type Ġin Ġnetwork Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Properties Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Link Properties . invoke ( connectivity Manager , Ġnetwork Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ// ĠNo Ġnetwork Ġof Ġthis Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Dn ses . invoke ( link Properties ) Ġas ĠCollection < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( address Ġin Ġaddresses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolver s . add ( address Ġas ĠInet Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Network Manager "," Error Ġunregister ing Ġnetwork Ġreceiver : Ġ" Ġ+ Ġe . message , Ġe ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresolver s ĊĠĠĠ Ġ} Ċ Ċ } Ċ