Skip to content

Commit

Permalink
Merge branch 'master' into fix-sync-state-excepiton
Browse files Browse the repository at this point in the history
  • Loading branch information
f-odhiambo authored Mar 17, 2023
2 parents 59852af + e0c92b2 commit a0326af
Show file tree
Hide file tree
Showing 111 changed files with 3,950 additions and 2,988 deletions.
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@ object Dependencies {

object Retrofit {
const val coreRetrofit = "com.squareup.retrofit2:retrofit:${Versions.retrofit}"
const val gsonConverter = "com.squareup.retrofit2:converter-gson:${Versions.retrofit}"
}

object Room {
Expand Down Expand Up @@ -180,6 +179,7 @@ object Dependencies {
const val guava = "com.google.guava:guava:${Versions.guava}"
const val httpInterceptor = "com.squareup.okhttp3:logging-interceptor:${Versions.http}"
const val http = "com.squareup.okhttp3:okhttp:${Versions.http}"
const val mockWebServer = "com.squareup.okhttp3:mockwebserver:${Versions.http}"

const val jsonToolsPatch = "com.github.java-json-tools:json-patch:${Versions.jsonToolsPatch}"
const val kotlinPoet = "com.squareup:kotlinpoet:${Versions.kotlinPoet}"
Expand Down
12 changes: 6 additions & 6 deletions codelabs/datacapture/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ plugins {
}

android {
compileSdk = Sdk.compileSdk
compileSdk = 31

defaultConfig {
applicationId = "com.google.android.fhir.codelabs.datacapture"
minSdk = Sdk.minSdk
targetSdk = Sdk.targetSdk
minSdk = 24
targetSdk = 31
versionCode = 1
versionName = "1.0"

Expand All @@ -23,11 +23,11 @@ android {
}
}
compileOptions {
sourceCompatibility = Java.sourceCompatibility
targetCompatibility = Java.targetCompatibility
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = Java.kotlinJvmTarget.toString()
jvmTarget = "1.8"
}
}

Expand Down
2 changes: 1 addition & 1 deletion codelabs/datacapture/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.foodallergy"
package="com.google.codelab.sdclibrary"
>

<application
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2021 Google LLC
* Copyright 2022 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 @@ -20,7 +20,6 @@ import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import com.example.foodallergy.R

class MainActivity : AppCompatActivity() {

Expand All @@ -30,16 +29,14 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// 5.2 Replace with code from the codelab to configure a questionnaire fragment.

// 5.3 Replace with code from the codelab to add the questionnaire to the FragmentContainerView.
// 4.2 Replace with code from the codelab to add a questionnaire fragment.
}

private fun submitQuestionnaire() {

// 6 Replace with code from the codelab to get a questionnaire response.
// 5 Replace with code from the codelab to get a questionnaire response.

// 7 Replace with code from the codelab to extract FHIR resources from QuestionnaireResponse.
// 6 Replace with code from the codelab to extract FHIR resources from QuestionnaireResponse.
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import android.graphics.Typeface
import android.view.View
import android.widget.TextView
import com.google.android.fhir.datacapture.contrib.views.barcode.mlkit.md.LiveBarcodeScanningFragment
import com.google.android.fhir.datacapture.localizedPrefixSpanned
import com.google.android.fhir.datacapture.localizedTextSpanned
import com.google.android.fhir.datacapture.tryUnwrapContext
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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"resourceType": "Questionnaire",
"id": "questionnaire.enabled.display",
"name": "Questionnaire Enabled Display",
"title": "Questionnaire Enabled Display",
"status": "active",
"item": [
{
"linkId": "1",
"text": "Questionnaire Text",
"type": "boolean",
"item": [
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-displayCategory",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-display-category",
"code": "instructions"
}
]
}
},
{
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%resource.repeat(item).where(linkId='1' and answer.empty().not()).select(answer.value) = false"
}
}
],
"linkId": "1.1",
"text": "Text when no is selected",
"type": "display"
},
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-displayCategory",
"valueCodeableConcept": {
"coding": [
{
"system": "http://hl7.org/fhir/questionnaire-display-category",
"code": "instructions"
}
]
}
},
{
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%resource.repeat(item).where(linkId='1' and answer.empty().not()).select(answer.value) = true"
}
}
],
"linkId": "1.2",
"text": "Text when yes is selected",
"type": "display"
}
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@

package com.google.android.fhir.datacapture

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import androidx.fragment.app.commitNow
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
Expand Down Expand Up @@ -361,6 +363,41 @@ class QuestionnaireUiEspressoTest {
assertThat(exception.message).isEqualTo("minValue cannot be greater than maxValue")
}

@Test
fun displayItems_shouldGetEnabled_withAnswerChoice() {
buildFragmentFromQuestionnaire("/questionnaire_with_enabled_display_items.json")

onView(withId(R.id.hint)).check { view, _ ->
val hintVisibility = (view as TextView).visibility
assertThat(hintVisibility).isEqualTo(View.GONE)
}

onView(withId(R.id.yes_radio_button)).perform(ViewActions.click())

onView(withId(R.id.hint)).check { view, _ ->
val hintVisibility = (view as TextView).visibility
val hintText = view.text.toString()
assertThat(hintVisibility).isEqualTo(View.VISIBLE)
assertThat(hintText).isEqualTo("Text when yes is selected")
}

onView(withId(R.id.no_radio_button)).perform(ViewActions.click())

onView(withId(R.id.hint)).check { view, _ ->
val hintVisibility = (view as TextView).visibility
val hintText = view.text.toString()
assertThat(hintVisibility).isEqualTo(View.VISIBLE)
assertThat(hintText).isEqualTo("Text when no is selected")
}

onView(withId(R.id.no_radio_button)).perform(ViewActions.click())

onView(withId(R.id.hint)).check { view, _ ->
val hintVisibility = (view as TextView).visibility
assertThat(hintVisibility).isEqualTo(View.GONE)
}
}

private fun buildFragmentFromQuestionnaire(fileName: String, isReviewMode: Boolean = false) {
val questionnaireJsonString = readFileFromAssets(fileName)
val questionnaireFragment =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.platform.app.InstrumentationRegistry
import com.google.android.fhir.datacapture.EXTENSION_ITEM_ANSWER_MEDIA
import com.google.android.fhir.datacapture.R
import com.google.android.fhir.datacapture.TestActivity
import com.google.android.fhir.datacapture.extensions.EXTENSION_ITEM_ANSWER_MEDIA
import com.google.android.fhir.datacapture.utilities.showDropDown
import com.google.android.fhir.datacapture.validation.NotValidated
import com.google.android.fhir.datacapture.views.factories.DropDownViewHolderFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import android.widget.ImageView
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.EXTENSION_ITEM_MEDIA
import com.google.android.fhir.datacapture.R
import com.google.android.fhir.datacapture.TestActivity
import com.google.android.fhir.datacapture.extensions.EXTENSION_ITEM_MEDIA
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
import org.hl7.fhir.r4.model.Attachment
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.platform.app.InstrumentationRegistry
import com.google.android.fhir.datacapture.DisplayItemControlType
import com.google.android.fhir.datacapture.EXTENSION_ITEM_CONTROL_SYSTEM
import com.google.android.fhir.datacapture.EXTENSION_ITEM_CONTROL_URL
import com.google.android.fhir.datacapture.ItemControlTypes
import com.google.android.fhir.datacapture.R
import com.google.android.fhir.datacapture.TestActivity
import com.google.android.fhir.datacapture.extensions.DisplayItemControlType
import com.google.android.fhir.datacapture.extensions.EXTENSION_ITEM_CONTROL_SYSTEM
import com.google.android.fhir.datacapture.extensions.EXTENSION_ITEM_CONTROL_URL
import com.google.android.fhir.datacapture.extensions.ItemControlTypes
import com.google.android.fhir.datacapture.utilities.assertQuestionnaireResponseAtIndex
import com.google.android.fhir.datacapture.utilities.clickOnText
import com.google.android.fhir.datacapture.utilities.clickOnTextInDialog
Expand Down Expand Up @@ -200,31 +200,32 @@ class QuestionnaireItemDialogMultiSelectViewHolderFactoryEspressoTest {

@Test
fun bindView_setHintText() {
val hintItem =
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "1.1"
text = "Select code"
type = Questionnaire.QuestionnaireItemType.DISPLAY
addExtension(
Extension()
.setUrl(EXTENSION_ITEM_CONTROL_URL)
.setValue(
CodeableConcept()
.addCoding(
Coding()
.setCode(DisplayItemControlType.FLYOVER.extensionCode)
.setSystem(EXTENSION_ITEM_CONTROL_SYSTEM)
)
)
)
}
val questionnaireViewItem =
QuestionnaireViewItem(
answerOptions(false, "Coding 1", "Coding 2", "Coding 3", "Coding 4", "Coding 5")
.addItem(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "1.1"
text = "Select code"
type = Questionnaire.QuestionnaireItemType.DISPLAY
addExtension(
Extension()
.setUrl(EXTENSION_ITEM_CONTROL_URL)
.setValue(
CodeableConcept()
.addCoding(
Coding()
.setCode(DisplayItemControlType.FLYOVER.extensionCode)
.setSystem(EXTENSION_ITEM_CONTROL_SYSTEM)
)
)
)
}
),
.addItem(hintItem),
responseOptions(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _, _ -> },
enabledDisplayItems = listOf(hintItem)
)
runOnUI { viewHolder.bind(questionnaireViewItem) }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.google.android.fhir.datacapture.contrib.views.PhoneNumberViewHolderFactory
import com.google.android.fhir.datacapture.extensions.itemControl
import com.google.android.fhir.datacapture.views.QuestionnaireViewItem
import com.google.android.fhir.datacapture.views.factories.AttachmentViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.AutoCompleteViewHolderFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,15 @@ class QuestionnaireFragment : Fragment() {

val submitButton = requireView().findViewById<Button>(R.id.submit_questionnaire)

val reviewModeEditButton = view.findViewById<View>(R.id.review_mode_edit_button)
reviewModeEditButton.setOnClickListener { viewModel.setReviewMode(false) }
val reviewModeEditButton =
view.findViewById<View>(R.id.review_mode_edit_button).apply {
setOnClickListener { viewModel.setReviewMode(false) }
}

val reviewModeButton = view.findViewById<View>(R.id.review_mode_button)
reviewModeButton.setOnClickListener { viewModel.setReviewMode(true) }
val reviewModeButton =
view.findViewById<View>(R.id.review_mode_button).apply {
setOnClickListener { viewModel.setReviewMode(true) }
}

questionnaireEditRecyclerView.adapter = questionnaireEditAdapter
val linearLayoutManager = LinearLayoutManager(view.context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import androidx.fragment.app.activityViewModels
import androidx.fragment.app.setFragmentResult
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.google.android.fhir.datacapture.extensions.flattened
import com.google.android.fhir.datacapture.extensions.localizedFlyoverSpanned
import com.google.android.fhir.datacapture.validation.Invalid
import com.google.android.fhir.datacapture.validation.ValidationResult
import com.google.android.material.dialog.MaterialAlertDialogBuilder
Expand Down
Loading

0 comments on commit a0326af

Please sign in to comment.