From c484a61515cc9d0dc6cad9396d26b149e1e135ae Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Sat, 16 Sep 2023 17:15:20 -0400 Subject: [PATCH] android: Collect task state once view is created Before the viewLifecycleOwner wasn't ready and would cause a crash --- .../IndeterminateProgressDialogFragment.kt | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt index ea8eb073a..18bc34b9f 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt @@ -5,6 +5,9 @@ package org.yuzu.yuzu_emu.fragments import android.app.Dialog import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.DialogFragment @@ -21,22 +24,40 @@ import org.yuzu.yuzu_emu.model.TaskViewModel class IndeterminateProgressDialogFragment : DialogFragment() { private val taskViewModel: TaskViewModel by activityViewModels() + private lateinit var binding: DialogProgressBarBinding + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val titleId = requireArguments().getInt(TITLE) - val progressBinding = DialogProgressBarBinding.inflate(layoutInflater) - progressBinding.progressBar.isIndeterminate = true + binding = DialogProgressBarBinding.inflate(layoutInflater) + binding.progressBar.isIndeterminate = true val dialog = MaterialAlertDialogBuilder(requireContext()) .setTitle(titleId) - .setView(progressBinding.root) + .setView(binding.root) .create() dialog.setCanceledOnTouchOutside(false) + if (!taskViewModel.isRunning.value) { + taskViewModel.runTask() + } + return dialog + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewLifecycleOwner.lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.CREATED) { taskViewModel.isComplete.collect { if (it) { - dialog.dismiss() + dismiss() when (val result = taskViewModel.result.value) { is String -> Toast.makeText(requireContext(), result, Toast.LENGTH_LONG) .show() @@ -51,11 +72,6 @@ class IndeterminateProgressDialogFragment : DialogFragment() { } } } - - if (!taskViewModel.isRunning.value) { - taskViewModel.runTask() - } - return dialog } companion object {