package Ġke k me ch . ru . common _ network . connection _ tracker Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Ċ import Ġandroid . net . Network Capabilities . TRANSPORT _ CELL ULAR Ċ import Ġandroid . net . Network Capabilities . TRANSPORT _ WIFI Ċ import Ġandroid . net . Network Request Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . subjects . Behavior Subject Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠConnection Tracker ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġwifi State Behavior Ġ= ĠBehavior Subject . create < Boolean >() ĊĠĠĠ Ġprivate Ġval Ġcell ular State Behavior Ġ= ĠBehavior Subject . create < Boolean >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Tracking () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve Connection State (): ĠObservable < Boolean > Ġ= ĊĠĠĠĠĠĠĠ ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine Latest ( wifi State Behavior , Ġcell ular State Behavior , Ġ:: Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( NETWORK _ STATE _ DE BOUN CE , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( is Wifi Enabled , Ġis Cell ular Enabled ) Ġ-> Ġis Wifi Enabled Ġor Ġis Cell ular Enabled Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĊĠĠĠ Ġprivate Ġfun Ġstart Tracking () Ġ{ ĊĠĠĠĠĠĠĠ Ġwifi State Behavior . onNext ( false ) ĊĠĠĠĠĠĠĠ Ġcell ular State Behavior . onNext ( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġconnectivity Manager . observe Network ( TRANSPORT _ WIFI , Ġwifi State Behavior :: onNext ) ĊĠĠĠĠĠĠĠ Ġconnectivity Manager . observe Network ( TRANSPORT _ CELL ULAR , Ġcell ular State Behavior :: onNext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun ĠConnect ivity Manager . observe Network ( ĊĠĠĠĠĠĠĠ Ġtransport Type : ĠInt , ĊĠĠĠĠĠĠĠ Ġon Connection StateChanged : Ġ( Boolean ) Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠNetwork Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Transport Type ( transport Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠConnect ivity Manager . Network Callback () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Lost ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Lost ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Connection StateChanged . invoke ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Available ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Available ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Connection StateChanged . invoke ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġregister Network Callback ( request , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNET WORK _ STATE _ DE BOUN CE Ġ= Ġ 3 0 0 L ĊĠĠĠ Ġ} Ċ }