package Ġio . connect . wifi . sdk . internal Ċ Ċ import Ġandroid . app . Activity Ċ 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 . wifi . Wifi Manager Ċ import Ġandroid . os .* Ċ import Ġandroidx . core . os . Handler Compat Ċ import Ġio . connect . wifi . sdk . Connect Status Ċ import Ġio . connect . wifi . sdk . Wifi Rule Ċ import Ġio . connect . wifi . sdk . activity . Activity Helper Ċ import Ġio . connect . wifi . sdk . cer ific ate . factory . Certificate Factory Impl Ċ import Ġio . connect . wifi . sdk . cer ific ate . storage . Certificate Storage Impl Ċ import Ġio . connect . wifi . sdk . connect . Connection Command Ċ import Ġio . connect . wifi . sdk . connect . ConnectionManager Ċ import Ġjava . lang . ref . Soft Reference Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Future Ċ import Ġio . connect . wifi . sdk . util . execute Ċ import Ġjava . lang . Exception Ċ Ċ /** Ċ Ġ* Ġ@ suppress ĠInternal Ġapi Ċ Ġ* Ċ Ġ* Ġcontroller Ġthat Ġwill Ġcommunicate Ġwith Ġother ĠSDK Ġparts . ĠThis Ġis Ġan Ġentry Ġpoint Ġof Ġinternal Ċ Ġ* Ġsdk Ġlayer . Ċ Ġ* Ċ Ġ* Ġ@ since Ġ 1 . 0 . 1 Ċ Ġ*/ Ċ internal Ġclass ĠController ( private Ġval Ġactivity Helper : ĠActivity Helper ?) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmain Thread Handler : ĠHandler Ġby Ġlazy Ġ{ ĠHandler Compat . create Async ( Looper . get Main Looper ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġbackground Executor Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠExec utors . new Fixed ThreadPool ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime . get Runtime (). available Processors () ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . execute Ġ{ ĠProcess . set Thread Priority ( Process . THREAD _ PRIORITY _ BACKGROUND ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfactory : ĠW ifi Config Factory Ġby Ġlazy Ġ{ ĠW ifi Config Factory () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġwifi Manager : ĠW ifi Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrule : ĠW ifi Rule ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmanager : ĠConnection Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcommand : ĠConnection Command ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactivity Reference : ĠSoft Reference < Activity >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcertificate Factory : ĠCertificate Factory Impl ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Future : ĠFuture < *> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstatus Callback : Ġ(( Connect Status ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġctx : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġconnection Ġby Ġrules . ĊĠĠĠĠ Ġ* ĠWe 'll Ġproceed Ġthis Ġrequest Ġin Ġbackground Ġthread . ĠHowever , Ġwe ' r Ġable Ġto Ġuse Ġmain Ġthread Ġto ĊĠĠĠĠ Ġ* Ġaccess Ġ[ android . app . Activity ] Ġfunctions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ- Ġprovide Ġ[ android . content . Context ] Ġto Ġgrant Ġaccess Ġto Ġ[ android . net . wifi . Wifi Manager ] ĊĠĠĠĠ Ġ* Ġ@ param Ġrule Ġ- Ġprovide ĠW ifi Rule Ġto Ġdefine Ġhow Ġto Ġconnect Ġto Ġwifi ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġio . connect . wifi . sdk . Wifi Rule ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Connection ( context : ĠContext , Ġrule : ĠW ifi Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġinit Params ( context ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ<= Ġ 2 9 Ġ&& Ġrule . ssid Ġ!= Ġnull Ġ-> Ġdo Scan WiFi And Connection ( rule ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdo Connect ( rule ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Status Callback ( callback : Ġ( Connect Status ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠstartActivity For Result : Ġ( Intent , ĠInt ) Ġ-> ĠUnit Ġ= Ġ{ Ġintent , Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġmain Thread Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Reference ?. get ()?. startActivity For Result ( intent , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġactivity Helper ?. startActivity For Result ( intent , Ġi ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconnect Status : Ġ( Connect Status ) Ġ-> ĠUnit Ġ= Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠ Ġstatus Callback ?. invoke ( status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInstantiate Ġall Ġreferences Ġto Ġbe Ġused Ġlater . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Params ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( manager Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . debug ("[ Controller ] Ġinit Ġreferences ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwifi Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwifi Manager Ġ= Ġwifi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ? ĠActivity )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Reference Ġ= ĠSoft Reference ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcertificate Factory Ġ= ĠCertificate Factory Impl ( Certificate Storage Impl ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConnection Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwifi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcertificate Factory !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( command Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= ĠConnection Command ( factory , Ġmanager , Ġconnect Status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠW ifi ĠScan ĠReceiver ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġwifi Scan Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġintent . getBoolean Extra ( Wifi Manager . EXTRA _ RESULTS _ UPDATED , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx ?. unregister Receiver ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan Results () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscan Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġwifi Manager ?. scan Results ?. let Ġ{ Ġscan Results Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule ?. let Ġ{ Ġwifi Rule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scan Results . count Ġ{ Ġit . SSID Ġ== Ġwifi Rule . ssid Ġ} Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Connect ( wifi Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . debug (" Wifi Ġscan Suc ce ĠCan 't Ġfind Ġwifi Ġcurrent Ġss id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Status . invoke ( Connect Status . NotFound WiFi Point ( wifi Rule . ssid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Scan WiFi And Connection ( wifi Rule : ĠW ifi Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrule Ġ= Ġwifi Rule ĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe Ġreceiver ĊĠĠĠĠĠĠĠ Ġctx ?. register Receiver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwifi Scan Receiver , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Filter ( Wifi Manager . SCAN _ RESULTS _ AVAILABLE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġwifi Manager ?. start Scan () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( success . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan Results () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx ?. unregister Receiver ( wifi Scan Receiver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Connect ( rule : ĠW ifi Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Connect () ĊĠĠĠĠĠĠĠ Ġcurrent Future Ġ= Ġbackground Executor . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . debug ("[ Controller ] Ġtry Ġconnect Ġwith Ġrule Ġ$ rule ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . wifi Rule Ġ= Ġrule ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Handler Ġ= Ġmain Thread Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Status . invoke ( Connect Status . Error ( Exception ( it . message ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Ġ= Ġ{} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Connect () ĊĠĠĠĠĠĠĠ Ġactivity Reference ?. clear () ĊĠĠĠĠĠĠĠ Ġactivity Reference Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcertificate Factory Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmanager Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcommand Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġstatus Callback Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel Connect () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Future ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cancel ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Future Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġctx Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }