Skip to content

Commit 155aabc

Browse files
committed
Migrate AttachmentViewHolderFactory to compose (wip)
1 parent ab0e1e6 commit 155aabc

File tree

6 files changed

+940
-46
lines changed

6 files changed

+940
-46
lines changed

datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/AttachmentViewHolderFactoryEspressoTest.kt

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023 Google LLC
2+
* Copyright 2023-2025 Google LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import android.view.View
2121
import android.widget.Button
2222
import android.widget.FrameLayout
2323
import android.widget.TextView
24+
import androidx.compose.ui.test.junit4.createEmptyComposeRule
2425
import androidx.constraintlayout.widget.ConstraintLayout
2526
import androidx.test.ext.junit.rules.ActivityScenarioRule
2627
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -44,19 +45,22 @@ import org.junit.runner.RunWith
4445
@RunWith(AndroidJUnit4::class)
4546
class AttachmentViewHolderFactoryEspressoTest {
4647

47-
@Rule
48-
@JvmField
48+
@get:Rule
4949
var activityScenarioRule: ActivityScenarioRule<TestActivity> =
5050
ActivityScenarioRule(TestActivity::class.java)
5151

52-
private lateinit var parent: FrameLayout
52+
@get:Rule val composeTestRule = createEmptyComposeRule()
53+
5354
private lateinit var viewHolder: QuestionnaireItemViewHolder
5455

5556
@Before
5657
fun setup() {
57-
activityScenarioRule.getScenario().onActivity { activity -> parent = FrameLayout(activity) }
58-
viewHolder = AttachmentViewHolderFactory.create(parent)
59-
setTestLayout(viewHolder.itemView)
58+
activityScenarioRule.scenario.onActivity { activity ->
59+
viewHolder = AttachmentViewHolderFactory.create(FrameLayout(activity))
60+
activity.setContentView(viewHolder.itemView)
61+
}
62+
63+
InstrumentationRegistry.getInstrumentation().waitForIdleSync()
6064
}
6165

6266
@Test
@@ -74,7 +78,7 @@ class AttachmentViewHolderFactoryEspressoTest {
7478
answersChangedCallback = { _, _, _, _ -> },
7579
)
7680

77-
runOnUI { viewHolder.bind(questionnaireItemView) }
81+
viewHolder.bind(questionnaireItemView)
7882

7983
assertThat(viewHolder.itemView.findViewById<Button>(R.id.take_photo).visibility)
8084
.isEqualTo(View.VISIBLE)
@@ -83,7 +87,7 @@ class AttachmentViewHolderFactoryEspressoTest {
8387
.isEqualTo(View.VISIBLE)
8488

8589
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_photo).text)
86-
.isEqualTo(parent.context.getString(R.string.upload_photo))
90+
.isEqualTo(viewHolder.itemView.context.getString(R.string.upload_photo))
8791
}
8892

8993
@Test
@@ -101,13 +105,13 @@ class AttachmentViewHolderFactoryEspressoTest {
101105
answersChangedCallback = { _, _, _, _ -> },
102106
)
103107

104-
runOnUI { viewHolder.bind(questionnaireItemView) }
108+
viewHolder.bind(questionnaireItemView)
105109

106110
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_audio).visibility)
107111
.isEqualTo(View.VISIBLE)
108112

109113
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_audio).text)
110-
.isEqualTo(parent.context.getString(R.string.upload_audio))
114+
.isEqualTo(viewHolder.itemView.context.getString(R.string.upload_audio))
111115
}
112116

113117
@Test
@@ -125,13 +129,13 @@ class AttachmentViewHolderFactoryEspressoTest {
125129
answersChangedCallback = { _, _, _, _ -> },
126130
)
127131

128-
runOnUI { viewHolder.bind(questionnaireItemView) }
132+
viewHolder.bind(questionnaireItemView)
129133

130134
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_video).visibility)
131135
.isEqualTo(View.VISIBLE)
132136

133137
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_video).text)
134-
.isEqualTo(parent.context.getString(R.string.upload_video))
138+
.isEqualTo(viewHolder.itemView.context.getString(R.string.upload_video))
135139
}
136140

137141
@Test
@@ -149,13 +153,13 @@ class AttachmentViewHolderFactoryEspressoTest {
149153
answersChangedCallback = { _, _, _, _ -> },
150154
)
151155

152-
runOnUI { viewHolder.bind(questionnaireItemView) }
156+
viewHolder.bind(questionnaireItemView)
153157

154158
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_document).visibility)
155159
.isEqualTo(View.VISIBLE)
156160

157161
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_document).text)
158-
.isEqualTo(parent.context.getString(R.string.upload_document))
162+
.isEqualTo(viewHolder.itemView.context.getString(R.string.upload_document))
159163
}
160164

161165
@Test
@@ -177,7 +181,7 @@ class AttachmentViewHolderFactoryEspressoTest {
177181
answersChangedCallback = { _, _, _, _ -> },
178182
)
179183

180-
runOnUI { viewHolder.bind(questionnaireItemView) }
184+
viewHolder.bind(questionnaireItemView)
181185

182186
assertThat(viewHolder.itemView.findViewById<Button>(R.id.take_photo).visibility)
183187
.isEqualTo(View.VISIBLE)
@@ -186,7 +190,7 @@ class AttachmentViewHolderFactoryEspressoTest {
186190
.isEqualTo(View.VISIBLE)
187191

188192
assertThat(viewHolder.itemView.findViewById<Button>(R.id.upload_file).text)
189-
.isEqualTo(parent.context.getString(R.string.upload_file))
193+
.isEqualTo(viewHolder.itemView.context.getString(R.string.upload_file))
190194
}
191195

192196
@Test
@@ -219,7 +223,7 @@ class AttachmentViewHolderFactoryEspressoTest {
219223
answersChangedCallback = { _, _, _, _ -> },
220224
)
221225

222-
runOnUI { viewHolder.bind(questionnaireItemView) }
226+
viewHolder.bind(questionnaireItemView)
223227

224228
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.photo_preview).visibility)
225229
.isEqualTo(View.VISIBLE)
@@ -257,7 +261,7 @@ class AttachmentViewHolderFactoryEspressoTest {
257261
answersChangedCallback = { _, _, _, _ -> },
258262
)
259263

260-
runOnUI { viewHolder.bind(questionnaireItemView) }
264+
viewHolder.bind(questionnaireItemView)
261265

262266
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.file_preview).visibility)
263267
.isEqualTo(View.VISIBLE)
@@ -296,7 +300,7 @@ class AttachmentViewHolderFactoryEspressoTest {
296300
answersChangedCallback = { _, _, _, _ -> },
297301
)
298302

299-
runOnUI { viewHolder.bind(questionnaireItemView) }
303+
viewHolder.bind(questionnaireItemView)
300304

301305
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.file_preview).visibility)
302306
.isEqualTo(View.VISIBLE)
@@ -335,7 +339,7 @@ class AttachmentViewHolderFactoryEspressoTest {
335339
answersChangedCallback = { _, _, _, _ -> },
336340
)
337341

338-
runOnUI { viewHolder.bind(questionnaireItemView) }
342+
viewHolder.bind(questionnaireItemView)
339343

340344
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.file_preview).visibility)
341345
.isEqualTo(View.VISIBLE)
@@ -363,7 +367,7 @@ class AttachmentViewHolderFactoryEspressoTest {
363367
answersChangedCallback = { _, _, _, _ -> },
364368
)
365369

366-
runOnUI { viewHolder.bind(questionnaireItemView) }
370+
viewHolder.bind(questionnaireItemView)
367371

368372
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.photo_preview).visibility)
369373
.isEqualTo(View.GONE)
@@ -406,7 +410,7 @@ class AttachmentViewHolderFactoryEspressoTest {
406410
answersChangedCallback = { _, _, _, _ -> },
407411
)
408412

409-
runOnUI { viewHolder.bind(questionnaireItem) }
413+
viewHolder.bind(questionnaireItem)
410414

411415
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.photo_preview).visibility)
412416
.isEqualTo(View.VISIBLE)
@@ -428,20 +432,9 @@ class AttachmentViewHolderFactoryEspressoTest {
428432
answersChangedCallback = { _, _, _, _ -> },
429433
)
430434

431-
runOnUI { viewHolder.bind(questionnaireItemWithNullAnswer) }
435+
viewHolder.bind(questionnaireItemWithNullAnswer)
432436

433437
assertThat(viewHolder.itemView.findViewById<ConstraintLayout>(R.id.photo_preview).visibility)
434438
.isEqualTo(View.GONE)
435439
}
436-
437-
/** Method to run code snippet on UI/main thread */
438-
private fun runOnUI(action: () -> Unit) {
439-
activityScenarioRule.scenario.onActivity { activity -> action() }
440-
}
441-
442-
/** Method to set content view for test activity */
443-
private fun setTestLayout(view: View) {
444-
activityScenarioRule.scenario.onActivity { activity -> activity.setContentView(view) }
445-
InstrumentationRegistry.getInstrumentation().waitForIdleSync()
446-
}
447440
}

datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireItemComponents.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ internal val QuestionnaireItemComponent.maxSizeInMiBs: BigDecimal?
579579
get() = maxSizeInBytes?.div(BYTES_PER_MIB)
580580

581581
/** The default maximum size of an attachment is 1 Mebibytes. */
582-
private val DEFAULT_SIZE = BigDecimal(1048576)
582+
internal val DEFAULT_SIZE = BigDecimal(1048576)
583583

584584
/** Returns true if given size is above maximum size allowed. */
585585
internal fun QuestionnaireItemComponent.isGivenSizeOverLimit(

datacapture/src/main/java/com/google/android/fhir/datacapture/views/attachment/CameraLauncherFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022-2023 Google LLC
2+
* Copyright 2022-2025 Google LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

0 commit comments

Comments
 (0)