package Ġcom . kon den ko . po cket w aka . data . android Ċ Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Ċ import Ġandroid . net . Network Request Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ Ċ class ĠApp Connectivity Status Provider ( private Ġval Ġconnectivity Manager : ĠConnect ivity Manager ?) Ġ: ĠConnect ivity Status Provider Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġis Network Available () Ġ= Ġconnectivity Manager ?. let Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġis Network Init ially Available Ġ= Ġmanager . active Network Info ?. isConnected Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠBehavior Subject . create Default < Boolean >( is Network Init ially Available ) ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Request Ġ= ĠNetwork Request . Builder (). build () ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠConnect ivity Manager . Network Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Lost ( network : ĠNetwork ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Lost ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onNext ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Available ( network : ĠNetwork ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Available ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onNext ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsubject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġmanager . register Network Callback ( network Request , Ġcallback ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Dispose Ġ{ Ġmanager . unregister Network Callback ( callback ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠ Ġ} Ġ?: ĠObservable . error ( NullPointerException (" Connectivity Manager Ġis Ġnot Ġavailable ")) Ċ Ċ }