Loading app/src/main/java/at/bitfire/davdroid/ui/AccountListFragment.kt +29 −6 Original line number Diff line number Diff line Loading @@ -12,8 +12,10 @@ import android.accounts.Account import android.accounts.AccountManager import android.accounts.OnAccountsUpdateListener import android.app.Application import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities Loading Loading @@ -92,14 +94,29 @@ class AccountListFragment: ListFragment() { val accounts = MutableLiveData<Array<out Account>>() val networkAvailable = MutableLiveData<Boolean>() private var networkObserver: ConnectivityManager.NetworkCallback? = null private var networkCallback: ConnectivityManager.NetworkCallback? = null private var networkReceiver: BroadcastReceiver? = null private val accountManager = AccountManager.get(getApplication())!! private val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager init { accountManager.addOnAccountsUpdatedListener(this, null, true) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // API level <26 networkReceiver = object: BroadcastReceiver() { init { update() } override fun onReceive(context: Context?, intent: Intent?) = update() private fun update() { networkAvailable.postValue(connectivityManager.allNetworkInfo.any { it.isConnected }) } } application.registerReceiver(networkReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) } else { // API level >= 26 networkAvailable.postValue(false) // check for working (e.g. WiFi after captive portal login) Internet connection Loading @@ -107,7 +124,7 @@ class AccountListFragment: ListFragment() { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) .build() networkObserver = object: ConnectivityManager.NetworkCallback() { val callback = object: ConnectivityManager.NetworkCallback() { val availableNetworks = hashSetOf<Network>() override fun onAvailable(network: Network) { Loading @@ -124,15 +141,21 @@ class AccountListFragment: ListFragment() { networkAvailable.postValue(availableNetworks.isNotEmpty()) } } connectivityManager.registerNetworkCallback(networkRequest, networkObserver) connectivityManager.registerNetworkCallback(networkRequest, callback) networkCallback = callback } } override fun onCleared() { accountManager.removeOnAccountsUpdatedListener(this) if (Build.VERSION.SDK_INT >= 21) networkObserver?.let { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) networkReceiver?.let { getApplication<Application>().unregisterReceiver(it) } else networkCallback?.let { connectivityManager.unregisterNetworkCallback(it) } } Loading app/src/main/res/layout/account_list.xml +3 −2 Original line number Diff line number Diff line Loading @@ -10,16 +10,17 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <TextView <androidx.appcompat.widget.AppCompatTextView android:id="@+id/no_network_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="12dp" android:gravity="center_vertical" android:visibility="gone" android:drawableLeft="@drawable/ic_signal_cellular_off_dark" app:drawableLeftCompat="@drawable/ic_signal_cellular_off_dark" android:drawablePadding="8dp" android:text="@string/account_list_no_internet"/> Loading Loading
app/src/main/java/at/bitfire/davdroid/ui/AccountListFragment.kt +29 −6 Original line number Diff line number Diff line Loading @@ -12,8 +12,10 @@ import android.accounts.Account import android.accounts.AccountManager import android.accounts.OnAccountsUpdateListener import android.app.Application import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities Loading Loading @@ -92,14 +94,29 @@ class AccountListFragment: ListFragment() { val accounts = MutableLiveData<Array<out Account>>() val networkAvailable = MutableLiveData<Boolean>() private var networkObserver: ConnectivityManager.NetworkCallback? = null private var networkCallback: ConnectivityManager.NetworkCallback? = null private var networkReceiver: BroadcastReceiver? = null private val accountManager = AccountManager.get(getApplication())!! private val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager init { accountManager.addOnAccountsUpdatedListener(this, null, true) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // API level <26 networkReceiver = object: BroadcastReceiver() { init { update() } override fun onReceive(context: Context?, intent: Intent?) = update() private fun update() { networkAvailable.postValue(connectivityManager.allNetworkInfo.any { it.isConnected }) } } application.registerReceiver(networkReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) } else { // API level >= 26 networkAvailable.postValue(false) // check for working (e.g. WiFi after captive portal login) Internet connection Loading @@ -107,7 +124,7 @@ class AccountListFragment: ListFragment() { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) .build() networkObserver = object: ConnectivityManager.NetworkCallback() { val callback = object: ConnectivityManager.NetworkCallback() { val availableNetworks = hashSetOf<Network>() override fun onAvailable(network: Network) { Loading @@ -124,15 +141,21 @@ class AccountListFragment: ListFragment() { networkAvailable.postValue(availableNetworks.isNotEmpty()) } } connectivityManager.registerNetworkCallback(networkRequest, networkObserver) connectivityManager.registerNetworkCallback(networkRequest, callback) networkCallback = callback } } override fun onCleared() { accountManager.removeOnAccountsUpdatedListener(this) if (Build.VERSION.SDK_INT >= 21) networkObserver?.let { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) networkReceiver?.let { getApplication<Application>().unregisterReceiver(it) } else networkCallback?.let { connectivityManager.unregisterNetworkCallback(it) } } Loading
app/src/main/res/layout/account_list.xml +3 −2 Original line number Diff line number Diff line Loading @@ -10,16 +10,17 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <TextView <androidx.appcompat.widget.AppCompatTextView android:id="@+id/no_network_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="12dp" android:gravity="center_vertical" android:visibility="gone" android:drawableLeft="@drawable/ic_signal_cellular_off_dark" app:drawableLeftCompat="@drawable/ic_signal_cellular_off_dark" android:drawablePadding="8dp" android:text="@string/account_list_no_internet"/> Loading