livedata extension

add livedata extension to remove observer after initial callback
This commit is contained in:
Phillip Thelen 2022-04-19 17:14:59 +02:00
parent 3a0c3a73cc
commit f503e86379
3 changed files with 33 additions and 7 deletions

View file

@ -0,0 +1,14 @@
package com.habitrpg.android.habitica.extensions
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
fun <T> LiveData<T>.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer<T>) {
observe(lifecycleOwner, object : Observer<T> {
override fun onChanged(t: T?) {
observer.onChanged(t)
removeObserver(this)
}
})
}

View file

@ -21,6 +21,7 @@ import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.extensions.setScaledPadding
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.helpers.AmplitudeManager
@ -455,13 +456,15 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
override fun onStart() {
super.onStart()
val mainActivity = (activity as? MainActivity)
if (taskFilterHelper.getActiveFilter(taskType) == null) {
when (taskType) {
TaskType.TODO -> taskFilterHelper.setActiveFilter(TaskType.TODO, Task.FILTER_ACTIVE)
TaskType.DAILY -> {
mainActivity?.viewModel?.user?.observe(mainActivity){
if (it?.isValid == true && it.preferences?.dailyDueDefaultView == true) {
(activity as? MainActivity)?.viewModel?.user?.observeOnce(this) {
if (it != null) {
when (taskType) {
TaskType.TODO -> taskFilterHelper.setActiveFilter(
TaskType.TODO,
Task.FILTER_ACTIVE
)
TaskType.DAILY -> {
if (it.isValid && it.preferences?.dailyDueDefaultView == true) {
taskFilterHelper.setActiveFilter(TaskType.DAILY, Task.FILTER_ACTIVE)
}
}

View file

@ -43,4 +43,13 @@ abstract class BaseViewModel(initializeComponent: Boolean = true) : ViewModel()
.subscribe({ }, RxErrorHandler.handleEmptyError())
)
}
fun <T> LiveData<T>.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer<T>) {
observe(lifecycleOwner, object : Observer<T> {
override fun onChanged(t: T?) {
observer.onChanged(t)
removeObserver(this)
}
})
}
}