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

Unleash / unleash-android / 10078382463

24 Jul 2024 02:16PM CUT coverage: 80.724% (+4.2%) from 76.546%
10078382463

Pull #66

github

web-flow
Merge 5528c7c11 into 812f882d3
Pull Request #66: chore: several test cases in 3 commits

202 of 280 branches covered (72.14%)

Branch coverage included in aggregate %.

7 of 7 new or added lines in 2 files covered. (100.0%)

623 of 742 relevant lines covered (83.96%)

5.42 hits per line

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

57.14
/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
    private val networkCallbacks = mutableListOf<ConnectivityManager.NetworkCallback>()
6✔
22

23
    fun registerNetworkListener(listener: NetworkListener) {
24
        val connectivityManager = getConnectivityManager() ?: return
6!
25
        val networkRequest = NetworkRequest.Builder()
×
26
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
×
27
            .build()
×
28

29
        // wrap the listener in a NetworkCallback so the listener doesn't have to know about Android specifics
30
        val networkCallback = object : ConnectivityManager.NetworkCallback() {
×
31
            override fun onAvailable(network: Network) {
32
                listener.onAvailable()
×
33
            }
×
34

35
            override fun onLost(network: Network) {
36
                listener.onLost()
×
37
            }
×
38
        }
39

40
        connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
×
41
        networkCallbacks += networkCallback
×
42
    }
×
43

44
    fun close () {
45
        val connectivityManager = getConnectivityManager() ?: return
×
46
        networkCallbacks.forEach {
×
47
            connectivityManager.unregisterNetworkCallback(it)
×
48
        }
×
49
    }
×
50

51
    private fun isNetworkAvailable(): Boolean {
52
        val connectivityManager = getConnectivityManager() ?: return true
8✔
53

54
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
3✔
55
            val activeNetwork = connectivityManager.activeNetwork ?: return false
5!
56
            val capabilities =
1✔
57
                connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
5!
58
            return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
5!
59
                    capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
6!
60
        } else {
61
            @Suppress("DEPRECATION")
62
            val networkInfo = connectivityManager.activeNetworkInfo ?: return false
5!
63
            @Suppress("DEPRECATION")
64
            return networkInfo.isConnected
3✔
65
        }
66
    }
67

68
    private fun getConnectivityManager(): ConnectivityManager? {
69
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE)
5✔
70
        if (connectivityManager !is ConnectivityManager) {
3✔
71
            Log.w(TAG, "Failed to get ConnectivityManager assuming network is available")
4✔
72
            return null
2✔
73
        }
74
        return connectivityManager
3✔
75
    }
76

77
    private fun isAirplaneModeOn(): Boolean {
78
        return android.provider.Settings.System.getInt(
4!
79
            context.contentResolver,
3✔
80
            android.provider.Settings.Global.AIRPLANE_MODE_ON, 0
2✔
81
        ) != 0
82
    }
83

84
    fun isAvailable(): Boolean {
85
        return !isAirplaneModeOn() && isNetworkAvailable()
9!
86
    }
87
}
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