From 49fdf6c236f6cb55c52fd31e38eaea50599238db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=E2=89=A1ZRS?= <12814349+LZRS@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:33:20 +0300 Subject: [PATCH] Migrate AttachmentViewHolderFactory to compose --- ...AttachmentViewHolderFactoryEspressoTest.kt | 282 ++++-- .../MoreQuestionnaireItemComponents.kt | 2 +- .../attachment/CameraLauncherFragment.kt | 69 -- .../OpenDocumentLauncherFragment.kt | 43 - .../datacapture/views/compose/ErrorText.kt | 40 + .../factories/AttachmentViewHolderFactory.kt | 839 ++++++++++-------- .../res/layout/attachment_file_preview.xml | 86 -- .../res/layout/attachment_photo_preview.xml | 72 -- .../src/main/res/layout/attachment_view.xml | 162 ---- datacapture/src/main/res/values/strings.xml | 6 + 10 files changed, 701 insertions(+), 900 deletions(-) delete mode 100644 datacapture/src/main/java/com/google/android/fhir/datacapture/views/attachment/CameraLauncherFragment.kt delete mode 100644 datacapture/src/main/java/com/google/android/fhir/datacapture/views/attachment/OpenDocumentLauncherFragment.kt create mode 100644 datacapture/src/main/java/com/google/android/fhir/datacapture/views/compose/ErrorText.kt delete mode 100644 datacapture/src/main/res/layout/attachment_file_preview.xml delete mode 100644 datacapture/src/main/res/layout/attachment_photo_preview.xml delete mode 100644 datacapture/src/main/res/layout/attachment_view.xml diff --git a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/AttachmentViewHolderFactoryEspressoTest.kt b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/AttachmentViewHolderFactoryEspressoTest.kt index 07fbb2bc20..d9d4bf0877 100644 --- a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/AttachmentViewHolderFactoryEspressoTest.kt +++ b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/AttachmentViewHolderFactoryEspressoTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023 Google LLC + * Copyright 2023-2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,11 +17,15 @@ package com.google.android.fhir.datacapture.test.views import android.util.Base64 -import android.view.View -import android.widget.Button import android.widget.FrameLayout -import android.widget.TextView -import androidx.constraintlayout.widget.ConstraintLayout +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed +import androidx.compose.ui.test.assertTextEquals +import androidx.compose.ui.test.junit4.createEmptyComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry @@ -29,9 +33,11 @@ import com.google.android.fhir.datacapture.R import com.google.android.fhir.datacapture.test.TestActivity import com.google.android.fhir.datacapture.validation.NotValidated import com.google.android.fhir.datacapture.views.QuestionnaireViewItem +import com.google.android.fhir.datacapture.views.factories.ATTACHMENT_MEDIA_PREVIEW_TAG import com.google.android.fhir.datacapture.views.factories.AttachmentViewHolderFactory import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolder -import com.google.common.truth.Truth.assertThat +import com.google.android.fhir.datacapture.views.factories.TAKE_PHOTO_BUTTON_TAG +import com.google.android.fhir.datacapture.views.factories.UPLOAD_FILE_BUTTON_TAG import org.hl7.fhir.r4.model.Attachment import org.hl7.fhir.r4.model.CodeType import org.hl7.fhir.r4.model.Questionnaire @@ -44,19 +50,22 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class AttachmentViewHolderFactoryEspressoTest { - @Rule - @JvmField + @get:Rule var activityScenarioRule: ActivityScenarioRule = ActivityScenarioRule(TestActivity::class.java) - private lateinit var parent: FrameLayout + @get:Rule val composeTestRule = createEmptyComposeRule() + private lateinit var viewHolder: QuestionnaireItemViewHolder @Before fun setup() { - activityScenarioRule.getScenario().onActivity { activity -> parent = FrameLayout(activity) } - viewHolder = AttachmentViewHolderFactory.create(parent) - setTestLayout(viewHolder.itemView) + activityScenarioRule.scenario.onActivity { activity -> + viewHolder = AttachmentViewHolderFactory.create(FrameLayout(activity)) + activity.setContentView(viewHolder.itemView) + } + + InstrumentationRegistry.getInstrumentation().waitForIdleSync() } @Test @@ -74,16 +83,14 @@ class AttachmentViewHolderFactoryEspressoTest { answersChangedCallback = { _, _, _, _ -> }, ) - runOnUI { viewHolder.bind(questionnaireItemView) } - - assertThat(viewHolder.itemView.findViewById