Loading app/src/main/java/at/bitfire/davdroid/ui/AccountListFragment.kt +45 −0 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,11 @@ import android.accounts.OnAccountsUpdateListener import android.app.Application import android.app.Application import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkRequest import android.os.Build import android.os.Bundle import android.os.Bundle import android.view.LayoutInflater import android.view.LayoutInflater import android.view.View import android.view.View Loading @@ -28,6 +33,7 @@ import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders import at.bitfire.davdroid.R import at.bitfire.davdroid.R import at.bitfire.davdroid.ui.account.AccountActivity import at.bitfire.davdroid.ui.account.AccountActivity import kotlinx.android.synthetic.main.account_list.* import kotlinx.android.synthetic.main.account_list_item.view.* import kotlinx.android.synthetic.main.account_list_item.view.* class AccountListFragment: ListFragment() { class AccountListFragment: ListFragment() { Loading @@ -42,6 +48,10 @@ class AccountListFragment: ListFragment() { adapter.addAll(*accounts) adapter.addAll(*accounts) }) }) model.networkAvailable.observe(this, Observer { networkAvailable -> no_network_info.visibility = if (networkAvailable) View.GONE else View.VISIBLE }) return inflater.inflate(R.layout.account_list, container, false) return inflater.inflate(R.layout.account_list, container, false) } } Loading Loading @@ -81,13 +91,48 @@ class AccountListFragment: ListFragment() { val accounts = MutableLiveData<Array<out Account>>() val accounts = MutableLiveData<Array<out Account>>() val networkAvailable = MutableLiveData<Boolean>() private var networkObserver: ConnectivityManager.NetworkCallback? = null private val accountManager = AccountManager.get(getApplication())!! private val accountManager = AccountManager.get(getApplication())!! private val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager init { init { accountManager.addOnAccountsUpdatedListener(this, null, true) accountManager.addOnAccountsUpdatedListener(this, null, true) if (Build.VERSION.SDK_INT >= 21) { networkAvailable.postValue(false) val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build() networkObserver = object: ConnectivityManager.NetworkCallback() { val availableNetworks = hashSetOf<Network>() override fun onAvailable(network: Network) { availableNetworks += network update() } override fun onLost(network: Network) { availableNetworks -= network update() } private fun update() { networkAvailable.postValue(availableNetworks.isNotEmpty()) } } connectivityManager.registerNetworkCallback(networkRequest, networkObserver) } } } override fun onCleared() { override fun onCleared() { accountManager.removeOnAccountsUpdatedListener(this) accountManager.removeOnAccountsUpdatedListener(this) if (Build.VERSION.SDK_INT >= 21) networkObserver?.let { connectivityManager.unregisterNetworkCallback(it) } } } override fun onAccountsUpdated(newAccounts: Array<out Account>) { override fun onAccountsUpdated(newAccounts: Array<out Account>) { Loading app/src/main/res/drawable/ic_signal_cellular_off_dark.xml 0 → 100644 +10 −0 Original line number Original line Diff line number Diff line <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> <path android:fillAlpha="0.54" android:fillColor="#FF000000" android:pathData="M21,1l-8.59,8.59L21,18.18V1zM4.77,4.5L3.5,5.77l6.36,6.36L1,21h17.73l2,2L22,21.73 4.77,4.5z"/> </vector> app/src/main/res/layout/account_list.xml +11 −0 Original line number Original line Diff line number Diff line Loading @@ -12,6 +12,17 @@ android:layout_height="match_parent" android:layout_height="match_parent" android:orientation="vertical"> android:orientation="vertical"> <TextView 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" android:drawablePadding="8dp" android:text="@string/account_list_no_internet"/> <ListView <ListView android:id="@android:id/list" android:id="@android:id/list" android:layout_width="match_parent" android:layout_width="match_parent" Loading app/src/main/res/values/strings.xml +1 −1 Original line number Original line Diff line number Diff line Loading @@ -77,7 +77,7 @@ <string name="navigation_drawer_faq">FAQ</string> <string name="navigation_drawer_faq">FAQ</string> <string name="navigation_drawer_forums">Help / Forums</string> <string name="navigation_drawer_forums">Help / Forums</string> <string name="navigation_drawer_donate">Donate</string> <string name="navigation_drawer_donate">Donate</string> <string name="account_list_no_internet">No Internet connectivity. Android will not run synchronization.</string> <string name="account_list_empty">Welcome to DAVx⁵!\n\nYou can add a CalDAV/CardDAV account now.</string> <string name="account_list_empty">Welcome to DAVx⁵!\n\nYou can add a CalDAV/CardDAV account now.</string> <string name="accounts_global_sync_disabled">System-wide automatic synchronization is disabled</string> <string name="accounts_global_sync_disabled">System-wide automatic synchronization is disabled</string> <string name="accounts_global_sync_enable">Enable</string> <string name="accounts_global_sync_enable">Enable</string> Loading build.gradle +1 −1 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,7 @@ buildscript { google() google() } } dependencies { dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath 'com.android.tools.build:gradle:3.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${versions.dokka}" classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${versions.dokka}" } } Loading Loading
app/src/main/java/at/bitfire/davdroid/ui/AccountListFragment.kt +45 −0 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,11 @@ import android.accounts.OnAccountsUpdateListener import android.app.Application import android.app.Application import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkRequest import android.os.Build import android.os.Bundle import android.os.Bundle import android.view.LayoutInflater import android.view.LayoutInflater import android.view.View import android.view.View Loading @@ -28,6 +33,7 @@ import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders import at.bitfire.davdroid.R import at.bitfire.davdroid.R import at.bitfire.davdroid.ui.account.AccountActivity import at.bitfire.davdroid.ui.account.AccountActivity import kotlinx.android.synthetic.main.account_list.* import kotlinx.android.synthetic.main.account_list_item.view.* import kotlinx.android.synthetic.main.account_list_item.view.* class AccountListFragment: ListFragment() { class AccountListFragment: ListFragment() { Loading @@ -42,6 +48,10 @@ class AccountListFragment: ListFragment() { adapter.addAll(*accounts) adapter.addAll(*accounts) }) }) model.networkAvailable.observe(this, Observer { networkAvailable -> no_network_info.visibility = if (networkAvailable) View.GONE else View.VISIBLE }) return inflater.inflate(R.layout.account_list, container, false) return inflater.inflate(R.layout.account_list, container, false) } } Loading Loading @@ -81,13 +91,48 @@ class AccountListFragment: ListFragment() { val accounts = MutableLiveData<Array<out Account>>() val accounts = MutableLiveData<Array<out Account>>() val networkAvailable = MutableLiveData<Boolean>() private var networkObserver: ConnectivityManager.NetworkCallback? = null private val accountManager = AccountManager.get(getApplication())!! private val accountManager = AccountManager.get(getApplication())!! private val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager init { init { accountManager.addOnAccountsUpdatedListener(this, null, true) accountManager.addOnAccountsUpdatedListener(this, null, true) if (Build.VERSION.SDK_INT >= 21) { networkAvailable.postValue(false) val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build() networkObserver = object: ConnectivityManager.NetworkCallback() { val availableNetworks = hashSetOf<Network>() override fun onAvailable(network: Network) { availableNetworks += network update() } override fun onLost(network: Network) { availableNetworks -= network update() } private fun update() { networkAvailable.postValue(availableNetworks.isNotEmpty()) } } connectivityManager.registerNetworkCallback(networkRequest, networkObserver) } } } override fun onCleared() { override fun onCleared() { accountManager.removeOnAccountsUpdatedListener(this) accountManager.removeOnAccountsUpdatedListener(this) if (Build.VERSION.SDK_INT >= 21) networkObserver?.let { connectivityManager.unregisterNetworkCallback(it) } } } override fun onAccountsUpdated(newAccounts: Array<out Account>) { override fun onAccountsUpdated(newAccounts: Array<out Account>) { Loading
app/src/main/res/drawable/ic_signal_cellular_off_dark.xml 0 → 100644 +10 −0 Original line number Original line Diff line number Diff line <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> <path android:fillAlpha="0.54" android:fillColor="#FF000000" android:pathData="M21,1l-8.59,8.59L21,18.18V1zM4.77,4.5L3.5,5.77l6.36,6.36L1,21h17.73l2,2L22,21.73 4.77,4.5z"/> </vector>
app/src/main/res/layout/account_list.xml +11 −0 Original line number Original line Diff line number Diff line Loading @@ -12,6 +12,17 @@ android:layout_height="match_parent" android:layout_height="match_parent" android:orientation="vertical"> android:orientation="vertical"> <TextView 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" android:drawablePadding="8dp" android:text="@string/account_list_no_internet"/> <ListView <ListView android:id="@android:id/list" android:id="@android:id/list" android:layout_width="match_parent" android:layout_width="match_parent" Loading
app/src/main/res/values/strings.xml +1 −1 Original line number Original line Diff line number Diff line Loading @@ -77,7 +77,7 @@ <string name="navigation_drawer_faq">FAQ</string> <string name="navigation_drawer_faq">FAQ</string> <string name="navigation_drawer_forums">Help / Forums</string> <string name="navigation_drawer_forums">Help / Forums</string> <string name="navigation_drawer_donate">Donate</string> <string name="navigation_drawer_donate">Donate</string> <string name="account_list_no_internet">No Internet connectivity. Android will not run synchronization.</string> <string name="account_list_empty">Welcome to DAVx⁵!\n\nYou can add a CalDAV/CardDAV account now.</string> <string name="account_list_empty">Welcome to DAVx⁵!\n\nYou can add a CalDAV/CardDAV account now.</string> <string name="accounts_global_sync_disabled">System-wide automatic synchronization is disabled</string> <string name="accounts_global_sync_disabled">System-wide automatic synchronization is disabled</string> <string name="accounts_global_sync_enable">Enable</string> <string name="accounts_global_sync_enable">Enable</string> Loading
build.gradle +1 −1 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,7 @@ buildscript { google() google() } } dependencies { dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath 'com.android.tools.build:gradle:3.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${versions.dokka}" classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${versions.dokka}" } } Loading