Resolve potential Realm/Coroutine threading conflict

This commit is contained in:
Hafiz 2023-02-01 15:05:57 -05:00
parent 337225cc99
commit d3c22530ab

View file

@ -43,7 +43,6 @@ import com.habitrpg.android.habitica.databinding.ActivityTaskFormBinding
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.addCancelButton import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.helpers.TaskAlarmManager import com.habitrpg.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.android.habitica.helpers.launchCatching
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
import com.habitrpg.android.habitica.models.Tag import com.habitrpg.android.habitica.models.Tag
import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.members.Member
@ -216,7 +215,7 @@ class TaskFormActivity : BaseActivity() {
taskType = TaskType.from(bundle.getString(TASK_TYPE_KEY)) ?: TaskType.HABIT taskType = TaskType.from(bundle.getString(TASK_TYPE_KEY)) ?: TaskType.HABIT
preselectedTags = bundle.getStringArrayList(SELECTED_TAGS_KEY) preselectedTags = bundle.getStringArrayList(SELECTED_TAGS_KEY)
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
tagRepository.getTags() tagRepository.getTags()
.map { tagRepository.getUnmanagedCopy(it) } .map { tagRepository.getUnmanagedCopy(it) }
.collect { .collect {
@ -266,7 +265,7 @@ class TaskFormActivity : BaseActivity() {
}, },
{ {
taskCompletedMap.remove(it) taskCompletedMap.remove(it)
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
task?.let { it1 -> taskRepository.markTaskNeedsWork(it1, it) } task?.let { it1 -> taskRepository.markTaskNeedsWork(it1, it) }
} }
}, },
@ -275,7 +274,7 @@ class TaskFormActivity : BaseActivity() {
} }
} }
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
socialRepository.getGroupMembers(groupID ?: "").collect { socialRepository.getGroupMembers(groupID ?: "").collect {
groupMembers = it groupMembers = it
} }
@ -300,9 +299,8 @@ class TaskFormActivity : BaseActivity() {
initialTaskInstance = task initialTaskInstance = task
fillForm(task) fillForm(task)
task.challengeID?.let { challengeID -> task.challengeID?.let { challengeID ->
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
val challenge = challengeRepository.retrieveChallenge(challengeID) val challenge = challengeRepository.retrieveChallenge(challengeID) ?: return@launch
?: return@launchCatching
this@TaskFormActivity.challenge = challenge this@TaskFormActivity.challenge = challenge
binding.challengeNameView.text = binding.challengeNameView.text =
getString(R.string.challenge_task_name, challenge.name) getString(R.string.challenge_task_name, challenge.name)
@ -770,7 +768,7 @@ class TaskFormActivity : BaseActivity() {
alert.addButton(R.string.delete_task, true) { _, _ -> alert.addButton(R.string.delete_task, true) { _, _ ->
if (task?.isValid != true) return@addButton if (task?.isValid != true) return@addButton
task?.id?.let { task?.id?.let {
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
taskRepository.deleteTask(it) taskRepository.deleteTask(it)
} }
} }
@ -796,9 +794,9 @@ class TaskFormActivity : BaseActivity() {
} }
private fun showChallengeDeleteTask() { private fun showChallengeDeleteTask() {
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
val tasks = taskRepository.getTasksForChallenge(task?.challengeID).firstOrNull() val tasks = taskRepository.getTasksForChallenge(task?.challengeID).firstOrNull()
?: return@launchCatching ?: return@launch
val taskCount = tasks.size val taskCount = tasks.size
val alert = HabiticaAlertDialog(this@TaskFormActivity) val alert = HabiticaAlertDialog(this@TaskFormActivity)
alert.setTitle(getString(R.string.delete_challenge_task_title)) alert.setTitle(getString(R.string.delete_challenge_task_title))
@ -815,7 +813,7 @@ class TaskFormActivity : BaseActivity() {
isDestructive = true isDestructive = true
) { _, _ -> ) { _, _ ->
challenge?.let { challenge?.let {
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
challengeRepository.leaveChallenge(it, "keep-all") challengeRepository.leaveChallenge(it, "keep-all")
taskRepository.deleteTask(task?.id ?: "") taskRepository.deleteTask(task?.id ?: "")
userRepository.retrieveUser(true, true) userRepository.retrieveUser(true, true)
@ -828,7 +826,7 @@ class TaskFormActivity : BaseActivity() {
isDestructive = true isDestructive = true
) { _, _ -> ) { _, _ ->
challenge?.let { challenge?.let {
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
challengeRepository.leaveChallenge(it, "remove-all") challengeRepository.leaveChallenge(it, "remove-all")
userRepository.retrieveUser(true, true) userRepository.retrieveUser(true, true)
} }
@ -844,9 +842,9 @@ class TaskFormActivity : BaseActivity() {
if (!task.isValid) { if (!task.isValid) {
return return
} }
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
val tasks = taskRepository.getTasksForChallenge(task.challengeID).firstOrNull() val tasks = taskRepository.getTasksForChallenge(task.challengeID).firstOrNull()
?: return@launchCatching ?: return@launch
val taskCount = tasks.size val taskCount = tasks.size
val dialog = HabiticaAlertDialog(this@TaskFormActivity) val dialog = HabiticaAlertDialog(this@TaskFormActivity)
dialog.setTitle(R.string.broken_challenge) dialog.setTitle(R.string.broken_challenge)
@ -860,7 +858,7 @@ class TaskFormActivity : BaseActivity() {
getString(R.string.keep_x_tasks, taskCount), getString(R.string.keep_x_tasks, taskCount),
true true
) { _, _ -> ) { _, _ ->
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
taskRepository.unlinkAllTasks(task.challengeID, "keep-all") taskRepository.unlinkAllTasks(task.challengeID, "keep-all")
userRepository.retrieveUser(true, true) userRepository.retrieveUser(true, true)
} }
@ -870,8 +868,7 @@ class TaskFormActivity : BaseActivity() {
false, false,
true true
) { _, _ -> ) { _, _ ->
lifecycleScope.launchCatching { lifecycleScope.launch(Dispatchers.Main) {
taskRepository.unlinkAllTasks(task.challengeID, "remove-all") taskRepository.unlinkAllTasks(task.challengeID, "remove-all")
userRepository.retrieveUser(true, true) userRepository.retrieveUser(true, true)
} }