For #25563: Avoid showing delete all dialog twice.

pull/543/head
mcarare 2 years ago committed by mergify[bot]
parent 78e4875713
commit e81c38e8fd

@ -4,6 +4,7 @@
package org.mozilla.fenix.library.historymetadata package org.mozilla.fenix.library.historymetadata
import android.app.Dialog
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
@ -15,11 +16,11 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.lib.state.ext.flowScoped import mozilla.components.lib.state.ext.flowScoped
@ -218,17 +219,15 @@ class HistoryMetadataGroupFragment :
} }
private fun promptDeleteAll(delete: () -> Unit) { private fun promptDeleteAll(delete: () -> Unit) {
AlertDialog.Builder(requireContext()).apply { if (childFragmentManager.findFragmentByTag(DeleteAllConfirmationDialogFragment.TAG)
setMessage(R.string.delete_history_group_prompt_message) as? DeleteAllConfirmationDialogFragment != null
setNegativeButton(R.string.delete_history_group_prompt_cancel) { dialog: DialogInterface, _ -> ) {
dialog.cancel() return
} }
setPositiveButton(R.string.delete_history_group_prompt_allow) { dialog: DialogInterface, _ ->
delete.invoke() DeleteAllConfirmationDialogFragment(delete).show(
dialog.dismiss() childFragmentManager, DeleteAllConfirmationDialogFragment.TAG
} )
create()
}.show()
} }
private fun allDeletedSnackbar() { private fun allDeletedSnackbar() {
@ -254,4 +253,22 @@ class HistoryMetadataGroupFragment :
historyItem.url.toShortUrl(requireComponents.publicSuffixList) historyItem.url.toShortUrl(requireComponents.publicSuffixList)
) )
} }
internal class DeleteAllConfirmationDialogFragment(private val delete: () -> Unit) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
AlertDialog.Builder(requireContext())
.setMessage(R.string.delete_history_group_prompt_message)
.setNegativeButton(R.string.delete_history_group_prompt_cancel) { dialog: DialogInterface, _ ->
dialog.cancel()
}
.setPositiveButton(R.string.delete_history_group_prompt_allow) { dialog: DialogInterface, _ ->
delete.invoke()
dialog.dismiss()
}
.create()
companion object {
const val TAG = "DELETE_CONFIRMATION_DIALOG_FRAGMENT"
}
}
} }

Loading…
Cancel
Save