diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt index 6a3e38cb8..4f00f4d1f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt @@ -20,7 +20,6 @@ package org.isoron.uhabits import android.app.Application -import android.app.Dialog import android.content.Context import org.isoron.uhabits.core.database.UnsupportedDatabaseVersionException import org.isoron.uhabits.core.reminders.ReminderScheduler @@ -119,11 +118,5 @@ class HabitsApplication : Application() { false } } - - var currentDialog: Dialog? = null - fun clearCurrentDialog() { - currentDialog?.dismiss() - currentDialog = null - } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt index 2a203d937..9f281b964 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt @@ -25,8 +25,8 @@ import android.view.LayoutInflater import android.view.View import android.view.View.GONE import android.view.View.VISIBLE -import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R +import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrentAndShow import org.isoron.uhabits.core.models.Entry.Companion.NO import org.isoron.uhabits.core.models.Entry.Companion.SKIP import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN @@ -99,7 +99,6 @@ class CheckmarkPopup( } fun show() { - HabitsApplication.clearCurrentDialog() dialog = Dialog(context, android.R.style.Theme_NoTitleBar) dialog.setContentView(view.root) dialog.window?.apply { @@ -119,13 +118,12 @@ class CheckmarkPopup( view.unknownBtn.setOnClickListener { onClick(UNKNOWN) } dialog.setCanceledOnTouchOutside(true) dialog.dimBehind() - HabitsApplication.currentDialog = dialog + dialog.dismissCurrentAndShow() dialog.show() } fun save() { onToggle(value, view.notes.text.toString().trim()) - HabitsApplication.currentDialog = null dialog.dismiss() } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.kt index 46ce4d253..949d0b200 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.kt @@ -19,10 +19,9 @@ package org.isoron.uhabits.activities.common.dialogs import android.app.Dialog -import android.content.DialogInterface import android.os.Bundle import com.android.colorpicker.ColorPickerDialog -import org.isoron.uhabits.HabitsApplication +import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrentAndShow import org.isoron.uhabits.core.ui.callbacks.OnColorPickedCallback import org.isoron.uhabits.utils.toPaletteColor @@ -38,16 +37,7 @@ class ColorPickerDialog : ColorPickerDialog() { } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - HabitsApplication.clearCurrentDialog() - HabitsApplication.currentDialog = this.dialog + this.dialog?.dismissCurrentAndShow() return super.onCreateDialog(savedInstanceState) } - override fun onColorSelected(color: Int) { - super.onColorSelected(color) - } - - override fun onDismiss(dialog: DialogInterface) { - HabitsApplication.currentDialog = null - super.onDismiss(dialog) - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.kt index 5e51d6e7d..ffef719ea 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.kt @@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.common.dialogs import android.content.Context import android.content.DialogInterface import androidx.appcompat.app.AlertDialog -import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R +import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrentAndShow import org.isoron.uhabits.core.ui.callbacks.OnConfirmedCallback import org.isoron.uhabits.inject.ActivityContext @@ -35,7 +35,6 @@ class ConfirmDeleteDialog( quantity: Int ) : AlertDialog(context) { init { - HabitsApplication.clearCurrentDialog() val res = context.resources setTitle(res.getQuantityString(R.plurals.delete_habits_title, quantity)) setMessage(res.getQuantityString(R.plurals.delete_habits_message, quantity)) @@ -48,10 +47,6 @@ class ConfirmDeleteDialog( res.getString(R.string.no) ) { dialog: DialogInterface?, which: Int -> } - HabitsApplication.currentDialog = this - - this.setOnDismissListener { - HabitsApplication.currentDialog = null - } + this.dismissCurrentAndShow() } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt index 6774bba71..8ee1dd144 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt @@ -20,7 +20,6 @@ package org.isoron.uhabits.activities.common.dialogs import android.app.Dialog -import android.content.DialogInterface import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -31,8 +30,8 @@ import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import kotlinx.android.synthetic.main.frequency_picker_dialog.view.* -import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R +import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrentAndShow class FrequencyPickerDialog( var freqNumerator: Int, @@ -45,7 +44,6 @@ class FrequencyPickerDialog( constructor() : this(1, 1) override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - HabitsApplication.clearCurrentDialog() val inflater = LayoutInflater.from(requireActivity()) contentView = inflater.inflate(R.layout.frequency_picker_dialog, null) @@ -118,15 +116,10 @@ class FrequencyPickerDialog( .setView(contentView) .setPositiveButton(R.string.save) { _, _ -> onSaveClicked() } .create() - HabitsApplication.currentDialog = dialog + dialog.dismissCurrentAndShow() return dialog } - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - HabitsApplication.currentDialog = null - } - private fun addBeforeAfterText( str: String, container: LinearLayout diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/MultipleDialogsHandler.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/MultipleDialogsHandler.kt new file mode 100644 index 000000000..6a0c7b32b --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/MultipleDialogsHandler.kt @@ -0,0 +1,19 @@ +package org.isoron.uhabits.activities.common.dialogs + +import android.app.Dialog +import java.lang.ref.WeakReference + +class MultipleDialogsHandler { + companion object { + var currentDialog: WeakReference = WeakReference(null) + + fun Dialog.dismissCurrentAndShow() { + if (currentDialog.get() != null) { + var test = currentDialog.get()!!.isShowing + } + currentDialog.get()?.dismiss() + currentDialog = WeakReference(this) + show() + } + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPopup.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPopup.kt index cb549b84e..a42dc6408 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPopup.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPopup.kt @@ -27,7 +27,7 @@ import android.view.MotionEvent.ACTION_DOWN import android.view.View import android.view.View.GONE import android.view.View.VISIBLE -import org.isoron.uhabits.HabitsApplication +import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrentAndShow import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.databinding.CheckmarkPopupBinding @@ -74,7 +74,6 @@ class NumberPopup( } fun show() { - HabitsApplication.clearCurrentDialog() dialog = Dialog(context, android.R.style.Theme_NoTitleBar) dialog.setContentView(view.root) dialog.window?.apply { @@ -86,7 +85,6 @@ class NumberPopup( } dialog.setOnDismissListener { onDismiss() - HabitsApplication.currentDialog = null } view.value.setOnKeyListener { _, keyCode, event -> @@ -106,7 +104,7 @@ class NumberPopup( view.value.requestFocusWithKeyboard() dialog.setCanceledOnTouchOutside(true) dialog.dimBehind() - HabitsApplication.currentDialog = dialog + dialog.dismissCurrentAndShow() dialog.show() } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.kt index 17f3755fb..2936ccd30 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.kt @@ -24,8 +24,8 @@ import android.content.DialogInterface.OnMultiChoiceClickListener import android.os.Bundle import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment -import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R +import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrentAndShow import org.isoron.uhabits.core.models.WeekdayList import org.isoron.uhabits.core.utils.DateUtils import java.util.Calendar @@ -60,7 +60,6 @@ class WeekdayPickerDialog : } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - HabitsApplication.clearCurrentDialog() val builder = AlertDialog.Builder( requireActivity() ) @@ -77,15 +76,10 @@ class WeekdayPickerDialog : ) { _: DialogInterface?, _: Int -> dismiss() } val dialog = builder.create() - HabitsApplication.currentDialog = dialog + dialog.dismissCurrentAndShow() return dialog } - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - HabitsApplication.currentDialog = null - } - fun setListener(listener: OnWeekdaysPickedListener?) { this.listener = listener }