diff --git a/Habitica/res/layout/dialog_edittext.xml b/Habitica/res/layout/dialog_edittext.xml index ea54ddb1b..f38149dfd 100644 --- a/Habitica/res/layout/dialog_edittext.xml +++ b/Habitica/res/layout/dialog_edittext.xml @@ -1,11 +1,20 @@ - + + android:theme="@style/TextInputLayoutAppearanceTheme" + style="@style/TextInputLayoutAppearance"> + + \ No newline at end of file diff --git a/Habitica/res/layout/dialog_edittext_add_local_auth.xml b/Habitica/res/layout/dialog_edittext_add_local_auth.xml index 757e3af70..aa3283484 100644 --- a/Habitica/res/layout/dialog_edittext_add_local_auth.xml +++ b/Habitica/res/layout/dialog_edittext_add_local_auth.xml @@ -1,37 +1,55 @@ - + - - + + + - + + + - - + android:theme="@style/TextInputLayoutAppearanceTheme" + style="@style/TextInputLayoutAppearance" + android:hint="@string/confirmpassword" + android:layout_marginTop="@dimen/content_section_spacing"> + + \ No newline at end of file diff --git a/Habitica/res/layout/dialog_edittext_change_pw.xml b/Habitica/res/layout/dialog_edittext_change_pw.xml index 2392c4d95..56ede10eb 100644 --- a/Habitica/res/layout/dialog_edittext_change_pw.xml +++ b/Habitica/res/layout/dialog_edittext_change_pw.xml @@ -1,36 +1,55 @@ - + - + + + - + + + - - - + android:theme="@style/TextInputLayoutAppearanceTheme" + style="@style/TextInputLayoutAppearance" + android:hint="@string/new_password_repeat" + android:layout_marginTop="@dimen/content_section_spacing"> + + \ No newline at end of file diff --git a/Habitica/res/layout/dialog_edittext_confirm_pw.xml b/Habitica/res/layout/dialog_edittext_confirm_pw.xml index cbd8afb9f..79b106f81 100644 --- a/Habitica/res/layout/dialog_edittext_confirm_pw.xml +++ b/Habitica/res/layout/dialog_edittext_confirm_pw.xml @@ -1,20 +1,36 @@ - - + - + + + + android:layout_height="wrap_content" + android:hint="@string/password" + android:theme="@style/TextInputLayoutAppearanceTheme" + style="@style/TextInputLayoutAppearance" + android:layout_marginTop="@dimen/content_section_spacing"> + + \ No newline at end of file diff --git a/Habitica/res/layout/dialog_habitica_base.xml b/Habitica/res/layout/dialog_habitica_base.xml index 8017d8a67..ede5e1d3a 100644 --- a/Habitica/res/layout/dialog_habitica_base.xml +++ b/Habitica/res/layout/dialog_habitica_base.xml @@ -44,9 +44,9 @@ android:textColor="?textColorSecondary" style="@style/Body2" tools:text="This is the message" - android:layout_marginBottom="@dimen/spacing_medium" - android:layout_marginStart="@dimen/alert_side_padding" - android:layout_marginEnd="@dimen/alert_side_padding" + android:paddingBottom="@dimen/spacing_medium" + android:paddingStart="@dimen/alert_side_padding" + android:paddingEnd="@dimen/alert_side_padding" /> - \ No newline at end of file diff --git a/Habitica/res/layout/dialog_habitica_primary_destructive_button.xml b/Habitica/res/layout/dialog_habitica_primary_destructive_button.xml new file mode 100644 index 000000000..670a3f0aa --- /dev/null +++ b/Habitica/res/layout/dialog_habitica_primary_destructive_button.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index c7be8fe51..b478dfc12 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -655,8 +655,8 @@ Delete Account Are you sure? This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you\'re absolutely certain, type your password into the text box below. Are you sure? This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you\'re absolutely certain, type DELETE into the text box below. - reset my account - delete my account + Reset my Account + Delete my Account Danger Zone Nevermind Resetting Account @@ -933,4 +933,5 @@ Special Achievements Switch to list view Switch to grid view + Confirm deletion diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialog-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialog-Extensions.kt index e507c5a08..b5d65736d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialog-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialog-Extensions.kt @@ -5,13 +5,13 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog fun HabiticaAlertDialog.addOkButton(isPrimary: Boolean = true, listener: ((HabiticaAlertDialog, Int) -> Unit)? = null) { - this.addButton(R.string.ok, isPrimary, listener) + this.addButton(R.string.ok, isPrimary, false, listener) } fun HabiticaAlertDialog.addCloseButton(isPrimary: Boolean = false, listener: ((DialogInterface, Int) -> Unit)? = null) { - this.addButton(R.string.close, isPrimary, listener) + this.addButton(R.string.close, isPrimary, false, listener) } fun HabiticaAlertDialog.addCancelButton(isPrimary: Boolean = false, listener: ((DialogInterface, Int) -> Unit)? = null) { - this.addButton(R.string.cancel, isPrimary, listener) + this.addButton(R.string.cancel, isPrimary, false, listener) } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java b/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java index 88456e490..a8b9ef43f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/prefs/scanner/IntentIntegrator.java @@ -368,7 +368,7 @@ public class IntentIntegrator { HabiticaAlertDialog downloadDialog = new HabiticaAlertDialog(activity); downloadDialog.setTitle(title); downloadDialog.setMessage(message); - downloadDialog.addButton(buttonYes, true, (dialogInterface, i) -> { + downloadDialog.addButton(buttonYes, true, false, (dialogInterface, i) -> { String packageName = targetApplications.get(0); Uri uri = Uri.parse("market://details?id=" + packageName); Intent intent = new Intent(Intent.ACTION_VIEW, uri); @@ -380,7 +380,7 @@ public class IntentIntegrator { } return null; }); - downloadDialog.addButton(buttonNo, false, null); + downloadDialog.addButton(buttonNo, false, false, null); downloadDialog.show(); return downloadDialog; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt index 46ee87e3e..178f7df83 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt @@ -104,7 +104,7 @@ abstract class BaseActivity : AppCompatActivity() { val alert = HabiticaAlertDialog(this) alert.setTitle(event.title) alert.setMessage(event.message) - alert.addButton(android.R.string.ok, true, null) + alert.addButton(android.R.string.ok, true, false, null) alert.show() } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt index d1d8d7325..202d12fb9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AuthenticationPreferenceFragment.kt @@ -4,24 +4,21 @@ import android.app.ProgressDialog import android.content.ClipData import android.content.ClipboardManager import android.content.Context -import android.content.DialogInterface import android.os.Bundle -import androidx.core.content.ContextCompat -import androidx.appcompat.app.AlertDialog -import androidx.preference.Preference import android.text.InputType import android.widget.EditText -import android.widget.LinearLayout import android.widget.Toast +import androidx.preference.Preference +import com.google.android.material.textfield.TextInputLayout import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.ApiClient -import com.habitrpg.android.habitica.extensions.layoutInflater -import com.habitrpg.android.habitica.extensions.notNull -import com.habitrpg.android.habitica.helpers.MainNavigationController +import com.habitrpg.android.habitica.extensions.* import com.habitrpg.android.habitica.helpers.AppConfigManager +import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.user.User +import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionDetailsView import io.reactivex.functions.Consumer import javax.inject.Inject @@ -101,18 +98,17 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { val passwordEditText = view?.findViewById(R.id.passwordEditText) val passwordRepeatEditText = view?.findViewById(R.id.passwordRepeatEditText) context.notNull { context -> - val dialog = AlertDialog.Builder(context) - .setTitle(R.string.change_password) - .setPositiveButton(R.string.change) { thisDialog, _ -> - thisDialog.dismiss() - userRepository.updatePassword(oldPasswordEditText?.text.toString(), passwordEditText?.text.toString(), passwordRepeatEditText?.text.toString()) - .subscribe(Consumer { - Toast.makeText(activity, R.string.password_changed, Toast.LENGTH_SHORT).show() - }, RxErrorHandler.handleEmptyError()) - } - .setNegativeButton(R.string.action_cancel) { thisDialog, _ -> thisDialog.dismiss() } - .create() - dialog.setView(view) + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.change_password) + dialog.addButton(R.string.change, true) { _, _ -> + userRepository.updatePassword(oldPasswordEditText?.text.toString(), passwordEditText?.text.toString(), passwordRepeatEditText?.text.toString()) + .subscribe(Consumer { + Toast.makeText(activity, R.string.password_changed, Toast.LENGTH_SHORT).show() + }, RxErrorHandler.handleEmptyError()) + } + dialog.addCancelButton() + dialog.setAdditionalContentView(view) + dialog.setAdditionalContentSidePadding(12) dialog.show() } } @@ -122,20 +118,20 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { val view = inflater?.inflate(R.layout.dialog_edittext_confirm_pw, null) val emailEditText = view?.findViewById(R.id.editText) emailEditText?.setText(user?.authentication?.localAuthentication?.email) + view?.findViewById(R.id.input_layout)?.hint = context?.getString(R.string.email) val passwordEditText = view?.findViewById(R.id.passwordEditText) context.notNull { context -> - val dialog = AlertDialog.Builder(context) - .setTitle(R.string.change_email) - .setPositiveButton(R.string.change) { thisDialog, _ -> - thisDialog.dismiss() - userRepository.updateEmail(emailEditText?.text.toString(), passwordEditText?.text.toString()) - .subscribe(Consumer { - configurePreference(findPreference("email"), emailEditText?.text.toString(), true) - }, RxErrorHandler.handleEmptyError()) - } - .setNegativeButton(R.string.action_cancel) { thisDialog, _ -> thisDialog.dismiss() } - .create() - dialog.setView(view) + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.change_email) + dialog.addButton(R.string.change, true) { _, _ -> + userRepository.updateEmail(emailEditText?.text.toString(), passwordEditText?.text.toString()) + .subscribe(Consumer { + configurePreference(findPreference("email"), emailEditText?.text.toString(), true) + }, RxErrorHandler.handleEmptyError()) + } + dialog.addCancelButton() + dialog.setAdditionalContentView(view) + dialog.setAdditionalContentSidePadding(12.dpToPx(context)) dialog.show() } } @@ -145,47 +141,44 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { val view = inflater?.inflate(R.layout.dialog_edittext, null) val loginNameEditText = view?.findViewById(R.id.editText) loginNameEditText?.setText(user?.authentication?.localAuthentication?.username) + view?.findViewById(R.id.input_layout)?.hint = context?.getString(R.string.username) context.notNull { context -> - val builder = AlertDialog.Builder(context).setTitle(R.string.change_username) - val dialog = builder.setPositiveButton(R.string.save) { thisDialog, _ -> - thisDialog.dismiss() - userRepository.updateLoginName(loginNameEditText?.text.toString()) - .subscribe(Consumer { - configurePreference(findPreference("login_name"), loginNameEditText?.text.toString(), true) - }, RxErrorHandler.handleEmptyError()) - } - .setNegativeButton(R.string.action_cancel) { thisDialog, _ -> thisDialog.dismiss() } - .create() - dialog.setView(view) + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.change_username) + dialog.addButton(R.string.save, true) { _, _ -> + userRepository.updateLoginName(loginNameEditText?.text.toString()) + .subscribe(Consumer { + configurePreference(findPreference("login_name"), loginNameEditText?.text.toString(), true) + }, RxErrorHandler.handleEmptyError()) + } + dialog.addCancelButton() + dialog.setAdditionalContentView(view) + dialog.setAdditionalContentSidePadding(12.dpToPx(context)) dialog.show() } } private fun showAccountDeleteConfirmation() { - val input = EditText(context) + val view = context?.layoutInflater?.inflate(R.layout.dialog_edittext, null) var deleteMessage = getString(R.string.delete_account_description) + val editText = view?.findViewById(R.id.editText) if (user?.authentication?.localAuthentication != null) { - input.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD + editText?.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD } else { deleteMessage = getString(R.string.delete_oauth_account_description) - input.inputType = InputType.TYPE_CLASS_TEXT + editText?.inputType = InputType.TYPE_CLASS_TEXT } - val lp = LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, - LinearLayout.LayoutParams.MATCH_PARENT) - input.layoutParams = lp + view?.findViewById(R.id.input_layout)?.hint = context?.getString(R.string.confirm_deletion) context.notNull { context -> - val dialog = AlertDialog.Builder(context) - .setTitle(R.string.delete_account) - .setMessage(deleteMessage) - .setPositiveButton(R.string.delete_account_confirmation) { thisDialog, _ -> - thisDialog.dismiss() - deleteAccount(input.text.toString()) - } - .setNegativeButton(R.string.nevermind) { thisDialog, _ -> thisDialog.dismiss() } - .create() - dialog.setOnShowListener { dialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(context, R.color.red_10)) } - dialog.setView(input) + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.delete_account) + dialog.setMessage(deleteMessage) + dialog.addButton(R.string.delete_account_confirmation, true, true) { _, _ -> + deleteAccount(editText?.text?.toString() ?: "") + } + dialog.addCancelButton() + dialog.setAdditionalContentView(view) + dialog.setAdditionalContentSidePadding(12.dpToPx(context)) dialog.show() } } @@ -197,22 +190,22 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { val passwordEditText = view?.findViewById(R.id.passwordEditText) val passwordRepeatEditText = view?.findViewById(R.id.passwordRepeatEditText) context.notNull { context -> - val dialog = AlertDialog.Builder(context) - .setTitle(R.string.add_local_authentication) - .setPositiveButton(R.string.save) { thisDialog, _ -> - if (passwordEditText?.text == passwordRepeatEditText?.text) { - return@setPositiveButton - } - thisDialog.dismiss() - apiClient.registerUser(user?.username ?: "", emailEditText?.text.toString(), passwordEditText?.text.toString(), passwordRepeatEditText?.text.toString()) - .flatMap { userRepository.retrieveUser(false) } - .subscribe(Consumer { - configurePreference(findPreference("email"), emailEditText?.text.toString(), true) - }, RxErrorHandler.handleEmptyError()) - } - .setNegativeButton(R.string.action_cancel) { thisDialog, _ -> thisDialog.dismiss() } - .create() - dialog.setView(view) + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.add_local_authentication) + dialog.addButton(R.string.save, true) { thisDialog, _ -> + if (passwordEditText?.text == passwordRepeatEditText?.text) { + return@addButton + } + thisDialog.dismiss() + apiClient.registerUser(user?.username ?: "", emailEditText?.text.toString(), passwordEditText?.text.toString(), passwordRepeatEditText?.text.toString()) + .flatMap { userRepository.retrieveUser(false) } + .subscribe(Consumer { + configurePreference(findPreference("email"), emailEditText?.text.toString(), true) + }, RxErrorHandler.handleEmptyError()) + } + dialog.addCancelButton() + dialog.setAdditionalContentView(view) + dialog.setAdditionalContentSidePadding(12.dpToPx(context)) dialog.show() } } @@ -220,43 +213,39 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { private fun deleteAccount(password: String) { @Suppress("DEPRECATION") val dialog = ProgressDialog.show(context, context?.getString(R.string.deleting_account), null, true) - userRepository.deleteAccount(password).subscribe({ _ -> + compositeSubscription.add(userRepository.deleteAccount(password).subscribe({ _ -> context.notNull { HabiticaBaseApplication.logout(it) } activity?.finish() }) { throwable -> dialog.dismiss() RxErrorHandler.reportError(throwable) - } + }) } private fun showAccountResetConfirmation() { context.notNull { context -> - val dialog = AlertDialog.Builder(context) - .setTitle(R.string.reset_account) - .setMessage(R.string.reset_account_description) - .setPositiveButton(R.string.reset_account_confirmation) { thisDialog, _ -> - thisDialog.dismiss() - resetAccount() - } - .setNegativeButton(R.string.nevermind) { thisDialog, _ -> thisDialog.dismiss() } - .create() - dialog.setOnShowListener { dialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(context, R.color.red_10)) } + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.reset_account) + dialog.setMessage(R.string.reset_account_description) + dialog.addButton(R.string.reset_account_confirmation, true, true) { _, _ -> + resetAccount() + } + dialog.addCancelButton() + dialog.setAdditionalContentSidePadding(12.dpToPx(context)) dialog.show() } } private fun showConfirmUsernameDialog() { context.notNull { context -> - val dialog = AlertDialog.Builder(context) - .setTitle(R.string.confirm_username_title) - .setMessage(R.string.confirm_username_description) - .setPositiveButton(R.string.confirm) { thisDialog, _ -> - thisDialog.dismiss() - userRepository.updateLoginName(user?.authentication?.localAuthentication?.username ?: "") - .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) - } - .setNegativeButton(R.string.cancel) { thisDialog, _ -> thisDialog.dismiss() } - .create() + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.confirm_username_title) + dialog.setMessage(R.string.confirm_username_description) + dialog.addButton(R.string.confirm, true) { _, _ -> + userRepository.updateLoginName(user?.authentication?.localAuthentication?.username ?: "") + .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + } + dialog.addCancelButton() dialog.show() } } @@ -264,10 +253,10 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { private fun resetAccount() { @Suppress("DEPRECATION") val dialog = ProgressDialog.show(context, context?.getString(R.string.resetting_account), null, true) - userRepository.resetAccount().subscribe({ dialog.dismiss() }) { throwable -> + compositeSubscription.add(userRepository.resetAccount().subscribe({ dialog.dismiss() }) { throwable -> dialog.dismiss() RxErrorHandler.reportError(throwable) - } + }) } private fun showSubscriptionStatusDialog() { @@ -276,10 +265,10 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() { user?.purchased?.plan?.notNull { view.setPlan(it) } - val dialog = AlertDialog.Builder(context) - .setView(view) - .setTitle(R.string.subscription_status) - .setPositiveButton(R.string.close) { dialogInterface, _ -> dialogInterface.dismiss() }.create() + val dialog = HabiticaAlertDialog(context) + dialog.setAdditionalContentView(view) + dialog.setTitle(R.string.subscription_status) + dialog.addCloseButton() dialog.show() } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt index a8fcd5bb4..9224d3daa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt @@ -9,6 +9,7 @@ import android.widget.FrameLayout import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.app.AlertDialog +import androidx.core.content.ContextCompat import androidx.core.view.children import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.dpToPx @@ -120,7 +121,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. fun setAdditionalContentSidePadding(padding: Int) { contentView.setPadding(padding, 0, padding, contentView.paddingBottom) - contentView.requestLayout() + messageTextView.setPadding(padding, messageTextView.paddingTop, padding, messageTextView.paddingBottom) } private fun updateButtonLayout() { @@ -144,15 +145,23 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. fun getContentView(): View? = additionalContentView - fun addButton(stringRes: Int, isPrimary: Boolean, function: ((HabiticaAlertDialog, Int) -> Unit)? = null): Button { - return addButton(context.getString(stringRes), isPrimary, function) + fun addButton(stringRes: Int, isPrimary: Boolean, isDestructive: Boolean = false, function: ((HabiticaAlertDialog, Int) -> Unit)? = null): Button { + return addButton(context.getString(stringRes), isPrimary, isDestructive, function) } - fun addButton(string: String, isPrimary: Boolean, function: ((HabiticaAlertDialog, Int) -> Unit)? = null): Button { + fun addButton(string: String, isPrimary: Boolean, isDestructive: Boolean = false, function: ((HabiticaAlertDialog, Int) -> Unit)? = null): Button { val button: Button = if (isPrimary) { - buttonsWrapper.inflate(R.layout.dialog_habitica_primary_button) as Button + if (isDestructive) { + buttonsWrapper.inflate(R.layout.dialog_habitica_primary_destructive_button) as Button + } else { + buttonsWrapper.inflate(R.layout.dialog_habitica_primary_button) as Button + } } else { - buttonsWrapper.inflate(R.layout.dialog_habitica_secondary_button) as Button + val button = buttonsWrapper.inflate(R.layout.dialog_habitica_secondary_button) as Button + if (isDestructive) { + button.setTextColor(ContextCompat.getColor(context, R.color.red_100)) + } + button } button.text = string button.minWidth = 147.dpToPx(context)