diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt index 75166bfab..935fc7028 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt @@ -116,15 +116,7 @@ class NumberButtonViewTest : BaseViewTest() { } @Test - fun testClick_shortToggleDisabled() { - prefs.isShortToggleEnabled = false - view.performClick() - assertFalse(edited) - } - - @Test - fun testClick_shortToggleEnabled() { - prefs.isShortToggleEnabled = true + fun testClick() { view.performClick() assertTrue(edited) } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.kt index 10ad56057..d2debb851 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.kt @@ -61,7 +61,7 @@ class PerformanceTest : BaseAndroidTest() { val habit = fixtures.createEmptyHabit() for (i in 0..4999) { val timestamp: Timestamp = Timestamp(i * DAY_LENGTH) - CreateRepetitionCommand(habitList, habit, timestamp, 1).run() + CreateRepetitionCommand(habitList, habit, timestamp, 1, "").run() } db.setTransactionSuccessful() db.endTransaction() diff --git a/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt b/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt index df5d5e184..0a8c5ee68 100644 --- a/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt +++ b/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt @@ -49,23 +49,12 @@ class AndroidDataView( override fun onShowPress(e: MotionEvent?) = Unit override fun onSingleTapUp(e: MotionEvent?): Boolean { - val x: Float - val y: Float - try { - val pointerId = e!!.getPointerId(0) - x = e.getX(pointerId) - y = e.getY(pointerId) - } catch (ex: RuntimeException) { - // Android often throws IllegalArgumentException here. Apparently, - // the pointer id may become invalid shortly after calling - // e.getPointerId. - return false - } - view?.onClick(x / canvas.innerDensity, y / canvas.innerDensity) - return true + return handleClick(e, true) } - override fun onLongPress(e: MotionEvent?) = Unit + override fun onLongPress(e: MotionEvent?) { + handleClick(e) + } override fun onScroll( e1: MotionEvent?, @@ -137,4 +126,22 @@ class AndroidDataView( } } } + + private fun handleClick(e: MotionEvent?, isSingleTap: Boolean = false): Boolean { + val x: Float + val y: Float + try { + val pointerId = e!!.getPointerId(0) + x = e.getX(pointerId) + y = e.getY(pointerId) + } catch (ex: RuntimeException) { + // Android often throws IllegalArgumentException here. Apparently, + // the pointer id may become invalid shortly after calling + // e.getPointerId. + return false + } + if (isSingleTap) view?.onClick(x / canvas.innerDensity, y / canvas.innerDensity) + else view?.onLongClick(x / canvas.innerDensity, y / canvas.innerDensity) + return true + } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt new file mode 100644 index 000000000..c80759bae --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt @@ -0,0 +1,116 @@ +package org.isoron.uhabits.activities.common.dialogs + +import android.content.Context +import android.graphics.Typeface +import android.view.LayoutInflater +import android.view.View +import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE +import android.widget.Button +import androidx.appcompat.app.AlertDialog +import org.isoron.platform.gui.toInt +import org.isoron.uhabits.R +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 +import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO +import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL +import org.isoron.uhabits.core.models.PaletteColor +import org.isoron.uhabits.core.preferences.Preferences +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior +import org.isoron.uhabits.core.ui.views.Theme +import org.isoron.uhabits.databinding.CheckmarkDialogBinding +import org.isoron.uhabits.inject.ActivityContext +import org.isoron.uhabits.utils.InterfaceUtils +import org.isoron.uhabits.utils.StyledResources +import javax.inject.Inject + +class CheckmarkDialog +@Inject constructor( + @ActivityContext private val context: Context, + private val preferences: Preferences, +) : View.OnClickListener { + + private lateinit var binding: CheckmarkDialogBinding + private lateinit var fontAwesome: Typeface + private val allButtons = mutableListOf