Просмотр исходного кода

android: Fix cancel behavior on indeterminate progress dialog fragment

The dialog would previously dismiss immediately when it should stay alive until the task is cancelled completely.
Charles Lombardo 2 лет назад
Родитель
Сommit
95a31b8887

+ 14 - 4
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt

@@ -4,12 +4,12 @@
 package org.yuzu.yuzu_emu.fragments
 package org.yuzu.yuzu_emu.fragments
 
 
 import android.app.Dialog
 import android.app.Dialog
-import android.content.DialogInterface
 import android.os.Bundle
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.LayoutInflater
 import android.view.View
 import android.view.View
 import android.view.ViewGroup
 import android.view.ViewGroup
 import android.widget.Toast
 import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.app.AppCompatActivity
 import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.activityViewModels
 import androidx.fragment.app.activityViewModels
@@ -39,9 +39,7 @@ class IndeterminateProgressDialogFragment : DialogFragment() {
             .setView(binding.root)
             .setView(binding.root)
 
 
         if (cancellable) {
         if (cancellable) {
-            dialog.setNegativeButton(android.R.string.cancel) { _: DialogInterface, _: Int ->
-                taskViewModel.setCancelled(true)
-            }
+            dialog.setNegativeButton(android.R.string.cancel, null)
         }
         }
 
 
         val alertDialog = dialog.create()
         val alertDialog = dialog.create()
@@ -98,6 +96,18 @@ class IndeterminateProgressDialogFragment : DialogFragment() {
         }
         }
     }
     }
 
 
+    // By default, the ProgressDialog will immediately dismiss itself upon a button being pressed.
+    // Setting the OnClickListener again after the dialog is shown overrides this behavior.
+    override fun onResume() {
+        super.onResume()
+        val alertDialog = dialog as AlertDialog
+        val negativeButton = alertDialog.getButton(Dialog.BUTTON_NEGATIVE)
+        negativeButton.setOnClickListener {
+            alertDialog.setTitle(getString(R.string.cancelling))
+            taskViewModel.setCancelled(true)
+        }
+    }
+
     companion object {
     companion object {
         const val TAG = "IndeterminateProgressDialogFragment"
         const val TAG = "IndeterminateProgressDialogFragment"