From c3640c219fc82b582dc43a6149b4755dfc270a55 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Fri, 29 Jul 2022 08:27:29 -0400 Subject: [PATCH] Init viewmodel directly (instead of passing viewmodel) --- .../tasks/RewardsRecyclerviewFragment.kt | 6 ++-- .../tasks/TaskRecyclerViewFragment.kt | 31 +++++++++---------- .../ui/fragments/tasks/TasksFragment.kt | 8 ++--- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt index ff786255e..454e2c173 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt @@ -20,7 +20,6 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.activities.SkillMemberActivity import com.habitrpg.android.habitica.ui.adapter.tasks.RewardsRecyclerViewAdapter import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator -import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import io.reactivex.rxjava3.functions.Consumer @@ -78,7 +77,7 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() { )?.let { compositeSubscription.add(it) } recyclerAdapter?.brokenTaskEvents?.subscribeWithErrorHandler { showBrokenChallengeDialog(it) }?.let { compositeSubscription.add(it) } - viewModel?.user?.observe(viewLifecycleOwner) { + viewModel.user.observe(viewLifecycleOwner) { (recyclerAdapter as? RewardsRecyclerViewAdapter)?.user = it } } @@ -138,9 +137,8 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() { } companion object { - fun newInstance(context: Context?, classType: TaskType, showCustomRewards: Boolean, viewModel: TasksViewModel): RewardsRecyclerviewFragment { + fun newInstance(context: Context?, classType: TaskType, showCustomRewards: Boolean): RewardsRecyclerviewFragment { val fragment = RewardsRecyclerviewFragment() - fragment.viewModel = viewModel fragment.taskType = classType fragment.showCustomRewards = showCustomRewards 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 d79b4dcfc..ede210e6e 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 @@ -9,6 +9,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat +import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView @@ -58,7 +59,7 @@ import javax.inject.Inject open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener { private var taskFlowJob: Job? = null - var viewModel: TasksViewModel? = null + val viewModel: TasksViewModel by viewModels({requireParentFragment()}) internal var canEditTasks: Boolean = true internal var canScoreTaks: Boolean = true @@ -102,10 +103,7 @@ open class TaskRecyclerViewFragment : BaseFragment + viewModel.let { viewModel -> val adapter: BaseRecyclerViewAdapter<*, *>? = when (this.taskType) { TaskType.HABIT -> HabitsRecyclerViewAdapter(R.layout.habit_item_card, viewModel) TaskType.DAILY -> DailiesRecyclerViewHolder(R.layout.daily_item_card, viewModel) @@ -145,9 +143,9 @@ open class TaskRecyclerViewFragment : BaseFragment 0) { + if ((viewModel.filterCount(taskType) ?: 0) > 0) { newPosition = if ((newPosition + 1) == recyclerAdapter?.data?.size) { recyclerAdapter?.data?.get(newPosition - 1)?.position ?: newPosition } else { @@ -372,7 +370,7 @@ open class TaskRecyclerViewFragment : BaseFragment 0) { + binding?.recyclerView?.emptyItem = if ((viewModel.filterCount(taskType) ?: 0) > 0) { when (this.taskType) { TaskType.HABIT -> { EmptyItem( @@ -440,7 +438,7 @@ open class TaskRecyclerViewFragment : BaseFragment + viewModel.scoreTask(task, direction) { result, value -> handleTaskResult(result, value) } } @@ -455,7 +453,7 @@ open class TaskRecyclerViewFragment : BaseFragment viewModel?.setActiveFilter( + TaskType.TODO -> viewModel.setActiveFilter( TaskType.TODO, Task.FILTER_ACTIVE ) TaskType.DAILY -> { if (it.isValid && it.preferences?.dailyDueDefaultView == true) { - viewModel?.setActiveFilter(TaskType.DAILY, Task.FILTER_ACTIVE) + viewModel.setActiveFilter(TaskType.DAILY, Task.FILTER_ACTIVE) } } else -> {} @@ -488,7 +486,7 @@ open class TaskRecyclerViewFragment : BaseFragment? = null if (context != null) { when (fragment.taskType) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt index 2edaf5fed..f117f0234 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt @@ -217,10 +217,10 @@ class TasksFragment : BaseMainFragment(), SearchView.O binding?.viewPager?.adapter = object : FragmentStateAdapter(fragmentManager, lifecycle) { override fun createFragment(position: Int): Fragment { val fragment: TaskRecyclerViewFragment = when (position) { - 0 -> TaskRecyclerViewFragment.newInstance(context, TaskType.HABIT, viewModel) - 1 -> TaskRecyclerViewFragment.newInstance(context, TaskType.DAILY, viewModel) - 3 -> RewardsRecyclerviewFragment.newInstance(context, TaskType.REWARD, true, viewModel) - else -> TaskRecyclerViewFragment.newInstance(context, TaskType.TODO, viewModel) + 0 -> TaskRecyclerViewFragment.newInstance(context, TaskType.HABIT) + 1 -> TaskRecyclerViewFragment.newInstance(context, TaskType.DAILY) + 3 -> RewardsRecyclerviewFragment.newInstance(context, TaskType.REWARD, true) + else -> TaskRecyclerViewFragment.newInstance(context, TaskType.TODO) } viewFragmentsDictionary?.put(position, fragment) return fragment