mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
Move currentTab from activity to viewmodel
Signed-off-by: Tim Krüger <t@timkrueger.me>
This commit is contained in:
parent
36769e4fbe
commit
6716726ff1
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user