diff --git a/CHANGES.md b/CHANGES.md index 8769b11ea7..37fa25cba4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ Features: Improvements: - Reduce default release build log level, and lab option to enable more logs. + - Display a no network indicator when there is no network (#559) Other changes: - diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/sync/SyncState.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/sync/SyncState.kt index cc1c3f1a32..8c34e392b5 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/sync/SyncState.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/sync/SyncState.kt @@ -22,4 +22,5 @@ sealed class SyncState { object PAUSED : SyncState() object KILLING : SyncState() object KILLED : SyncState() + object NO_NETWORK : SyncState() } \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncThread.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncThread.kt index f6ff11c1fe..7433a70a50 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncThread.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncThread.kt @@ -97,6 +97,8 @@ internal class SyncThread @Inject constructor(private val syncTask: SyncTask, if (!networkConnectivityChecker.isConnected() || state == SyncState.PAUSED) { Timber.v("No network or sync is Paused. Waiting...") + updateStateTo(SyncState.NO_NETWORK) + synchronized(lock) { lock.wait() } diff --git a/matrix-sdk-android/src/main/res/values/strings_RiotX.xml b/matrix-sdk-android/src/main/res/values/strings_RiotX.xml index 134b699a7a..a588bb36fd 100644 --- a/matrix-sdk-android/src/main/res/values/strings_RiotX.xml +++ b/matrix-sdk-android/src/main/res/values/strings_RiotX.xml @@ -3,4 +3,7 @@ + + + There is no network connection right now \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotx/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/HomeDetailFragment.kt index bd4b2ca4df..15a2cf3afe 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/HomeDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/HomeDetailFragment.kt @@ -21,6 +21,7 @@ import android.os.Parcelable import android.view.LayoutInflater import android.view.View import androidx.core.view.forEachIndexed +import androidx.core.view.isVisible import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.airbnb.mvrx.args @@ -208,11 +209,12 @@ class HomeDetailFragment : VectorBaseFragment(), KeysBackupBanner.Delegate { unreadCounterBadgeViews[INDEX_CATCHUP].render(UnreadCounterBadgeView.State(it.notificationCountCatchup, it.notificationHighlightCatchup)) unreadCounterBadgeViews[INDEX_PEOPLE].render(UnreadCounterBadgeView.State(it.notificationCountPeople, it.notificationHighlightPeople)) unreadCounterBadgeViews[INDEX_ROOMS].render(UnreadCounterBadgeView.State(it.notificationCountRooms, it.notificationHighlightRooms)) - syncProgressBar.visibility = when (it.syncState) { + syncProgressBarWrap.visibility = when (it.syncState) { is SyncState.RUNNING -> if (it.syncState.afterPause) View.VISIBLE else View.GONE else -> View.GONE } - syncProgressBarWrap.visibility = syncProgressBar.visibility + // TODO Create a View + noNetworkBanner.isVisible = it.syncState is SyncState.NO_NETWORK } companion object { diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt index 19262fad49..77e47cc468 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt @@ -39,6 +39,7 @@ import androidx.core.content.ContextCompat import androidx.core.util.Pair import androidx.core.view.ViewCompat import androidx.core.view.forEach +import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager @@ -77,8 +78,8 @@ import im.vector.riotx.core.extensions.observeEvent import im.vector.riotx.core.extensions.setTextOrHide import im.vector.riotx.core.files.addEntryToDownloadManager import im.vector.riotx.core.glide.GlideApp -import im.vector.riotx.core.ui.views.NotificationAreaView import im.vector.riotx.core.platform.VectorBaseFragment +import im.vector.riotx.core.ui.views.NotificationAreaView import im.vector.riotx.core.utils.* import im.vector.riotx.features.autocomplete.command.AutocompleteCommandPresenter import im.vector.riotx.features.autocomplete.command.CommandAutocompletePolicy @@ -251,11 +252,12 @@ class RoomDetailFragment : } roomDetailViewModel.selectSubscribe(RoomDetailViewState::syncState) { syncState -> - syncProgressBar.visibility = when (syncState) { + syncProgressBarWrap.visibility = when (syncState) { is SyncState.RUNNING -> if (syncState.afterPause) View.VISIBLE else View.GONE else -> View.GONE } - syncProgressBarWrap.visibility = syncProgressBar.visibility + // TODO Create a View + noNetworkBanner.isVisible = syncState is SyncState.NO_NETWORK } } diff --git a/vector/src/main/res/layout/fragment_home_detail.xml b/vector/src/main/res/layout/fragment_home_detail.xml index 13d3fea803..7541829cca 100644 --- a/vector/src/main/res/layout/fragment_home_detail.xml +++ b/vector/src/main/res/layout/fragment_home_detail.xml @@ -44,7 +44,7 @@ - + + android:indeterminate="true" /> + + app:layout_constraintTop_toBottomOf="@id/noNetworkBanner" /> - + + android:indeterminate="true" /> + + +