diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/TwoButtonsAlertDialog.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/TwoButtonsAlertDialog.kt
new file mode 100644
index 000000000..12bc0d955
--- /dev/null
+++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/TwoButtonsAlertDialog.kt
@@ -0,0 +1,79 @@
+package org.koitharu.kotatsu.base.ui.dialog
+
+import android.content.Context
+import android.content.DialogInterface
+import android.view.LayoutInflater
+import androidx.annotation.DrawableRes
+import androidx.annotation.StringRes
+import androidx.appcompat.app.AlertDialog
+import androidx.core.view.isVisible
+import com.google.android.material.button.MaterialButton
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import org.koitharu.kotatsu.databinding.DialogTwoButtonsBinding
+
+class TwoButtonsAlertDialog private constructor(
+ private val delegate: AlertDialog
+) : DialogInterface by delegate {
+
+ fun show() = delegate.show()
+
+ class Builder(context: Context) {
+
+ private val binding = DialogTwoButtonsBinding.inflate(LayoutInflater.from(context))
+
+ private val delegate = MaterialAlertDialogBuilder(context)
+ .setView(binding.root)
+
+ fun setTitle(@StringRes titleResId: Int): Builder {
+ binding.title.setText(titleResId)
+ return this
+ }
+
+ fun setTitle(title: CharSequence): Builder {
+ binding.title.text = title
+ return this
+ }
+
+ fun setIcon(@DrawableRes iconId: Int): Builder {
+ binding.icon.setImageResource(iconId)
+ return this
+ }
+
+ fun setPositiveButton(
+ @StringRes textId: Int,
+ listener: DialogInterface.OnClickListener,
+ ): Builder {
+ initButton(binding.button1, DialogInterface.BUTTON_POSITIVE, textId, listener)
+ return this
+ }
+
+ fun setNegativeButton(
+ @StringRes textId: Int,
+ listener: DialogInterface.OnClickListener? = null
+ ): Builder {
+ initButton(binding.button2, DialogInterface.BUTTON_NEGATIVE, textId, listener)
+ return this
+ }
+
+ fun create(): TwoButtonsAlertDialog {
+ val dialog = delegate.create()
+ binding.root.tag = dialog
+ return TwoButtonsAlertDialog(dialog)
+ }
+
+ private fun initButton(
+ button: MaterialButton,
+ which: Int,
+ @StringRes textId: Int,
+ listener: DialogInterface.OnClickListener?,
+ ) {
+ button.setText(textId)
+ button.isVisible = true
+ button.setOnClickListener {
+ val dialog = binding.root.tag as DialogInterface
+ listener?.onClick(dialog, which)
+ dialog.dismiss()
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/layout/dialog_two_buttons.xml b/app/src/main/res/layout/dialog_two_buttons.xml
new file mode 100644
index 000000000..85b031bb1
--- /dev/null
+++ b/app/src/main/res/layout/dialog_two_buttons.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0148884e4..fc464a07a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -448,4 +448,6 @@
Cancel all
Download only via Wi-Fi
Stop downloading when switching to a mobile network
+ Enable
+ No thanks