package Ġio . horizontal systems . bank wallet . net Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . v 2 ray . ang . dto . E Config Type Ċ import Ġcom . v 2 ray . ang . dto . Server Config Ċ import Ġcom . v 2 ray . ang . dto . V 2 ray Config Ċ import Ġcom . v 2 ray . ang . service . V 2 Ray Service Manager Ċ import Ġcom . v 2 ray . ang . util . M mk v Manager Ċ import Ġcom . v 2 ray . ang . util . Utils Ċ import Ġio . horizontal systems . bank wallet . core . App Ċ import Ġio . horizontal systems . bank wallet . entities . Vpn Server Info Ċ import Ġio . horizontal systems . bank wallet . modules . main . MainActivity Ċ import Ġio . horizontal systems . bank wallet . modules . market . overview . Market Overview Fragment Ċ import Ġio . horizontal systems . bin ance chain kit . Bin ance Chain Kit Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . coroutines .* Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠV pn Connect Service Ġ{ ĊĊĠĠĠ Ġval Ġconnect Node Ġ= ĠHashSet < String >() ĊĠĠĠ Ġvar Ġstart Loop Check Connection Ġ= Ġfalse ĊĠĠĠ Ġvar Ġconnecting Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġis Connected Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar ĠhttpClient : ĠOk HttpClient ? Ġ= ĠOk HttpClient (). newBuilder () ĊĠĠĠĠĠĠĠ Ġ. connect Timeout ( 5 0 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ. read Timeout ( 5 0 0 0 , ĠTimeUnit . MILLISECONDS ). build () ĊĊĠĠĠ Ġfun Ġstart Vpn ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! activity . get SharedPreferences (" vpn Setting ", ĠContext . MODE _ PRIVATE ). getBoolean (" vpn Open ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSafe Net Service (). get Vpn Nodes (). map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . map Ġ{ Ġv pn Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġv pn Info [" endpoint "] !!. split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV pn Server Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv pn Info [" uid "] !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ws ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" none " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcache ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . vpn Server Storage . clear All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . vpn Server Storage . save ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSafe Net Work . vpn Nodes Ġ= Ġ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Vpn ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Vpn ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre Connect Vpn ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connecting ) Ġreturn ĊĠĠĠĠĠĠĠ Ġstart Loop Check Connection Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġstop Connect ( activity ) ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Vpn ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect Vpn ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connecting ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( set Server Config ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnecting Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV 2 Ray Service Manager . start V 2 Ray ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Connect ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠV 2 Ray Service Manager . stop V 2 Ray ( activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Server Config (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® èµ° ä»£çĲĨ çļĦ APP ĊĠĠĠĠĠĠĠ Ġset Proxy Apps () ĊĠĠĠĠĠĠĠ Ġval Ġserver Info Ġ= Ġget Connect Server Node () Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ ĠLog . e (" Vpn Connect Service ", Ġ" connect Ġip : Ġ${ server Info . address }") ĊĠĠĠĠĠĠĠ Ġ// Ġ ç§»éĻ¤ ä¸Ĭ æ¬¡ éħįç½® çļĦ æľįåĬ¡åĻ¨ ĊĠĠĠĠĠĠĠ ĠM mk v Manager . remove Server () ĊĠĠĠĠĠĠĠ Ġconnect Node . add ( server Info . address ) ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠServer Config . create ( server Info . type ) ĊĠĠĠĠĠĠĠ Ġinit Outbound ( server Info , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Proxy Apps () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapps Ġ= ĠHashSet < String >() ĊĠĠĠĠĠĠĠ Ġapps . add (" com . an wang . saf ew allet ") ĊĠĠĠĠĠĠĠ Ġapps . add (" com . an wang . saf ew allet . dev ") ĊĠĠĠĠĠĠĠ Ġapps . add (" com . an wang . saf ew allet . dev . test net ") ĊĠĠĠĠĠĠĠ Ġapps . add (" com . an wang . saf ew allet . dev . app center ") ĊĠĠĠĠĠĠĠ Ġapps . add (" com . an wang . saf ew allet . app center ") ĊĠĠĠĠĠĠĠ Ġapps . add (" org . telegram . messenger . web ") ĊĠĠĠĠĠĠĠ Ġapps . add (" org . telegram . messenger ") ĊĠĠĠĠĠĠĠ ĠM mk v Manager . set Proxy Apps ( apps ) Ċ Ċ // ĠĠĠĠĠĠĠ ĠM mk v Manager . set Routing Direct (" 1 2 0 . 7 8 . 2 2 7 . 9 6 , 1 1 4 . 2 1 5 . 3 1 . 3 7 , 4 7 . 9 6 . 2 5 4 . 2 3 5 , 1 0 6 . 1 4 . 6 6 . 2 0 6 , 4 7 . 5 2 . 9 . 1 6 8 , 4 7 . 7 5 . 1 7 . 2 2 3 , 4 7 . 8 8 . 2 4 7 . 2 3 2 , 4 7 . 8 9 . 2 0 8 . 1 6 0 , 4 7 . 7 4 . 1 3 . 2 4 5 ") Ċ // ĠĠĠĠĠĠĠ ĠM mk v Manager . set Routing Direct ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Outbound ( server Info : ĠV pn Server Info , Ġconfig : ĠServer Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . outbound Bean ?. settings ?. v next ?. get ( 0 )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . address Ġ= Ġserver Info . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . port Ġ= Ġserver Info . port ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . users [ 0 ]. id Ġ= Ġserver Info . clientId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . config Type Ġ== ĠE Config Type . VM ESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . users [ 0 ]. security Ġ= Ġserver Info . security s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . users [ 0 ]. encryption Ġ= Ġ" auto " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( config . config Type Ġ== ĠE Config Type . V LESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* it . users [ 0 ]. encryption Ġ= Ġet _ security . text . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stream Security s [ sp _ stream _ security . selected Item Position ] Ġ== ĠV 2 ray Config . X TLS ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv next . users [ 0 ]. flow Ġ= Ġflows [ sp _ flow . selected Item Position ]. if Blank Ġ{ ĠV 2 ray Config . DEFAULT _ FLOW Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . users [ 0 ]. flow Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig . outbound Bean ?. settings ?. servers ?. get ( 0 )?. let Ġ{ Ġserver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . address Ġ= Ġserver Info . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . port Ġ= Ġserver Info . port ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . method Ġ= Ġ" auto " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . config Type Ġ== ĠE Config Type . SH ADOW SOCK S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . password Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . method Ġ= Ġ" auto " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( config . config Type Ġ== ĠE Config Type . SOCK S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . users Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* val Ġsock s Users Bean Ġ= ĠV 2 ray Config . Outbound Bean . Out Settings Bean . Servers Bean . S ocks Users Bean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsock s Users Bean . user Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsock s Users Bean . pass Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . users Ġ= ĠlistOf ( socks Users Bean ) */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( config . config Type Ġ== ĠE Config Type . T RO J AN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . password Ġ= Ġserver Info . clientId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconfig . outbound Bean ?. stream Settings ?. let Ġ{ Ġstream Setting Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġserver Info . protocol ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġserver Info . cam ou fl age Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Host Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs ni Ġ= Ġstream Setting . populate Transport Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransport Ġ= Ġnetwork , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Type Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= Ġrequest Host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseed Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu ic Security Ġ= Ġrequest Host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠserviceName Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġallow In secure Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Tls Ġ= Ġif Ġ( config . config Type Ġ== ĠE Config Type . T RO J AN ) ĠV 2 ray Config . TLS Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream Setting . populate Tls Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Tls , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow In secure , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ni ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠM mk v Manager . encode Server Config ("", Ġconfig ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Connect Server Node (): ĠV pn Server Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnote List Ġ= ĠSafe Net Work . get Vpn Server Info () ĊĠĠĠĠĠĠĠ Ġif Ġ( note List . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnote List [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( connect Node . size Ġ== Ġnote List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Node . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġrandom . nextInt ( note List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! connect Node . contains ( note List [ index ]. address )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnote List [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Data ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è¿ŀæİ¥ æĪĲåĬŁ åĲİ ï¼Į åĪ·æĸ° éĴ± åĮħ ï¼Į è¿ŀæİ¥ VPN è¿ĩç¨ĭä¸Ń æľī åı¯èĥ½ å¯¼èĩ´ åĲĮæŃ¥ å¤±è´¥ ĊĠĠĠĠĠĠĠ Ġ// Ġ åħĪ ä¿®æĶ¹ åĲĮæŃ¥ çĬ¶æĢģ ï¼Į åĨį åĪ·æĸ° ï¼Į ä¸į çĦ¶ ä¼ļ åĩºçİ° åĪ·æĸ° ä¸į æĪĲåĬŁ çļĦ æĥħåĨµ ĊĠĠĠĠĠĠĠ ĠApp . bin ance Kit Manager . bin ance Kit ?. sync State Ġ= ĠBin ance Chain Kit . Sync State . Not Sync ed ( Throwable (" Initial ĠState ")) ĊĠĠĠĠĠĠĠ ĠApp . adapter Manager . refresh () ĊĠĠĠĠĠĠĠ Ġ// Ġ åĪ·æĸ° Bitcoin ç³»åĪĹ ĊĠĠĠĠĠĠĠ ĠApp . bit Coin ConnectionManager . on Enter Foreground () ĊĠĠĠĠĠĠĠ ĠApp . ethereum Kit Manager . e vm Kit Wrapper ?. e vm Kit ?. on Enter Foreground () ĊĠĠĠĠĠĠĠ ĠApp . bin ance Smart Chain Kit Manager . e vm Kit Wrapper ?. e vm Kit ?. on Enter Foreground () ĊĠĠĠĠĠĠĠ Ġval Ġmain Activity Ġ= Ġactivity Ġas ĠMainActivity ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Market Overview Fragment ( main Activity . support FragmentManager . fragments ) Ġ{ Ġfragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠMarket Overview Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . viewModel . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Market Overview Fragment ( fragments : ĠList < Fragment >, Ġcallback : Ġ( Fragment ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragments . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠMarket Overview Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Fragment Ġ= Ġit . child FragmentManager . fragments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Market Overview Fragment ( child Fragment , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlook Check Vpn Connection ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( start Loop Check Connection ) Ġreturn ĊĠĠĠĠĠĠĠ Ġstart Loop Check Connection Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Vpn Connect Service ", Ġ" start Ġlook Ġcheck Ġconnection ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( start Loop Check Connection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconnection Network () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Vpn Connect Service ", Ġ" look Ġcheck Ġconnection Ġresult : Ġ$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! start Loop Check Connection ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Connect ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Loop Check Connection Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . send Broadcast ( Intent (" com . an wang . safe . connect ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Data ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnection Network (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest : ĠRequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// www . google . com ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠhttpClient ?. new Call ( request )?. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Vpn Connect Service ", Ġ" google Ġresponse : Ġ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresponse . code Ġin Ġ 2 0 0 .. 3 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Vpn Connect Service ", Ġ" google Ġerror : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ