Move currentTab from activity to viewmodel

Signed-off-by: Tim Krüger <t@timkrueger.me>
This commit is contained in:
Tim Krüger 2022-05-10 16:22:29 +02:00
parent 36769e4fbe
commit 6716726ff1
No known key found for this signature in database
GPG Key ID: FECE3A7222C52A4E
4 changed files with 19 additions and 23 deletions

View File

@ -26,13 +26,10 @@ class SharedItemsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySharedItemsBinding
private lateinit var viewModel: SharedItemsViewModel
private lateinit var currentTab: SharedItemType
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
currentTab = SharedItemType.MEDIA
val roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)!!
val conversationName = intent.getStringExtra(KEY_CONVERSATION_NAME)
val userEntity = intent.getParcelableExtra<UserEntity>(KEY_USER_ENTITY)!!
@ -57,17 +54,17 @@ class SharedItemsActivity : AppCompatActivity() {
viewModel = ViewModelProvider(
this,
SharedItemsViewModel.Factory(userEntity, roomToken, currentTab)
SharedItemsViewModel.Factory(userEntity, roomToken, SharedItemType.MEDIA)
).get(SharedItemsViewModel::class.java)
viewModel.sharedItemType.observe(this) {
viewModel.sharedItemTypes.observe(this) {
initTabs(it)
}
viewModel.sharedItems.observe(this) {
Log.d(TAG, "Items received: $it")
if (currentTab == SharedItemType.MEDIA) {
if (viewModel.currentItemType == SharedItemType.MEDIA) {
val adapter = SharedItemsGridAdapter()
adapter.items = it.items
adapter.authHeader = it.authHeader
@ -97,11 +94,6 @@ class SharedItemsActivity : AppCompatActivity() {
})
}
fun updateItems(type: SharedItemType) {
currentTab = type
viewModel.loadItems(type)
}
private fun initTabs(sharedItemTypes: Set<SharedItemType>) {
if (sharedItemTypes.contains(SharedItemType.MEDIA)) {
@ -155,7 +147,7 @@ class SharedItemsActivity : AppCompatActivity() {
binding.sharedItemsTabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
updateItems(tab.tag as SharedItemType)
viewModel.loadItems(tab.tag as SharedItemType)
}
override fun onTabUnselected(tab: TabLayout.Tab) = Unit

View File

@ -37,12 +37,11 @@ class SharedItemsRepository {
type.toString().lowercase(Locale.ROOT),
lastKnownMessageId,
BATCH_SIZE
).map { map(it, type, parameters) }
).map { map(it, parameters) }
}
private fun map(
response: Response<ChatShareOverall>,
type: SharedItemType,
parameters: Parameters
): SharedMediaItems {
@ -84,7 +83,6 @@ class SharedItemsRepository {
val moreItemsExisting = items.count() == BATCH_SIZE
return SharedMediaItems(
type,
sortedMutableItems,
chatLastGiven,
moreItemsExisting,

View File

@ -1,7 +1,6 @@
package com.nextcloud.talk.repositories
class SharedMediaItems(
val type: SharedItemType,
val items: List<SharedItem>,
var lastSeenId: Int?,
var moreItemsExisting: Boolean,

View File

@ -21,7 +21,7 @@ class SharedItemsViewModel(
) :
ViewModel() {
private val _sharedItemType: MutableLiveData<Set<SharedItemType>> by lazy {
private val _sharedItemTypes: MutableLiveData<Set<SharedItemType>> by lazy {
MutableLiveData<Set<SharedItemType>>().also {
availableTypes()
}
@ -33,24 +33,32 @@ class SharedItemsViewModel(
}
}
val sharedItemType: LiveData<Set<SharedItemType>>
get() = _sharedItemType
private var _currentItemType = initialType
val sharedItemTypes: LiveData<Set<SharedItemType>>
get() = _sharedItemTypes
val sharedItems: LiveData<SharedMediaItems>
get() = _sharedItems
val currentItemType: SharedItemType
get() = _currentItemType
fun loadNextItems() {
val currentSharedItems = sharedItems.value!!
if (currentSharedItems.moreItemsExisting) {
repository.media(repositoryParameters, currentSharedItems.type, currentSharedItems.lastSeenId)
repository.media(repositoryParameters, _currentItemType, currentSharedItems.lastSeenId)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(observer(currentSharedItems.type, false))
?.subscribe(observer(_currentItemType, false))
}
}
fun loadItems(type: SharedItemType) {
_currentItemType = type
repository.media(repositoryParameters, type)?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(observer(type, true))
@ -79,7 +87,6 @@ class SharedItemsViewModel(
val oldItems = this@SharedItemsViewModel._sharedItems.value!!.items
this@SharedItemsViewModel._sharedItems.value =
SharedMediaItems(
type,
oldItems + newSharedItems!!.items,
newSharedItems!!.lastSeenId,
newSharedItems!!.moreItemsExisting,
@ -108,7 +115,7 @@ class SharedItemsViewModel(
}
override fun onComplete() {
this@SharedItemsViewModel._sharedItemType.value = this.types
this@SharedItemsViewModel._sharedItemTypes.value = this.types
}
})
}