android: Add option to make MessageDialogFragments non-dismissible
Additionally fixes an issue where its viewmodel could hold onto a stale positive action
This commit is contained in:
parent
97ca160b08
commit
bc317a9807
1 changed files with 25 additions and 9 deletions
|
@ -26,9 +26,15 @@ class MessageDialogFragment : DialogFragment() {
|
||||||
val descriptionId = requireArguments().getInt(DESCRIPTION_ID)
|
val descriptionId = requireArguments().getInt(DESCRIPTION_ID)
|
||||||
val descriptionString = requireArguments().getString(DESCRIPTION_STRING)!!
|
val descriptionString = requireArguments().getString(DESCRIPTION_STRING)!!
|
||||||
val helpLinkId = requireArguments().getInt(HELP_LINK)
|
val helpLinkId = requireArguments().getInt(HELP_LINK)
|
||||||
|
val dismissible = requireArguments().getBoolean(DISMISSIBLE)
|
||||||
|
val clearPositiveAction = requireArguments().getBoolean(CLEAR_POSITIVE_ACTION)
|
||||||
|
|
||||||
val builder = MaterialAlertDialogBuilder(requireContext())
|
val builder = MaterialAlertDialogBuilder(requireContext())
|
||||||
|
|
||||||
|
if (clearPositiveAction) {
|
||||||
|
messageDialogViewModel.positiveAction = null
|
||||||
|
}
|
||||||
|
|
||||||
if (messageDialogViewModel.positiveAction == null) {
|
if (messageDialogViewModel.positiveAction == null) {
|
||||||
builder.setPositiveButton(R.string.close, null)
|
builder.setPositiveButton(R.string.close, null)
|
||||||
} else {
|
} else {
|
||||||
|
@ -51,6 +57,8 @@ class MessageDialogFragment : DialogFragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isCancelable = dismissible
|
||||||
|
|
||||||
return builder.show()
|
return builder.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,6 +75,8 @@ class MessageDialogFragment : DialogFragment() {
|
||||||
private const val DESCRIPTION_ID = "DescriptionId"
|
private const val DESCRIPTION_ID = "DescriptionId"
|
||||||
private const val DESCRIPTION_STRING = "DescriptionString"
|
private const val DESCRIPTION_STRING = "DescriptionString"
|
||||||
private const val HELP_LINK = "Link"
|
private const val HELP_LINK = "Link"
|
||||||
|
private const val DISMISSIBLE = "Dismissible"
|
||||||
|
private const val CLEAR_POSITIVE_ACTION = "ClearPositiveAction"
|
||||||
|
|
||||||
fun newInstance(
|
fun newInstance(
|
||||||
activity: FragmentActivity? = null,
|
activity: FragmentActivity? = null,
|
||||||
|
@ -75,22 +85,28 @@ class MessageDialogFragment : DialogFragment() {
|
||||||
descriptionId: Int = 0,
|
descriptionId: Int = 0,
|
||||||
descriptionString: String = "",
|
descriptionString: String = "",
|
||||||
helpLinkId: Int = 0,
|
helpLinkId: Int = 0,
|
||||||
|
dismissible: Boolean = true,
|
||||||
positiveAction: (() -> Unit)? = null
|
positiveAction: (() -> Unit)? = null
|
||||||
): MessageDialogFragment {
|
): MessageDialogFragment {
|
||||||
val dialog = MessageDialogFragment()
|
var clearPositiveAction = false
|
||||||
val bundle = Bundle()
|
|
||||||
bundle.apply {
|
|
||||||
putInt(TITLE_ID, titleId)
|
|
||||||
putString(TITLE_STRING, titleString)
|
|
||||||
putInt(DESCRIPTION_ID, descriptionId)
|
|
||||||
putString(DESCRIPTION_STRING, descriptionString)
|
|
||||||
putInt(HELP_LINK, helpLinkId)
|
|
||||||
}
|
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
ViewModelProvider(activity)[MessageDialogViewModel::class.java].apply {
|
ViewModelProvider(activity)[MessageDialogViewModel::class.java].apply {
|
||||||
clear()
|
clear()
|
||||||
this.positiveAction = positiveAction
|
this.positiveAction = positiveAction
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
clearPositiveAction = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val dialog = MessageDialogFragment()
|
||||||
|
val bundle = Bundle().apply {
|
||||||
|
putInt(TITLE_ID, titleId)
|
||||||
|
putString(TITLE_STRING, titleString)
|
||||||
|
putInt(DESCRIPTION_ID, descriptionId)
|
||||||
|
putString(DESCRIPTION_STRING, descriptionString)
|
||||||
|
putInt(HELP_LINK, helpLinkId)
|
||||||
|
putBoolean(DISMISSIBLE, dismissible)
|
||||||
|
putBoolean(CLEAR_POSITIVE_ACTION, clearPositiveAction)
|
||||||
}
|
}
|
||||||
dialog.arguments = bundle
|
dialog.arguments = bundle
|
||||||
return dialog
|
return dialog
|
||||||
|
|
Loading…
Reference in a new issue