@@ -52,36 +52,66 @@ class LSHTTPNetworkAvailabilityService : Service() {
5252
5353 val cellularCallback =
5454 object : ConnectivityManager .NetworkCallback () {
55+ override fun onCapabilitiesChanged (
56+ network : Network ,
57+ networkCapabilities : NetworkCapabilities ,
58+ ) {
59+ super .onCapabilitiesChanged(network, networkCapabilities)
60+ if (networkCapabilities.hasTransport(NetworkCapabilities .TRANSPORT_CELLULAR )) {
61+ LSHTTPNetworkAccess .setCellularAvailable(true )
62+ } else {
63+ LSHTTPNetworkAccess .setCellularAvailable(false )
64+ }
65+ }
66+
5567 override fun onAvailable (network : Network ) {
5668 super .onAvailable(network)
69+ this @LSHTTPNetworkAvailabilityService.logger.debug(" Cellular became available." )
5770 LSHTTPNetworkAccess .setCellularAvailable(true )
5871 }
5972
6073 override fun onLost (network : Network ) {
6174 super .onLost(network)
75+ this @LSHTTPNetworkAvailabilityService.logger.debug(" Cellular became unavailable (Lost)." )
6276 LSHTTPNetworkAccess .setCellularAvailable(false )
6377 }
6478
6579 override fun onUnavailable () {
6680 super .onUnavailable()
81+ this @LSHTTPNetworkAvailabilityService.logger.debug(" Cellular became unavailable (Unavailable)." )
6782 LSHTTPNetworkAccess .setCellularAvailable(false )
6883 }
6984 }
7085
7186 val wifiCallback =
7287 object : ConnectivityManager .NetworkCallback () {
88+ override fun onCapabilitiesChanged (
89+ network : Network ,
90+ networkCapabilities : NetworkCapabilities ,
91+ ) {
92+ super .onCapabilitiesChanged(network, networkCapabilities)
93+ if (networkCapabilities.hasTransport(NetworkCapabilities .TRANSPORT_WIFI )) {
94+ LSHTTPNetworkAccess .setWIFIAvailable(true )
95+ } else {
96+ LSHTTPNetworkAccess .setWIFIAvailable(false )
97+ }
98+ }
99+
73100 override fun onAvailable (network : Network ) {
74101 super .onAvailable(network)
102+ this @LSHTTPNetworkAvailabilityService.logger.debug(" WIFI became available." )
75103 LSHTTPNetworkAccess .setWIFIAvailable(true )
76104 }
77105
78106 override fun onLost (network : Network ) {
79107 super .onLost(network)
108+ this @LSHTTPNetworkAvailabilityService.logger.debug(" WIFI became unavailable (Lost)." )
80109 LSHTTPNetworkAccess .setWIFIAvailable(false )
81110 }
82111
83112 override fun onUnavailable () {
84113 super .onUnavailable()
114+ this @LSHTTPNetworkAvailabilityService.logger.debug(" WIFI became unavailable (Unavailable)." )
85115 LSHTTPNetworkAccess .setWIFIAvailable(false )
86116 }
87117 }
@@ -91,6 +121,8 @@ class LSHTTPNetworkAvailabilityService : Service() {
91121
92122 connectivityManager.requestNetwork(wifiRequest, wifiCallback)
93123 connectivityManager.requestNetwork(cellularRequest, cellularCallback)
124+
125+ this .determineInitialNetworkState(connectivityManager)
94126 } catch (e: Throwable ) {
95127 this .logger.debug(" Failed to start network service: " , e)
96128 isRunning.set(false )
@@ -101,6 +133,49 @@ class LSHTTPNetworkAvailabilityService : Service() {
101133 return super .onStartCommand(intent, flags, startId)
102134 }
103135
136+ private fun determineInitialNetworkState (
137+ connectivityManager : ConnectivityManager ,
138+ ) {
139+ var cellularAvailable = false
140+ var wifiAvailable = false
141+
142+ try {
143+ val active = connectivityManager.activeNetwork
144+ if (active != null ) {
145+ val caps = connectivityManager.getNetworkCapabilities(active)
146+ if (caps != null ) {
147+ if (caps.hasCapability(NetworkCapabilities .NET_CAPABILITY_INTERNET ) &&
148+ caps.hasCapability(NetworkCapabilities .NET_CAPABILITY_VALIDATED )
149+ ) {
150+ wifiAvailable =
151+ caps.hasTransport(NetworkCapabilities .TRANSPORT_WIFI )
152+ cellularAvailable =
153+ caps.hasTransport(NetworkCapabilities .TRANSPORT_CELLULAR )
154+ }
155+ }
156+ }
157+ } catch (e: Throwable ) {
158+ this .logger.debug(" Initial network state: Failed: " , e)
159+ cellularAvailable = true
160+ wifiAvailable = true
161+ }
162+
163+ if (wifiAvailable) {
164+ this .logger.debug(" Initial network state: WIFI AVAILABLE" )
165+ } else {
166+ this .logger.debug(" Initial network state: WIFI UNAVAILABLE" )
167+ }
168+
169+ if (cellularAvailable) {
170+ this .logger.debug(" Initial network state: Cellular AVAILABLE" )
171+ } else {
172+ this .logger.debug(" Initial network state: Cellular UNAVAILABLE" )
173+ }
174+
175+ LSHTTPNetworkAccess .setWIFIAvailable(wifiAvailable)
176+ LSHTTPNetworkAccess .setCellularAvailable(cellularAvailable)
177+ }
178+
104179 override fun onBind (intent : Intent ? ): IBinder ? {
105180 return null
106181 }
0 commit comments