package Ġcom . github . l ion 4 ik . network flow . network state Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Ċ import Ġandroid . net . Network Capabilities Ċ import Ġandroid . os . Build Ċ import Ġcom . github . l ion 4 ik . network flow . Connectivity Ċ import Ġkotlinx . coroutines . channels . Send Channel Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . channels . send Blocking Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . channel Flow Ċ import Ġkotlinx . coroutines . flow . distinct Until Changed Ċ Ċ @ Target Api ( Build . VERSION _ CODES . LO L LI POP ) Ċ internal Ġclass ĠL ol lip op Network State Ob serving Strategy ( ĊĠĠĠ Ġprivate Ġval Ġconnectivity Manager : ĠConnect ivity Manager , ĊĠĠĠ Ġprivate Ġval Ġnetwork Request Factory : ĠNetwork Request Factory Ġ= ĠNetwork Request Factory () Ċ ) Ġ: ĊĠĠĠ ĠNetwork Ob serving Strategy Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Network State ( app Context : ĠContext ): ĠFlow < Connectivity > Ġ= ĊĠĠĠĠĠĠĠ Ġchannel Flow < Connectivity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend If Unavailable ( this @ channel Flow ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnectivity Callback Ġ= Ġobject Ġ: ĠConnect ivity Manager . Network Callback () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Capabilities Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork : ĠNetwork , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Capabilities : ĠNetwork Capabilities ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Blocking ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity . from Network Capabilities ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Capabilities , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Manager . active Network Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ SuppressWarnings (" deprecation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Lost ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend If Unavailable ( this @ channel Flow ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġnetwork Request Factory . create Network Request ( Network Capabilities . NET _ CAP ABILITY _ INTER NET , ĠNetwork Capabilities . NET _ CAP ABILITY _ NOT _ RE STRICT ED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Manager . register Network Callback ( request , Ġconnectivity Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġawait Close Ġ{ Ġconnectivity Manager . unregister Network Callback ( connectivity Callback ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. distinct Until Changed () ĊĊĠĠĠ Ġprivate Ġfun Ġsend If Unavailable ( send Channel : ĠSend Channel < Connectivity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connectivity Manager . active Network Info Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Channel . send Blocking ( Connectivity . un available ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }