From be666b7854bf71e10a2d38210c02378e907134d8 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 10 May 2023 12:14:03 +0300 Subject: [PATCH] Two buttons alert dialog --- .../base/ui/dialog/TwoButtonsAlertDialog.kt | 79 +++++++++++++++++++ .../main/res/layout/dialog_two_buttons.xml | 56 +++++++++++++ app/src/main/res/values/strings.xml | 2 + 3 files changed, 137 insertions(+) create mode 100644 app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/TwoButtonsAlertDialog.kt create mode 100644 app/src/main/res/layout/dialog_two_buttons.xml 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