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.util.Log
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.ViewModelProvider
@ -84,10 +85,8 @@ class SharedItemsActivity : AppCompatActivity() {
viewModel = ViewModelProvider(this, viewModelFactory)[SharedItemsViewModel::class.java]
viewModel.viewState.observe(this) { state ->
handleEmptyView(state)
when (state) {
SharedItemsViewModel.NoSharedItemsState -> {
// todo
}
is SharedItemsViewModel.LoadedState -> {
val sharedMediaItems = state.items
Log.d(TAG, "Items received: $sharedMediaItems")
@ -106,6 +105,9 @@ class SharedItemsActivity : AppCompatActivity() {
binding.imageRecycler.layoutManager = layoutManager
}
is SharedItemsViewModel.TabsLoadedState -> initTabs(state.types)
else -> {
// noop
}
}
}
@ -121,6 +123,20 @@ class SharedItemsActivity : AppCompatActivity() {
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>) {
if (sharedItemTypes.contains(SharedItemType.MEDIA)) {

View File

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

View File

@ -56,6 +56,12 @@
</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
android:id="@+id/image_recycler"
android:layout_width="match_parent"

View File

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