SharedItems: show empty state when there are no shared items

Co-authored-by: Tim Krüger <t@timkrueger.me>
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
Álvaro Brey 2022-05-20 15:24:53 +02:00 committed by Tim Krüger
parent ae65de6cce
commit 5310ed3f3d
No known key found for this signature in database
GPG Key ID: FECE3A7222C52A4E
4 changed files with 28 additions and 12 deletions

View File

@ -25,6 +25,7 @@ package com.nextcloud.talk.shareditems.activities
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.MenuItem import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
@ -84,10 +85,8 @@ class SharedItemsActivity : AppCompatActivity() {
viewModel = ViewModelProvider(this, viewModelFactory)[SharedItemsViewModel::class.java] viewModel = ViewModelProvider(this, viewModelFactory)[SharedItemsViewModel::class.java]
viewModel.viewState.observe(this) { state -> viewModel.viewState.observe(this) { state ->
handleEmptyView(state)
when (state) { when (state) {
SharedItemsViewModel.NoSharedItemsState -> {
// todo
}
is SharedItemsViewModel.LoadedState -> { is SharedItemsViewModel.LoadedState -> {
val sharedMediaItems = state.items val sharedMediaItems = state.items
Log.d(TAG, "Items received: $sharedMediaItems") Log.d(TAG, "Items received: $sharedMediaItems")
@ -106,6 +105,9 @@ class SharedItemsActivity : AppCompatActivity() {
binding.imageRecycler.layoutManager = layoutManager binding.imageRecycler.layoutManager = layoutManager
} }
is SharedItemsViewModel.TabsLoadedState -> initTabs(state.types) is SharedItemsViewModel.TabsLoadedState -> initTabs(state.types)
else -> {
// noop
}
} }
} }
@ -121,6 +123,20 @@ class SharedItemsActivity : AppCompatActivity() {
viewModel.initialize(userEntity, roomToken, SharedItemType.MEDIA) viewModel.initialize(userEntity, roomToken, SharedItemType.MEDIA)
} }
private fun handleEmptyView(state: SharedItemsViewModel.ViewState?) {
when (state) {
SharedItemsViewModel.NoSharedItemsState -> {
binding.emptyContainer.emptyListViewHeadline.text = getString(R.string.nc_shared_items_empty)
binding.emptyContainer.emptyListView.visibility = View.VISIBLE
binding.sharedItemsTabs.visibility = View.GONE
}
else -> {
binding.emptyContainer.emptyListView.visibility = View.GONE
binding.sharedItemsTabs.visibility = View.VISIBLE
}
}
}
private fun initTabs(sharedItemTypes: Set<SharedItemType>) { private fun initTabs(sharedItemTypes: Set<SharedItemType>) {
if (sharedItemTypes.contains(SharedItemType.MEDIA)) { if (sharedItemTypes.contains(SharedItemType.MEDIA)) {

View File

@ -48,22 +48,15 @@ class SharedItemsViewModel @Inject constructor(
// items // items
sealed interface ViewState sealed interface ViewState
object InitialState : ViewState
object NoSharedItemsState : ViewState object NoSharedItemsState : ViewState
open class TabsLoadedState(val types: Set<SharedItemType>) : ViewState open class TabsLoadedState(val types: Set<SharedItemType>) : ViewState
class LoadedState(types: Set<SharedItemType>, val items: SharedMediaItems) : TabsLoadedState(types) class LoadedState(types: Set<SharedItemType>, val items: SharedMediaItems) : TabsLoadedState(types)
private val _viewState: MutableLiveData<ViewState> = MutableLiveData(NoSharedItemsState) private val _viewState: MutableLiveData<ViewState> = MutableLiveData(InitialState)
val viewState: LiveData<ViewState> val viewState: LiveData<ViewState>
get() = _viewState get() = _viewState
// private val _sharedItems: MutableLiveData<SharedMediaItems> by lazy {
// MutableLiveData<SharedMediaItems>().also {
// loadItems(_currentItemType)
// }
// }
// val sharedItems: LiveData<SharedMediaItems>
// get() = _sharedItems
fun loadNextItems() { fun loadNextItems() {
when (val currentState = _viewState.value) { when (val currentState = _viewState.value) {
is LoadedState -> { is LoadedState -> {

View File

@ -56,6 +56,12 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<include
android:id="@+id/emptyContainer"
layout="@layout/empty_list"
android:visibility="gone"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/image_recycler" android:id="@+id/image_recycler"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -423,6 +423,7 @@
<!-- shared items --> <!-- shared items -->
<string name="nc_shared_items">Shared items</string> <string name="nc_shared_items">Shared items</string>
<string name="nc_shared_items_description">Images, files, voice messages…</string> <string name="nc_shared_items_description">Images, files, voice messages…</string>
<string name="nc_shared_items_empty">No shared items</string>
<!-- voice messages --> <!-- voice messages -->
<string name="nc_voice_message_filename">Talk recording from %1$s (%2$s)</string> <string name="nc_voice_message_filename">Talk recording from %1$s (%2$s)</string>