Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c229c81 authored by Ricki Hirner's avatar Ricki Hirner
Browse files

Account list fragment: Show "Network unavailable" message if there is no...

Account list fragment: Show "Network unavailable" message if there is no Internet connection (only API 21+)
parent 0ac6dc85
Loading
Loading
Loading
Loading
+45 −0
Original line number Original line Diff line number Diff line
@@ -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
@@ -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() {
@@ -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)
    }
    }


@@ -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>) {
+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>
+11 −0
Original line number Original line Diff line number Diff line
@@ -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"
+1 −1
Original line number Original line Diff line number Diff line
@@ -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>
+1 −1
Original line number Original line Diff line number Diff line
@@ -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}"
    }
    }