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 af432e333..fb7f43d51 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 @@ -26,7 +26,6 @@ import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import org.isoron.uhabits.R -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent 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 @@ -36,6 +35,7 @@ import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.databinding.CheckmarkPopupBinding import org.isoron.uhabits.utils.InterfaceUtils.getFontAwesome import org.isoron.uhabits.utils.dimBehind +import org.isoron.uhabits.utils.dismissCurrentAndShow import org.isoron.uhabits.utils.dp import org.isoron.uhabits.utils.sres @@ -118,8 +118,7 @@ class CheckmarkPopup( view.unknownBtn.setOnClickListener { onClick(UNKNOWN) } dialog.setCanceledOnTouchOutside(true) dialog.dimBehind() - dialog.dismissCurrent() - dialog.show() + dialog.dismissCurrentAndShow() } fun save() { 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 4d9dd130a..cf6248600 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 @@ -18,10 +18,7 @@ */ package org.isoron.uhabits.activities.common.dialogs -import android.app.Dialog -import android.os.Bundle import com.android.colorpicker.ColorPickerDialog -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent import org.isoron.uhabits.core.ui.callbacks.OnColorPickedCallback import org.isoron.uhabits.utils.toPaletteColor @@ -35,10 +32,4 @@ class ColorPickerDialog : ColorPickerDialog() { callback.onColorPicked(pc) } } - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val dialog = super.onCreateDialog(savedInstanceState) - dialog.dismissCurrent() - return 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 27b2b3652..bac6180b2 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 @@ -22,7 +22,6 @@ import android.content.Context import android.content.DialogInterface import androidx.appcompat.app.AlertDialog import org.isoron.uhabits.R -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent import org.isoron.uhabits.core.ui.callbacks.OnConfirmedCallback import org.isoron.uhabits.inject.ActivityContext @@ -46,7 +45,5 @@ class ConfirmDeleteDialog( BUTTON_NEGATIVE, res.getString(R.string.no) ) { dialog: DialogInterface?, which: Int -> } - - this.dismissCurrent() } } 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 80f54b2ac..8411e3a96 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 @@ -31,7 +31,6 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import kotlinx.android.synthetic.main.frequency_picker_dialog.view.* import org.isoron.uhabits.R -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent class FrequencyPickerDialog( var freqNumerator: Int, @@ -112,12 +111,10 @@ class FrequencyPickerDialog( if (hasFocus) check(contentView.xTimesPerYDaysRadioButton) } - val dialog = AlertDialog.Builder(requireActivity()) + return AlertDialog.Builder(requireActivity()) .setView(contentView) .setPositiveButton(R.string.save) { _, _ -> onSaveClicked() } .create() - dialog.dismissCurrent() - return dialog } private fun addBeforeAfterText( 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 deleted file mode 100644 index 26f9c7373..000000000 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/MultipleDialogsHandler.kt +++ /dev/null @@ -1,15 +0,0 @@ -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.dismissCurrent() { - currentDialog.get()?.dismiss() - currentDialog = WeakReference(this) - } - } -} 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 2f1776c13..c3a464311 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,11 +27,11 @@ import android.view.MotionEvent.ACTION_DOWN import android.view.View import android.view.View.GONE import android.view.View.VISIBLE -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.databinding.CheckmarkPopupBinding import org.isoron.uhabits.utils.dimBehind +import org.isoron.uhabits.utils.dismissCurrentAndShow import org.isoron.uhabits.utils.dp import org.isoron.uhabits.utils.requestFocusWithKeyboard import java.text.DecimalFormat @@ -104,8 +104,7 @@ class NumberPopup( view.value.requestFocusWithKeyboard() dialog.setCanceledOnTouchOutside(true) dialog.dimBehind() - dialog.dismissCurrent() - dialog.show() + dialog.dismissCurrentAndShow() } fun save() { 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 7e257ef38..67cd5ce9e 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 @@ -25,7 +25,6 @@ import android.os.Bundle import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import org.isoron.uhabits.R -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent import org.isoron.uhabits.core.models.WeekdayList import org.isoron.uhabits.core.utils.DateUtils import java.util.Calendar @@ -75,9 +74,7 @@ class WeekdayPickerDialog : android.R.string.cancel ) { _: DialogInterface?, _: Int -> dismiss() } - val dialog = builder.create() - dialog.dismissCurrent() - return dialog + return builder.create() } fun setListener(listener: OnWeekdaysPickedListener?) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt index 503738c69..b3dc0d2da 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt @@ -46,7 +46,6 @@ import org.isoron.uhabits.R import org.isoron.uhabits.activities.AndroidThemeSwitcher import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialogFactory import org.isoron.uhabits.activities.common.dialogs.FrequencyPickerDialog -import org.isoron.uhabits.activities.common.dialogs.MultipleDialogsHandler.Companion.dismissCurrent import org.isoron.uhabits.activities.common.dialogs.WeekdayPickerDialog import org.isoron.uhabits.core.commands.CommandRunner import org.isoron.uhabits.core.commands.CreateHabitCommand @@ -60,6 +59,7 @@ import org.isoron.uhabits.core.models.Reminder import org.isoron.uhabits.core.models.WeekdayList import org.isoron.uhabits.databinding.ActivityEditHabitBinding import org.isoron.uhabits.utils.ColorUtils +import org.isoron.uhabits.utils.dismissCurrentAndShow import org.isoron.uhabits.utils.formatTime import org.isoron.uhabits.utils.toFormattedString @@ -157,23 +157,23 @@ class EditHabitActivity : AppCompatActivity() { val colorPickerDialogFactory = ColorPickerDialogFactory(this) binding.colorButton.setOnClickListener { - val dialog = colorPickerDialogFactory.create(color, themeSwitcher.currentTheme) - dialog.setListener { paletteColor -> + val picker = colorPickerDialogFactory.create(color, themeSwitcher.currentTheme) + picker.setListener { paletteColor -> this.color = paletteColor updateColors() } - dialog.show(supportFragmentManager, "colorPicker") + picker.dismissCurrentAndShow(supportFragmentManager, "colorPicker") } populateFrequency() binding.booleanFrequencyPicker.setOnClickListener { - val dialog = FrequencyPickerDialog(freqNum, freqDen) - dialog.onFrequencyPicked = { num, den -> + val picker = FrequencyPickerDialog(freqNum, freqDen) + picker.onFrequencyPicked = { num, den -> freqNum = num freqDen = den populateFrequency() } - dialog.show(supportFragmentManager, "frequencyPicker") + picker.dismissCurrentAndShow(supportFragmentManager, "frequencyPicker") } populateTargetType() @@ -191,8 +191,7 @@ class EditHabitActivity : AppCompatActivity() { dialog.dismiss() } val dialog = builder.create() - dialog.dismissCurrent() - dialog.show() + dialog.dismissCurrentAndShow() } binding.numericalFrequencyPicker.setOnClickListener { @@ -238,7 +237,7 @@ class EditHabitActivity : AppCompatActivity() { is24HourMode, androidColor ) - dialog.show(supportFragmentManager, "timePicker") + dialog.dismissCurrentAndShow(supportFragmentManager, "timePicker") } binding.reminderDatePicker.setOnClickListener { @@ -250,7 +249,7 @@ class EditHabitActivity : AppCompatActivity() { populateReminder() } dialog.setSelectedDays(reminderDays) - dialog.show(supportFragmentManager, "dayPicker") + dialog.dismissCurrentAndShow(supportFragmentManager, "dayPicker") } binding.buttonSave.setOnClickListener { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt index 343b50644..16bf5bd59 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt @@ -62,12 +62,7 @@ import org.isoron.uhabits.intents.IntentFactory import org.isoron.uhabits.tasks.ExportDBTaskFactory import org.isoron.uhabits.tasks.ImportDataTask import org.isoron.uhabits.tasks.ImportDataTaskFactory -import org.isoron.uhabits.utils.copyTo -import org.isoron.uhabits.utils.currentTheme -import org.isoron.uhabits.utils.restartWithFade -import org.isoron.uhabits.utils.showMessage -import org.isoron.uhabits.utils.showSendEmailScreen -import org.isoron.uhabits.utils.showSendFileScreen +import org.isoron.uhabits.utils.* import java.io.File import java.io.IOException import javax.inject.Inject @@ -163,7 +158,7 @@ class ListHabitsScreen } override fun showDeleteConfirmationScreen(callback: OnConfirmedCallback, quantity: Int) { - ConfirmDeleteDialog(activity, callback, quantity).show() + ConfirmDeleteDialog(activity, callback, quantity).dismissCurrentAndShow() } override fun showEditHabitsScreen(selected: List) { @@ -224,7 +219,8 @@ class ListHabitsScreen override fun showColorPicker(defaultColor: PaletteColor, callback: OnColorPickedCallback) { val picker = colorPickerFactory.create(defaultColor, themeSwitcher.currentTheme!!) picker.setListener(callback) - picker.show(activity.supportFragmentManager, "picker") + //picker.show(activity.supportFragmentManager, "picker") + picker.dialog?.dismissCurrentAndShow() } override fun showNumberPopup( diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index 1e90e1ae9..b993d0d20 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -50,6 +50,7 @@ import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitPresenter import org.isoron.uhabits.core.ui.views.OnDateClickedListener import org.isoron.uhabits.intents.IntentFactory import org.isoron.uhabits.utils.currentTheme +import org.isoron.uhabits.utils.dismissCurrentAndShow import org.isoron.uhabits.utils.showMessage import org.isoron.uhabits.utils.showSendFileScreen import org.isoron.uhabits.widgets.WidgetUpdater @@ -228,7 +229,7 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { } override fun showDeleteConfirmationScreen(callback: OnConfirmedCallback) { - ConfirmDeleteDialog(this@ShowHabitActivity, callback, 1).show() + ConfirmDeleteDialog(this@ShowHabitActivity, callback, 1).dismissCurrentAndShow() } override fun close() { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DialogUtils.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DialogUtils.kt new file mode 100644 index 000000000..855f865c7 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DialogUtils.kt @@ -0,0 +1,21 @@ +package org.isoron.uhabits.utils + +import android.app.Dialog +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.FragmentManager +import java.lang.ref.WeakReference + +var currentDialog: WeakReference = WeakReference(null) + +fun Dialog.dismissCurrentAndShow() { + currentDialog.get()?.dismiss() + currentDialog = WeakReference(this) + show() +} + +fun DialogFragment.dismissCurrentAndShow(fragmentManager: FragmentManager, tag: String) { + currentDialog.get()?.dismiss() + show(fragmentManager, tag) + fragmentManager.executePendingTransactions() + currentDialog = WeakReference(this.dialog) +}