• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Unleash / unleash-android / 10095366255

25 Jul 2024 01:48PM CUT coverage: 82.415% (+0.1%) from 82.319%
10095366255

push

github

web-flow
fix(deps): update dependency androidx.activity:activity-compose to v1.9.1 (#67)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gastón Fournier <gaston@getunleash.io>

209 of 284 branches covered (73.59%)

Branch coverage included in aggregate %.

644 of 751 relevant lines covered (85.75%)

5.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.61
/unleashandroidsdk/src/main/java/io/getunleash/android/http/NetworkStatusHelper.kt
1
package io.getunleash.android.http
2

3
import android.content.Context
4
import android.net.ConnectivityManager
5
import android.net.Network
6
import android.net.NetworkCapabilities
7
import android.net.NetworkRequest
8
import android.os.Build
9
import android.util.Log
10

11
interface NetworkListener {
12
    fun onAvailable()
13
    fun onLost()
14
}
15

16
class NetworkStatusHelper(val context: Context) {
6✔
17
    companion object {
18
        private const val TAG = "NetworkState"
19
    }
20

21
    internal val networkCallbacks = mutableListOf<ConnectivityManager.NetworkCallback>()
9✔
22

23
    fun registerNetworkListener(listener: NetworkListener) {
24
        val connectivityManager = getConnectivityManager() ?: return
7✔
25
        val requestBuilder = NetworkRequest.Builder()
4✔
26
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
2✔
27
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
3!
28
            requestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
4✔
29
        }
30
        val networkRequest = requestBuilder.build()
3✔
31

32
        // wrap the listener in a NetworkCallback so the listener doesn't have to know about Android specifics
33
        val networkCallback = object : ConnectivityManager.NetworkCallback() {
8✔
34
            override fun onAvailable(network: Network) {
35
                listener.onAvailable()
3✔
36
            }
1✔
37

38
            override fun onUnavailable() {
39
                listener.onLost()
3✔
40
            }
1✔
41

42
            override fun onLost(network: Network) {
43
                listener.onLost()
3✔
44
            }
1✔
45
        }
46

47
        connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
5✔
48
        networkCallbacks += networkCallback
6✔
49
    }
1✔
50

51
    fun close () {
52
        val connectivityManager = getConnectivityManager() ?: return
×
53
        networkCallbacks.forEach {
×
54
            connectivityManager.unregisterNetworkCallback(it)
×
55
        }
×
56
    }
×
57

58
    private fun isNetworkAvailable(): Boolean {
59
        val connectivityManager = getConnectivityManager() ?: return true
8✔
60

61
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
3✔
62
            val activeNetwork = connectivityManager.activeNetwork ?: return false
8✔
63
            val capabilities =
1✔
64
                connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
5!
65
            return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
5✔
66
                    capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
7✔
67
        } else {
68
            @Suppress("DEPRECATION")
69
            val networkInfo = connectivityManager.activeNetworkInfo ?: return false
5!
70
            @Suppress("DEPRECATION")
71
            return networkInfo.isConnected
3✔
72
        }
73
    }
74

75
    private fun getConnectivityManager(): ConnectivityManager? {
76
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE)
5✔
77
        if (connectivityManager !is ConnectivityManager) {
3✔
78
            Log.w(TAG, "Failed to get ConnectivityManager assuming network is available")
4✔
79
            return null
2✔
80
        }
81
        return connectivityManager
3✔
82
    }
83

84
    private fun isAirplaneModeOn(): Boolean {
85
        return android.provider.Settings.System.getInt(
4!
86
            context.contentResolver,
3✔
87
            android.provider.Settings.Global.AIRPLANE_MODE_ON, 0
2✔
88
        ) != 0
89
    }
90

91
    fun isAvailable(): Boolean {
92
        return !isAirplaneModeOn() && isNetworkAvailable()
10!
93
    }
94
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc