package Ġbe . my god . vpn hot spot . net . monitor Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . net .* Ċ import Ġandroid . os . Build Ċ import Ġbe . my god . vpn hot spot . App . Companion . app Ċ import Ġtim ber . log . Tim ber Ċ Ċ object ĠDefault Network Monitor Ġ: ĠUp stream Monitor () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġregistered Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcurrent Network : ĠNetwork ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġcurrent Link Properties : ĠLink Properties ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUnfortunately Ġregister Default Network Callback Ġis Ġgoing Ġto Ġreturn ĠVPN Ġinterface Ġsince ĠAndroid ĠP ĠDP 1 : ĊĠĠĠĠ Ġ* Ġhttps :// android . google source . com / platform / frameworks / base / +/ dda 1 5 6 ab 0 c 5 d 6 6 ad 8 2 bd cf 7 6 cda 0 7 cbc 0 a 9 c 8 a 2 e ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġnetwork Request Ġ= ĠNetwork Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Capability ( Network Capabilities . NET _ CAP ABILITY _ INTER NET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Capability ( Network Capabilities . NET _ CAP ABILITY _ NOT _ RE STRICT ED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġprivate Ġval Ġnetwork Callback Ġ= Ġobject Ġ: ĠConnect ivity Manager . Network Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Available ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= Ġapp . connectivity . get Link Properties ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġif name Ġ= Ġproperties ?. interface Name Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( current Network ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Properties Ġ= Ġcurrent Link Properties !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( if name Ġ== Ġold Properties . interface Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( properties . dns Servers Ġ== Ġold Properties . dns Servers ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcallbacks . forEach Ġ{ Ġit . on Lost () Ġ} ĠĠ Ġ// Ġwe Ġare Ġusing Ġthe Ġother Ġdefault Ġnetwork Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Network Ġ= Ġnetwork ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Link Properties Ġ= Ġproperties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ Ġit . on Available ( if name , Ġproperties . dns Servers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Link Properties Changed ( network : ĠNetwork , Ġproperties : ĠLink Properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Network Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Available ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Network Ġ!= Ġnetwork ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Properties Ġ= Ġcurrent Link Properties !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Link Properties Ġ= Ġproperties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġif name Ġ= Ġproperties . interface Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif name Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" interface Name Ġbecame Ġnull : Ġ$ old Properties Ġ-> Ġ$ properties ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Lost ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif name Ġ!= Ġold Properties . interface Name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( RuntimeException (" interface Name Ġchanged : Ġ$ old Properties Ġ-> Ġ$ properties ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Lost () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Available ( if name , Ġproperties . dns Servers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . dns Servers Ġ!= Ġold Properties . dns Servers Ġ-> Ġcallbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Available ( if name , Ġproperties . dns Servers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Lost ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Network Ġ!= Ġnetwork ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ Ġit . on Lost () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Network Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Link Properties Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister Callback Locked ( callback : ĠCallback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( registered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Link Properties Ġ= Ġcurrent Link Properties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Link Properties Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Available ( current Link Properties . interface Name !! , Ġcurrent Link Properties . dns Servers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġin Ġ 2 4 .. 2 7 ) Ġ@ Target Api ( 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . connectivity . register Default Network Callback ( network Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . connectivity . request Network ( network Request , Ġnetwork Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSecurity Exception Ġwould Ġbe Ġthrown Ġin Ġrequest Network Ġon ĠAndroid Ġ 6 . 0 Ġthanks Ġto ĠGoogle 's Ġst upid Ġbug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ!= Ġ 2 3 ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Fallback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy Locked () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! registered ) Ġreturn ĊĠĠĠĠĠĠĠ Ġapp . connectivity . unregister Network Callback ( network Callback ) ĊĠĠĠĠĠĠĠ Ġregistered Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcurrent Network Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcurrent Link Properties Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ