diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/BaseViewModel-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/BaseViewModel-Extensions.kt new file mode 100644 index 000000000..6059f4cc4 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/BaseViewModel-Extensions.kt @@ -0,0 +1,14 @@ +package com.habitrpg.android.habitica.extensions + +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LiveData +import androidx.lifecycle.Observer + +fun LiveData.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer) { + observe(lifecycleOwner, object : Observer { + override fun onChanged(t: T?) { + observer.onChanged(t) + removeObserver(this) + } + }) +} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt index 54cf14652..5545c5fc2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt @@ -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 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) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt index 78c3fc71a..86796007a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt @@ -43,4 +43,13 @@ abstract class BaseViewModel(initializeComponent: Boolean = true) : ViewModel() .subscribe({ }, RxErrorHandler.handleEmptyError()) ) } + + fun LiveData.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer) { + observe(lifecycleOwner, object : Observer { + override fun onChanged(t: T?) { + observer.onChanged(t) + removeObserver(this) + } + }) + } }