package Ġua . esh cher bin ock . reach ability Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Info Ċ import Ġua . esh cher bin ock . reach ability . receiver . Reach ability ChangeListener Ċ import Ġua . esh cher bin ock . reach ability . receiver . Reach ability Receiver Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠE ug ene ĠSh cher bin ock Ġon Ġ 2 / 2 4 / 1 8 . Ċ Ġ*/ Ċ Ċ interface ĠRe ach ability Notifier Type Ġ{ ĊĊĠĠĠ Ġvar Ġcurrent State : ĠRe ach ability . State ĊĊĠĠĠ Ġfun Ġstart Notifier () ĊĠĠĠ Ġfun Ġstop Notifier () ĊĊĠĠĠ Ġfun Ġadd Listener ( observer : ĠRe ach ability State Observer ) ĊĠĠĠ Ġfun Ġremove Listener ( observer : ĠRe ach ability State Observer ) Ċ Ċ } Ċ Ċ class ĠRe ach ability Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠRe ach ability Notifier Type , ĠRe ach ability ChangeListener Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ ĠRE ACH ABLE , ĊĠĠĠĠĠĠĠ ĠNOT _ RE ACH ABLE ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġvar Ġs Instance : ĠRe ach ability Notifier Type ? Ġ= Ġnull Ċ // Ċ // ĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠRe ach ability Notifier Type Ġ= Ġs Instance Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsynchronized ( this ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Instance Ġ?: ĠRe ach ability ( context ). also Ġ{ Ġs Instance Ġ= Ġit Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġcurrent State : ĠState Ġ= ĠState . NOT _ RE ACH ABLE ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġis Reach able ( context ). to State () ĊĊĠĠĠ Ġprivate Ġval Ġm Reach ability Status Receiver : ĠBroadcast Receiver Ġ= ĠRe ach ability Receiver ( this ) ĊĠĠĠ Ġprivate Ġvar Ġm Observer s : ĠMutable List < Reach ability State Observer > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe ach ability ChangeListener Ġimplementation ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Reach ability Status Change ( context : ĠContext , Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Reach able ( context , Ġintent ). to State (). also Ġ{ ĠnewState Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake If Ġ{ ĠnewState Ġ!= Ġcurrent State Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Observer s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Reach ability StateChange ( newState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe ach ability Notifier Type Ġimplementation ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġstart Notifier () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . register Receiver ( m Reach ability Status Receiver , ĠRe ach ability Receiver . RE ACH ABILITY _ CHANGED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Notifier () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . unregister Receiver ( m Reach ability Status Receiver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( observer : ĠRe ach ability State Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtake Unless Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Observer s . contains ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Observer s . add ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Listener ( observer : ĠRe ach ability State Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Observer s . remove ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrivate ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġis Reach able ( context : ĠContext , Ġintent : ĠIntent ? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Network Information Ġ= Ġget Network Information ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġactive Network Information ?. isConnected Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Network Information ( context : ĠContext ): ĠNetwork Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġreturn Ġconnectivity Manager . active Network Info ĊĠĠĠ Ġ} Ċ Ċ }