Skip to content

Commit b2d75d5

Browse files
committed
Eagerly fetch network state.
1 parent 913656e commit b2d75d5

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

org.librarysimplified.http.network_access/src/main/java/org/librarysimplified/http/network_access/LSHTTPNetworkAvailabilityService.kt

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)