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 Diff line number Diff line
@@ -14,6 +14,11 @@ import android.accounts.OnAccountsUpdateListener
import android.app.Application
import android.content.Context
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.view.LayoutInflater
import android.view.View
@@ -28,6 +33,7 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import at.bitfire.davdroid.R
import at.bitfire.davdroid.ui.account.AccountActivity
import kotlinx.android.synthetic.main.account_list.*
import kotlinx.android.synthetic.main.account_list_item.view.*

class AccountListFragment: ListFragment() {
@@ -42,6 +48,10 @@ class AccountListFragment: ListFragment() {
            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)
    }

@@ -81,13 +91,48 @@ class AccountListFragment: ListFragment() {

        val accounts = MutableLiveData<Array<out Account>>()

        val networkAvailable = MutableLiveData<Boolean>()
        private var networkObserver: ConnectivityManager.NetworkCallback? = 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 >= 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() {
            accountManager.removeOnAccountsUpdatedListener(this)

            if (Build.VERSION.SDK_INT >= 21)
                networkObserver?.let {
                    connectivityManager.unregisterNetworkCallback(it)
                }
        }

        override fun onAccountsUpdated(newAccounts: Array<out Account>) {
+10 −0
Original line number 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 Diff line number Diff line
@@ -12,6 +12,17 @@
    android:layout_height="match_parent"
    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
        android:id="@android:id/list"
        android:layout_width="match_parent"
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@
    <string name="navigation_drawer_faq">FAQ</string>
    <string name="navigation_drawer_forums">Help / Forums</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="accounts_global_sync_disabled">System-wide automatic synchronization is disabled</string>
    <string name="accounts_global_sync_enable">Enable</string>
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ buildscript {
        google()
    }
    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.dokka:dokka-android-gradle-plugin:${versions.dokka}"
    }