Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

X-FHIR-Query support for variable extension #2076

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
1960713
Add X-FHIR-Query support for variable extension
FikriMilano Jul 17, 2023
b7cd327
Add unit tests
FikriMilano Jul 17, 2023
2c6edf4
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Jul 17, 2023
a132746
Fix dynamic answerExpression based on #2066
FikriMilano Jul 18, 2023
6c6ea81
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Jul 18, 2023
628ebe7
Address review
FikriMilano Jul 19, 2023
648ef72
Makes sure initial value got emitted to the questionnaireStateFlow
FikriMilano Jul 20, 2023
9d33869
Notify to not delay the update of UI
FikriMilano Aug 8, 2023
e10c8c8
WIP
FikriMilano Aug 14, 2023
3b2448e
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Aug 24, 2023
adb82de
Adjust code after major merge conflict
FikriMilano Aug 24, 2023
919e7c1
spotlessApply
FikriMilano Aug 24, 2023
bef102a
Fix test
FikriMilano Aug 24, 2023
62b4653
Fix test
FikriMilano Aug 24, 2023
aeb3186
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Sep 15, 2023
51635e2
Integrate suspend functions
FikriMilano Sep 15, 2023
c85a83a
spotlessApply
FikriMilano Sep 15, 2023
7f86476
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Sep 15, 2023
0432ffa
Add missing xFhirQueryResolver param
FikriMilano Sep 16, 2023
c3b01f6
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Sep 16, 2023
02cab42
Address review
FikriMilano Oct 12, 2023
ad986f8
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Oct 15, 2023
3b62f41
Address review and refactor to use suspend function
FikriMilano Oct 16, 2023
784e2bf
Run suspend for Barcode
FikriMilano Oct 16, 2023
2525cd1
Address review
FikriMilano Nov 23, 2023
a277d01
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Nov 23, 2023
d6939d6
Remove hasMissingParamValue
FikriMilano Dec 3, 2023
c6e3cb6
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Dec 3, 2023
830f7d5
Fix test
FikriMilano Dec 3, 2023
425add0
Update QuestionnaireViewItemTest
FikriMilano Feb 25, 2024
a49f27e
Use runTest in QuestionnaireUiEspressoTest
FikriMilano Feb 25, 2024
6e506fb
Merge branch 'master' of github.com:google/android-fhir into 2075-x-f…
FikriMilano Feb 25, 2024
7b0bda3
Add missing import to access child of ChipGroup
FikriMilano Feb 25, 2024
d611c93
spotlessApply
FikriMilano Feb 25, 2024
5d49131
Fix test
FikriMilano Feb 26, 2024
acfc230
Add missing coroutine launch
FikriMilano Feb 26, 2024
fe8785e
spotlessApply
FikriMilano Feb 26, 2024
4cb2321
Merge branch 'master' into 2075-x-fhir-query-support-for-variable
FikriMilano Feb 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,13 @@ class DemoQuestionnaireFragment : Fragment() {
}

private fun onSubmitQuestionnaireClick() {
val questionnaireFragment =
childFragmentManager.findFragmentByTag(QUESTIONNAIRE_FRAGMENT_TAG) as QuestionnaireFragment
launchQuestionnaireResponseFragment(
viewModel.getQuestionnaireResponseJson(questionnaireFragment.getQuestionnaireResponse()),
)
lifecycleScope.launch {
val questionnaireFragment =
childFragmentManager.findFragmentByTag(QUESTIONNAIRE_FRAGMENT_TAG) as QuestionnaireFragment
launchQuestionnaireResponseFragment(
viewModel.getQuestionnaireResponseJson(questionnaireFragment.getQuestionnaireResponse()),
)
}
}

private fun launchQuestionnaireResponseFragment(response: String) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2022-2023 Google LLC
* Copyright 2022-2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -19,13 +19,15 @@ package com.google.android.fhir.datacapture.contrib.views.barcode
import android.graphics.Typeface
import android.view.View
import android.widget.TextView
import androidx.lifecycle.lifecycleScope
import com.google.android.fhir.datacapture.contrib.views.barcode.mlkit.md.LiveBarcodeScanningFragment
import com.google.android.fhir.datacapture.extensions.localizedPrefixSpanned
import com.google.android.fhir.datacapture.extensions.localizedTextSpanned
import com.google.android.fhir.datacapture.extensions.tryUnwrapContext
import com.google.android.fhir.datacapture.views.QuestionnaireViewItem
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolderDelegate
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolderFactory
import kotlinx.coroutines.launch
import org.hl7.fhir.r4.model.QuestionnaireResponse
import org.hl7.fhir.r4.model.StringType

Expand Down Expand Up @@ -67,13 +69,15 @@ object BarCodeReaderViewHolderFactory :
}
}

if (answer == null) {
questionnaireViewItem.clearAnswer()
} else {
questionnaireViewItem.setAnswer(answer)
}
context.lifecycleScope.launch {
if (answer == null) {
questionnaireViewItem.clearAnswer()
} else {
questionnaireViewItem.setAnswer(answer)
}

setInitial(questionnaireViewItem.answers.singleOrNull(), reScanView)
setInitial(questionnaireViewItem.answers.singleOrNull(), reScanView)
}
}
LiveBarcodeScanningFragment()
.show(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.google.android.fhir.datacapture.contrib.views.locationwidget

import android.view.View
import androidx.lifecycle.lifecycleScope
import com.google.android.fhir.datacapture.extensions.getRequiredOrOptionalText
import com.google.android.fhir.datacapture.extensions.getValidationErrorMessage
import com.google.android.fhir.datacapture.extensions.localizedFlyoverSpanned
Expand All @@ -28,6 +29,7 @@ import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemView
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolderFactory
import com.google.android.material.textfield.MaterialAutoCompleteTextView
import com.google.android.material.textfield.TextInputLayout
import kotlinx.coroutines.launch
import org.hl7.fhir.r4.model.DecimalType
import org.hl7.fhir.r4.model.Questionnaire
import org.hl7.fhir.r4.model.QuestionnaireResponse
Expand Down Expand Up @@ -67,11 +69,13 @@ object LocationGpsCoordinateViewHolderFactory :
) { _, bundleResult ->
val latitude =
bundleResult.getDouble(CurrentLocationDialogFragment.LATITUDE_REQUEST_RESULT_KEY)
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = DecimalType(latitude)
},
)
lifecycleScope.launch {
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = DecimalType(latitude)
},
)
}
}
}
GPS_COORDINATE_EXTENSION_VALUE_LONGITUDE -> {
Expand All @@ -81,11 +85,13 @@ object LocationGpsCoordinateViewHolderFactory :
) { _, bundleResult ->
val longitude =
bundleResult.getDouble(CurrentLocationDialogFragment.LONGITUDE_REQUEST_RESULT_KEY)
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = DecimalType(longitude)
},
)
lifecycleScope.launch {
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = DecimalType(longitude)
},
)
}
}
}
GPS_COORDINATE_EXTENSION_VALUE_ALTITUDE -> {
Expand All @@ -95,11 +101,13 @@ object LocationGpsCoordinateViewHolderFactory :
) { _, bundleResult ->
val altitude =
bundleResult.getDouble(CurrentLocationDialogFragment.ALTITUDE_REQUEST_RESULT_KEY)
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = DecimalType(altitude)
},
)
lifecycleScope.launch {
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = DecimalType(altitude)
},
)
}
}
}
}
Expand Down
1 change: 1 addition & 0 deletions datacapture/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ dependencies {
androidTestImplementation(Dependencies.AndroidxTest.core)
androidTestImplementation(Dependencies.AndroidxTest.extJunit)
androidTestImplementation(Dependencies.AndroidxTest.extJunitKtx)
androidTestImplementation(Dependencies.Kotlin.kotlinCoroutinesTest)
androidTestImplementation(Dependencies.AndroidxTest.rules)
androidTestImplementation(Dependencies.AndroidxTest.runner)
androidTestImplementation(Dependencies.junit)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2023 Google LLC
* Copyright 2023-2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -16,15 +16,17 @@

package com.google.android.fhir.datacapture.contrib.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import androidx.appcompat.view.ContextThemeWrapper
import androidx.test.annotation.UiThreadTest
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.google.android.fhir.datacapture.QuestionnaireEditAdapter
import com.google.android.fhir.datacapture.QuestionnaireViewHolderType
import com.google.android.fhir.datacapture.R
import com.google.android.fhir.datacapture.test.TestActivity
import com.google.android.fhir.datacapture.validation.Invalid
import com.google.android.fhir.datacapture.validation.NotValidated
import com.google.android.fhir.datacapture.views.QuestionnaireViewItem
Expand All @@ -38,25 +40,27 @@ import org.hl7.fhir.r4.model.QuestionnaireResponse
import org.hl7.fhir.r4.model.StringType
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class PhoneNumberViewHolderFactoryInstrumentedTest {
private lateinit var context: ContextThemeWrapper

@Rule
@JvmField
var activityScenarioRule: ActivityScenarioRule<TestActivity> =
ActivityScenarioRule(TestActivity::class.java)

private lateinit var parent: FrameLayout
private lateinit var viewHolder: QuestionnaireItemViewHolder
private lateinit var questionnaireEditAdapter: QuestionnaireEditAdapter

@Before
fun setUp() {
context =
ContextThemeWrapper(
InstrumentationRegistry.getInstrumentation().targetContext,
com.google.android.material.R.style.Theme_Material3_DayNight,
)
parent = FrameLayout(context)
activityScenarioRule.scenario.onActivity { activity -> parent = FrameLayout(activity) }
viewHolder = PhoneNumberViewHolderFactory.create(parent)
setTestLayout(viewHolder.itemView)
questionnaireEditAdapter = QuestionnaireEditAdapter()
}

Expand All @@ -75,6 +79,7 @@ class PhoneNumberViewHolderFactoryInstrumentedTest {
}

@Test
@UiThreadTest
fun shouldSetTextViewText() {
viewHolder.bind(
QuestionnaireViewItem(
Expand Down Expand Up @@ -253,4 +258,10 @@ class PhoneNumberViewHolderFactoryInstrumentedTest {
)
.isFalse()
}

/** Method to set content view for test activity */
private fun setTestLayout(view: View) {
activityScenarioRule.scenario.onActivity { activity -> activity.setContentView(view) }
InstrumentationRegistry.getInstrumentation().waitForIdleSync()
}
}
Loading
Loading