From 633c0c390caa3c22440a7b7ed61f021f3a384bf0 Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Tue, 2 Jun 2026 12:41:33 +0100 Subject: [PATCH 1/2] Disable quesiton widget long press in most tests --- .../formentry/CatchFormDesignExceptionsTest.kt | 5 ++++- .../android/feature/formentry/ContextMenuTest.java | 2 ++ .../feature/formentry/FieldListUpdateTest.kt | 2 ++ .../rules/EnableQuestionWidgetLongPressRule.kt | 14 ++++++++++++++ .../android/support/rules/ResetStateRule.kt | 2 ++ .../collect/android/widgets/QuestionWidget.java | 4 +++- 6 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 collect_app/src/androidTest/java/org/odk/collect/android/support/rules/EnableQuestionWidgetLongPressRule.kt diff --git a/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/CatchFormDesignExceptionsTest.kt b/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/CatchFormDesignExceptionsTest.kt index 5b29faa3645..1c1ea8fc6b5 100644 --- a/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/CatchFormDesignExceptionsTest.kt +++ b/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/CatchFormDesignExceptionsTest.kt @@ -9,6 +9,7 @@ import org.odk.collect.android.support.pages.FormEntryPage import org.odk.collect.android.support.pages.MainMenuPage import org.odk.collect.android.support.pages.OkDialog import org.odk.collect.android.support.rules.CollectTestRule +import org.odk.collect.android.support.rules.EnableQuestionWidgetLongPressRule import org.odk.collect.android.support.rules.TestRuleChain @RunWith(AndroidJUnit4::class) @@ -17,7 +18,9 @@ class CatchFormDesignExceptionsTest { private val rule = CollectTestRule() @get:Rule - val ruleChain: RuleChain = TestRuleChain.chain().around(rule) + val ruleChain: RuleChain = TestRuleChain.chain() + .around(EnableQuestionWidgetLongPressRule()) + .around(rule) @Test // https://github.com/getodk/collect/issues/4750 fun whenFormHasFatalErrors_explanationDialogShouldBeDisplayedAndSurviveActivityRecreationAndTheFormShouldBeClosedAfterClickingOK() { diff --git a/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/ContextMenuTest.java b/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/ContextMenuTest.java index 2aad9111a8e..f59e743755a 100644 --- a/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/ContextMenuTest.java +++ b/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/ContextMenuTest.java @@ -5,6 +5,7 @@ import org.junit.rules.RuleChain; import org.odk.collect.android.R; import org.odk.collect.android.support.rules.BlankFormTestRule; +import org.odk.collect.android.support.rules.EnableQuestionWidgetLongPressRule; import org.odk.collect.android.support.rules.TestRuleChain; public class ContextMenuTest { @@ -14,6 +15,7 @@ public class ContextMenuTest { @Rule public RuleChain copyFormChain = TestRuleChain.chain() + .around(new EnableQuestionWidgetLongPressRule()) .around(activityTestRule); @Test diff --git a/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/FieldListUpdateTest.kt b/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/FieldListUpdateTest.kt index f74646fda9a..5b810ed1d58 100644 --- a/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/FieldListUpdateTest.kt +++ b/collect_app/src/androidTest/java/org/odk/collect/android/feature/formentry/FieldListUpdateTest.kt @@ -16,6 +16,7 @@ import org.odk.collect.android.R import org.odk.collect.android.storage.StoragePathProvider import org.odk.collect.android.support.pages.FormEntryPage import org.odk.collect.android.support.pages.ProjectSettingsPage +import org.odk.collect.android.support.rules.EnableQuestionWidgetLongPressRule import org.odk.collect.android.support.rules.FormEntryActivityTestRule import org.odk.collect.android.support.rules.TestRuleChain.chain import org.odk.collect.androidtest.RecordedIntentsRule @@ -29,6 +30,7 @@ class FieldListUpdateTest { @get:Rule var copyFormChain: RuleChain = chain() .around(RecordedIntentsRule()) + .around(EnableQuestionWidgetLongPressRule()) .around(rule) @Test diff --git a/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/EnableQuestionWidgetLongPressRule.kt b/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/EnableQuestionWidgetLongPressRule.kt new file mode 100644 index 00000000000..485137538ad --- /dev/null +++ b/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/EnableQuestionWidgetLongPressRule.kt @@ -0,0 +1,14 @@ +package org.odk.collect.android.support.rules + +import org.junit.rules.ExternalResource +import org.odk.collect.android.widgets.QuestionWidget + +class EnableQuestionWidgetLongPressRule : ExternalResource() { + override fun before() { + QuestionWidget.longPressClear = true + } + + override fun after() { + QuestionWidget.longPressClear = false + } +} \ No newline at end of file diff --git a/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/ResetStateRule.kt b/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/ResetStateRule.kt index 9ddb74c28fe..899fe62f36a 100644 --- a/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/ResetStateRule.kt +++ b/collect_app/src/androidTest/java/org/odk/collect/android/support/rules/ResetStateRule.kt @@ -10,6 +10,7 @@ import org.odk.collect.android.injection.config.AppDependencyComponent import org.odk.collect.android.injection.config.AppDependencyModule import org.odk.collect.android.support.CollectHelpers import org.odk.collect.android.views.DecoratedBarcodeView +import org.odk.collect.android.widgets.QuestionWidget import org.odk.collect.androidshared.ui.SnackbarUtils import org.odk.collect.androidshared.ui.ToastUtils import org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard @@ -36,6 +37,7 @@ private class ResetStateStatement( private fun setTestState() { MultiClickGuard.test = true DecoratedBarcodeView.test = true + QuestionWidget.longPressClear = false ToastUtils.alertStore.enabled = true SnackbarUtils.alertStore.enabled = true BottomSheetBehavior.DRAGGING_ENABLED = false diff --git a/collect_app/src/main/java/org/odk/collect/android/widgets/QuestionWidget.java b/collect_app/src/main/java/org/odk/collect/android/widgets/QuestionWidget.java index c42846ee581..64a7425f246 100644 --- a/collect_app/src/main/java/org/odk/collect/android/widgets/QuestionWidget.java +++ b/collect_app/src/main/java/org/odk/collect/android/widgets/QuestionWidget.java @@ -68,6 +68,8 @@ public abstract class QuestionWidget extends FrameLayout implements Widget { + public static Boolean longPressClear = true; + private final FormEntryPrompt formEntryPrompt; private final AudioVideoImageTextLabel audioVideoImageTextLabel; protected final QuestionDetails questionDetails; @@ -133,7 +135,7 @@ public QuestionWidget(Context context, Dependencies dependencies, QuestionDetail errorLayout = findViewById(R.id.error_message_container); setupGuidanceTextAndLayout(helpTextLayout.findViewById(R.id.guidance_text_view), formEntryPrompt); - if (context instanceof Activity && !questionDetails.isReadOnly()) { + if (longPressClear && context instanceof Activity && !questionDetails.isReadOnly()) { registerToClearAnswerOnLongPress((Activity) context, this); } From 55f45f33bb1766c2cb2cb3a69877875fb2eec6ad Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Tue, 2 Jun 2026 12:43:00 +0100 Subject: [PATCH 2/2] Make sure map clicks fail if a listener hasn't been set yet --- .../org/odk/collect/android/support/FakeClickableMapFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collect_app/src/androidTest/java/org/odk/collect/android/support/FakeClickableMapFragment.kt b/collect_app/src/androidTest/java/org/odk/collect/android/support/FakeClickableMapFragment.kt index b0f5e0a34c0..e96f3243d9c 100644 --- a/collect_app/src/androidTest/java/org/odk/collect/android/support/FakeClickableMapFragment.kt +++ b/collect_app/src/androidTest/java/org/odk/collect/android/support/FakeClickableMapFragment.kt @@ -112,7 +112,7 @@ class FakeClickableMapFragment : Fragment(), MapFragment { var done = false Handler(Looper.getMainLooper()).post { - featureClickListener?.onFeature(featureId) + featureClickListener!!.onFeature(featureId) done = true }