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

View File

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

View File

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

View File

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