mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-14 10:11:58 +00:00
livedata extension
add livedata extension to remove observer after initial callback
This commit is contained in:
parent
3a0c3a73cc
commit
f503e86379
3 changed files with 33 additions and 7 deletions
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue