From ec4a1f8aebbeed19fb1227dd193ef36ec0f198ca Mon Sep 17 00:00:00 2001 From: Lentumunai-Mark Date: Tue, 17 Sep 2024 16:36:31 +0300 Subject: [PATCH 1/5] Refactor load images tests for different views. Signed-off-by: Lentumunai-Mark --- .../util/extensions/ConfigExtensionsKtTest.kt | 83 ++++++++----------- 1 file changed, 36 insertions(+), 47 deletions(-) diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt index db2020c2ba..fc10d790ec 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt @@ -37,8 +37,12 @@ import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.withContext import org.hl7.fhir.r4.model.Binary import org.hl7.fhir.r4.model.ContactPoint import org.hl7.fhir.r4.model.ResourceType @@ -72,6 +76,7 @@ import org.smartregister.fhircore.engine.domain.model.ResourceConfig import org.smartregister.fhircore.engine.domain.model.ResourceData import org.smartregister.fhircore.engine.domain.model.ToolBarHomeNavigation import org.smartregister.fhircore.engine.domain.model.ViewType +import org.smartregister.fhircore.engine.util.DispatcherProvider import org.smartregister.fhircore.engine.util.extension.showToast import org.smartregister.fhircore.quest.R import org.smartregister.fhircore.quest.app.fakes.Faker @@ -80,6 +85,7 @@ import org.smartregister.fhircore.quest.navigation.NavigationArg import org.smartregister.fhircore.quest.robolectric.RobolectricTest import org.smartregister.fhircore.quest.ui.shared.QuestionnaireHandler import javax.inject.Inject +import kotlin.coroutines.CoroutineContext @HiltAndroidTest class ConfigExtensionsKtTest : RobolectricTest() { @@ -95,6 +101,8 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Inject lateinit var fhirEngine: FhirEngine + @Inject lateinit var dispatcherProvider: DispatcherProvider + private val navController = mockk(relaxUnitFun = true, relaxed = true) private val context = mockk(relaxUnitFun = true, relaxed = true) private val navigationMenuConfig by lazy { @@ -672,10 +680,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun decodeBinaryResourcesToBitmapOnNavigationMenuClientRegistersDoneCorrectly(): Unit = runBlocking { - defaultRepository.create(addResourceTags = true, binaryImage) val navigationMenuConfigs = sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } val decodedImageMap = mutableStateMapOf() - runBlocking { + withContext(dispatcherProvider.io()){ + defaultRepository.create(addResourceTags = true, binaryImage) navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, decodedImageMap = decodedImageMap, @@ -687,10 +695,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun decodeBinaryResourcesToBitmapOnOverflowMenuConfigDoneCorrectly(): Unit = runTest { - defaultRepository.create(addResourceTags = true, binaryImage) val navigationMenuConfigs = sequenceOf(overflowMenuItemConfig).mapNotNull { it.icon?.reference } val decodedImageMap = mutableStateMapOf() - runBlocking { + withContext(Dispatchers.IO){ + defaultRepository.create(addResourceTags = true, binaryImage) navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, decodedImageMap = decodedImageMap,) } @@ -700,9 +708,12 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun testImageBitmapUpdatedCorrectlyGivenProfileConfiguration(): Unit = runTest { - defaultRepository.create(addResourceTags = true, binaryImage) val decodedImageMap = mutableStateMapOf() - profileConfiguration.views.decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + withContext(Dispatchers.IO) { + fhirEngine.create(binaryImage) + profileConfiguration.views.decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + } + Assert.assertTrue(decodedImageMap.isNotEmpty()) Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) } @@ -710,9 +721,11 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun testImageBitmapUpdatedCorrectlyGivenCardViewProperties(): Unit = runTest { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties - defaultRepository.create(addResourceTags = true, binaryImage) val decodedImageMap = mutableStateMapOf() - listOf(cardViewProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + withContext(Dispatchers.IO){ + defaultRepository.create(addResourceTags = true, binaryImage) + listOf(cardViewProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + } Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) } @@ -720,9 +733,11 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun testImageBitmapUpdatedCorrectlyGivenListViewProperties(): Unit = runTest { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties - defaultRepository.create(addResourceTags = true, binaryImage) val decodedImageMap = mutableStateMapOf() - listOf(cardViewProperties.content[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + withContext(Dispatchers.IO){ + defaultRepository.create(addResourceTags = true, binaryImage) + listOf(cardViewProperties.content[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + } Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) } @@ -732,8 +747,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val listViewProperties = cardViewProperties.content[0] as ListProperties val decodedImageMap = mutableStateMapOf() - defaultRepository.create(addResourceTags = true, binaryImage) - listOf(listViewProperties.registerCard.views[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + withContext(Dispatchers.IO){ + defaultRepository.create(addResourceTags = true, binaryImage) + listOf(listViewProperties.registerCard.views[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + } Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) } @@ -743,9 +760,11 @@ class ConfigExtensionsKtTest : RobolectricTest() { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val listViewProperties = cardViewProperties.content[0] as ListProperties val columnProperties = listViewProperties.registerCard.views[0] as ColumnProperties - defaultRepository.create(addResourceTags = true, binaryImage) val decodedImageMap = mutableStateMapOf() - listOf(columnProperties.children[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + withContext(Dispatchers.IO){ + defaultRepository.create(addResourceTags = true, binaryImage) + listOf(columnProperties.children[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + } Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) } @@ -769,40 +788,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { ), ) val decodedImageMap = mutableStateMapOf() - listOf(rowProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + withContext(Dispatchers.IO){ + listOf(rowProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + } Assert.assertTrue(decodedImageMap.isEmpty()) Assert.assertTrue(!decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) } - - @Test(expected = Exception::class) - fun testExceptionCaughtOnDecodingBitmap() = runTest { - val cardViewProperties = profileConfiguration.views[0] as CardViewProperties - val listViewProperties = cardViewProperties.content[0] as ListProperties - val columnProperties = listViewProperties.registerCard.views[0] as ColumnProperties - val rowProperties = - (columnProperties.children[0] as RowProperties).copy( - children = - listOf( - ImageProperties( - imageConfig = - ImageConfig( - type = ICON_TYPE_REMOTE, - reference = "imageReference", - ), - ), - ), - ) - val decodedImageMap = mutableStateMapOf() - - coEvery { defaultRepository.loadResource(anyString()) } returns - Binary().apply { - this.id = "imageReference" - this.contentType = "image/jpeg" - this.data = "gibberish value".toByteArray() - } - - listOf(rowProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) - Assert.assertTrue(decodedImageMap.isEmpty()) - Assert.assertTrue(!decodedImageMap.containsKey("imageReference")) - } } From a8b210f844b99acd174756be3314f4c4708a8098 Mon Sep 17 00:00:00 2001 From: Lentumunai-Mark Date: Tue, 17 Sep 2024 17:07:23 +0300 Subject: [PATCH 2/5] Remove unutilized imports. Signed-off-by: Lentumunai-Mark --- .../fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt index fc10d790ec..76501d8854 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt @@ -32,25 +32,20 @@ import com.google.android.fhir.FhirEngine import com.google.android.fhir.datacapture.extensions.logicalId import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest -import io.mockk.coEvery import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify -import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.runTest import kotlinx.coroutines.withContext -import org.hl7.fhir.r4.model.Binary import org.hl7.fhir.r4.model.ContactPoint import org.hl7.fhir.r4.model.ResourceType import org.junit.Assert import org.junit.Before import org.junit.Rule import org.junit.Test -import org.mockito.ArgumentMatchers.anyString import org.smartregister.fhircore.engine.configuration.ConfigurationRegistry import org.smartregister.fhircore.engine.configuration.QuestionnaireConfig import org.smartregister.fhircore.engine.configuration.navigation.ICON_TYPE_REMOTE From 788ecc2e26fa7b4c623786ba3dafbde791056c23 Mon Sep 17 00:00:00 2001 From: Lentumunai-Mark Date: Tue, 17 Sep 2024 17:41:03 +0300 Subject: [PATCH 3/5] Run spotlessApply Signed-off-by: Elly Kitoto Signed-off-by: Lentumunai-Mark --- android/engine/build.gradle.kts | 4 +- .../configuration/ConfigurationRegistry.kt | 29 +- .../navigation/NavigationMenuConfig.kt | 1 - .../register/RegisterConfiguration.kt | 2 +- .../configuration/view/ButtonProperties.kt | 4 +- .../configuration/view/ViewProperties.kt | 3 +- .../view/ViewPropertiesSerializer.kt | 4 +- .../engine/data/local/DefaultRepository.kt | 318 +++++++++--------- .../data/local/register/RegisterRepository.kt | 30 +- .../data/remote/shared/TokenAuthenticator.kt | 4 +- .../fhircore/engine/di/NetworkModule.kt | 8 +- .../fhircore/engine/pdf/HtmlPopulator.kt | 4 +- .../engine/rulesengine/ConfigRulesExecutor.kt | 4 +- .../rulesengine/ResourceDataRulesExecutor.kt | 4 +- .../engine/rulesengine/RulesFactory.kt | 11 +- .../engine/task/FhirCarePlanGenerator.kt | 4 +- .../fhircore/engine/ui/base/AlertDialogue.kt | 4 +- .../fhircore/engine/ui/components/Pin.kt | 4 +- .../ui/components/register/RegisterFooter.kt | 1 - .../engine/ui/multiselect/MultiSelectView.kt | 4 +- .../util/extension/AndroidExtensions.kt | 6 +- .../util/extension/MeasureExtensions.kt | 3 +- .../util/extension/QuestionnaireExtension.kt | 4 +- .../util/extension/ReferenceExtension.kt | 3 +- .../util/extension/ResourceExtension.kt | 12 +- .../geowidget/screens/GeoWidgetViewModel.kt | 2 +- .../fhircore/quest/data/DataMigration.kt | 4 +- .../data/register/RegisterPagingSource.kt | 7 +- .../ui/appsetting/AppSettingViewModel.kt | 3 +- .../fhircore/quest/ui/login/LoginActivity.kt | 4 +- .../fhircore/quest/ui/main/AppMainActivity.kt | 4 +- .../quest/ui/main/AppMainViewModel.kt | 31 +- .../quest/ui/main/components/AppDrawer.kt | 8 +- .../ui/multiselect/MultiSelectViewModel.kt | 2 +- .../quest/ui/profile/ProfileScreen.kt | 4 +- .../quest/ui/profile/ProfileViewModel.kt | 4 +- .../components/ChangeManagingEntityView.kt | 8 +- .../questionnaire/QuestionnaireViewModel.kt | 8 +- .../quest/ui/register/RegisterFragment.kt | 2 +- .../quest/ui/register/RegisterScreen.kt | 9 +- .../quest/ui/register/RegisterViewModel.kt | 32 +- .../register/components/RegisterCardList.kt | 17 +- .../EditTextQrCodeItemViewHolderFactory.kt | 3 +- .../qrCode/EditTextQrCodeViewHolderFactory.kt | 4 +- .../ui/shared/components/ActionableButton.kt | 4 +- .../ui/shared/components/SyncStatusView.kt | 16 +- .../ui/shared/components/ViewRenderer.kt | 4 +- .../quest/util/extensions/ConfigExtensions.kt | 27 +- .../fhircore/quest/CqlContentTest.kt | 4 +- .../ui/register/RegisterViewModelTest.kt | 2 +- .../util/extensions/ConfigExtensionsKtTest.kt | 27 ++ 51 files changed, 426 insertions(+), 289 deletions(-) diff --git a/android/engine/build.gradle.kts b/android/engine/build.gradle.kts index eecbfb2b87..6616981e4a 100644 --- a/android/engine/build.gradle.kts +++ b/android/engine/build.gradle.kts @@ -176,9 +176,7 @@ dependencies { api(libs.timber) api(libs.converter.gson) api(libs.json.path) - api(libs.easy.rules.jexl) { - exclude(group = "commons-logging", module = "commons-logging") - } + api(libs.easy.rules.jexl) { exclude(group = "commons-logging", module = "commons-logging") } api(libs.data.capture) { isTransitive = true exclude(group = "ca.uhn.hapi.fhir") diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/ConfigurationRegistry.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/ConfigurationRegistry.kt index a7106e4bf0..82c126faf4 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/ConfigurationRegistry.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/ConfigurationRegistry.kt @@ -29,6 +29,15 @@ import com.google.android.fhir.get import com.google.android.fhir.knowledge.KnowledgeManager import com.google.android.fhir.sync.download.ResourceSearchParams import dagger.hilt.android.qualifiers.ApplicationContext +import java.io.File +import java.io.FileNotFoundException +import java.io.InputStreamReader +import java.net.UnknownHostException +import java.util.Locale +import java.util.PropertyResourceBundle +import java.util.ResourceBundle +import javax.inject.Inject +import javax.inject.Singleton import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json import okhttp3.RequestBody.Companion.toRequestBody @@ -71,15 +80,6 @@ import org.smartregister.fhircore.engine.util.extension.updateLastUpdated import org.smartregister.fhircore.engine.util.helper.LocalizationHelper import retrofit2.HttpException import timber.log.Timber -import java.io.File -import java.io.FileNotFoundException -import java.io.InputStreamReader -import java.net.UnknownHostException -import java.util.Locale -import java.util.PropertyResourceBundle -import java.util.ResourceBundle -import javax.inject.Inject -import javax.inject.Singleton @Singleton class ConfigurationRegistry @@ -378,14 +378,18 @@ constructor( context.assets.list(String.format(BASE_CONFIG_PATH, appId))?.onEach { if (!supportedFileExtensions.contains(it.fileExtension)) { filesQueue.addLast(String.format(BASE_CONFIG_PATH, appId) + "/$it") - } else configFiles.add(String.format(BASE_CONFIG_PATH, appId) + "/$it") + } else { + configFiles.add(String.format(BASE_CONFIG_PATH, appId) + "/$it") + } } while (filesQueue.isNotEmpty()) { val currentPath = filesQueue.removeFirst() context.assets.list(currentPath)?.onEach { if (!supportedFileExtensions.contains(it.fileExtension)) { filesQueue.addLast("$currentPath/$it") - } else configFiles.add("$currentPath/$it") + } else { + configFiles.add("$currentPath/$it") + } } } return configFiles @@ -507,13 +511,14 @@ constructor( val resultBundle = if (isNonProxy()) { fhirResourceDataSourceGetBundle(resourceType, resourceIdList) - } else + } else { fhirResourceDataSource.post( requestBody = generateRequestBundle(resourceType, resourceIdList) .encodeResourceToString() .toRequestBody(NetworkModule.JSON_MEDIA_TYPE), ) + } processResultBundleEntries(resultBundle.entry) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/navigation/NavigationMenuConfig.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/navigation/NavigationMenuConfig.kt index 9cb66a6e51..f545c4481e 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/navigation/NavigationMenuConfig.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/navigation/NavigationMenuConfig.kt @@ -22,7 +22,6 @@ import kotlinx.serialization.Serializable import org.smartregister.fhircore.engine.domain.model.ActionConfig import org.smartregister.fhircore.engine.util.extension.interpolate - const val ICON_TYPE_LOCAL = "local" const val ICON_TYPE_REMOTE = "remote" diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/register/RegisterConfiguration.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/register/RegisterConfiguration.kt index 732bd36d5d..b4a82d4cbb 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/register/RegisterConfiguration.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/register/RegisterConfiguration.kt @@ -50,7 +50,7 @@ data class RegisterConfiguration( val filterDataByRelatedEntityLocation: Boolean = false, val topScreenSection: TopScreenSectionConfig? = null, val onSearchByQrSingleResultActions: List? = null, - val infiniteScroll: Boolean = true + val infiniteScroll: Boolean = true, ) : Configuration() { val onSearchByQrSingleResultValidActions = onSearchByQrSingleResultActions?.filter { it.trigger == ActionTrigger.ON_SEARCH_SINGLE_RESULT } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ButtonProperties.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ButtonProperties.kt index 8996c628f5..5e89b02a09 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ButtonProperties.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ButtonProperties.kt @@ -91,7 +91,9 @@ data class ButtonProperties( val interpolated = this.status.interpolate(computedValuesMap) return if (ServiceStatus.values().map { it.name }.contains(interpolated)) { ServiceStatus.valueOf(interpolated) - } else ServiceStatus.UPCOMING + } else { + ServiceStatus.UPCOMING + } } } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewProperties.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewProperties.kt index ba9dd121b1..30c1059b21 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewProperties.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewProperties.kt @@ -56,8 +56,7 @@ fun List.retrieveListProperties(): List { ViewType.COLUMN -> viewPropertiesQueue.addAll((properties as ColumnProperties).children) ViewType.ROW -> viewPropertiesQueue.addAll((properties as RowProperties).children) ViewType.CARD -> viewPropertiesQueue.addAll((properties as CardViewProperties).content) - ViewType.LIST -> - viewPropertiesQueue.addAll((properties as ListProperties).registerCard.views) + ViewType.LIST -> viewPropertiesQueue.addAll((properties as ListProperties).registerCard.views) else -> {} } } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewPropertiesSerializer.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewPropertiesSerializer.kt index 6574ed470f..7c3a47ab6f 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewPropertiesSerializer.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/configuration/view/ViewPropertiesSerializer.kt @@ -32,7 +32,9 @@ object ViewPropertiesSerializer : ): DeserializationStrategy { val jsonObject = element.jsonObject val viewType = jsonObject[VIEW_TYPE]?.jsonPrimitive?.content - require(viewType != null && ViewType.entries.toTypedArray().contains(ViewType.valueOf(viewType))) { + require( + viewType != null && ViewType.entries.toTypedArray().contains(ViewType.valueOf(viewType)), + ) { """Ensure that supported `viewType` property is included in your register view properties configuration. Supported types: ${ViewType.entries.toTypedArray()} Parsed JSON: $jsonObject diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt index 7751bd9487..c6e1c3f66f 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt @@ -479,73 +479,81 @@ constructor( configComputedRuleValues: Map, ): RelatedResourceWrapper { val relatedResourceWrapper = RelatedResourceWrapper() - val relatedResourcesQueue = ArrayDeque, List?>>().apply { - addFirst(Pair(listOf(resource), relatedResourcesConfigs)) - } + val relatedResourcesQueue = + ArrayDeque, List?>>().apply { + addFirst(Pair(listOf(resource), relatedResourcesConfigs)) + } while (relatedResourcesQueue.isNotEmpty()) { val (currentResources, currentRelatedResourceConfigs) = relatedResourcesQueue.removeFirst() - val relatedResourceCountConfigs = currentRelatedResourceConfigs - ?.asSequence() - ?.filter { it.resultAsCount && !it.searchParameter.isNullOrEmpty() } - ?.toList() + val relatedResourceCountConfigs = + currentRelatedResourceConfigs + ?.asSequence() + ?.filter { it.resultAsCount && !it.searchParameter.isNullOrEmpty() } + ?.toList() relatedResourceCountConfigs?.forEach { resourceConfig -> - val search = Search(resourceConfig.resource).apply { - val filters = - currentResources.map { - val apply: ReferenceParamFilterCriterion.() -> Unit = { - value = it.logicalId.asReference(it.resourceType).reference + val search = + Search(resourceConfig.resource).apply { + val filters = + currentResources.map { + val apply: ReferenceParamFilterCriterion.() -> Unit = { + value = it.logicalId.asReference(it.resourceType).reference + } + apply } - apply - } - filter( - ReferenceClientParam(resourceConfig.searchParameter), - *filters.toTypedArray(), - ) - applyConfiguredSortAndFilters( - resourceConfig = resourceConfig, - sortData = true, - configComputedRuleValues = configComputedRuleValues - ) - } + filter( + ReferenceClientParam(resourceConfig.searchParameter), + *filters.toTypedArray(), + ) + applyConfiguredSortAndFilters( + resourceConfig = resourceConfig, + sortData = true, + configComputedRuleValues = configComputedRuleValues, + ) + } val key = resourceConfig.id ?: resourceConfig.resource.name if (resourceConfig.countResultConfig?.sumCounts == true) { search.count( onSuccess = { - relatedResourceWrapper.relatedResourceCountMap.getOrPut(key) { mutableListOf()} - .apply { + relatedResourceWrapper.relatedResourceCountMap + .getOrPut(key) { mutableListOf() } + .apply { add( RelatedResourceCount( - count = it, - relatedResourceType = resourceConfig.resource, - parentResourceId = resource.logicalId - ) + count = it, + relatedResourceType = resourceConfig.resource, + parentResourceId = resource.logicalId, + ), ) } }, onFailure = { Timber.e( it, - "Error retrieving total count for all related resources identified by $key" + "Error retrieving total count for all related resources identified by $key", ) - } + }, ) } } - val searchResults = searchIncludedResources( - relatedResourcesConfigs = currentRelatedResourceConfigs, - resources = currentResources, - configComputedRuleValues = configComputedRuleValues - ) + val searchResults = + searchIncludedResources( + relatedResourcesConfigs = currentRelatedResourceConfigs, + resources = currentResources, + configComputedRuleValues = configComputedRuleValues, + ) val fwdIncludedRelatedConfigsMap = - currentRelatedResourceConfigs?.revIncludeRelatedResourceConfigs(false) - ?.groupBy { it.searchParameter!! }?.mapValues { it.value.first() } + currentRelatedResourceConfigs + ?.revIncludeRelatedResourceConfigs(false) + ?.groupBy { it.searchParameter!! } + ?.mapValues { it.value.first() } val revIncludedRelatedConfigsMap = - currentRelatedResourceConfigs?.revIncludeRelatedResourceConfigs(true) + currentRelatedResourceConfigs + ?.revIncludeRelatedResourceConfigs(true) ?.groupBy { "${it.resource.name}_${it.searchParameter}".lowercase() } ?.mapValues { it.value.first() } @@ -557,7 +565,7 @@ constructor( resources = entry.value, relatedResourcesConfigsMap = fwdIncludedRelatedConfigsMap, relatedResourceWrapper = relatedResourceWrapper, - relatedResourcesQueue = relatedResourcesQueue + relatedResourcesQueue = relatedResourcesQueue, ) } searchResult.revIncluded?.forEach { entry -> @@ -569,7 +577,7 @@ constructor( resources = entry.value, relatedResourcesConfigsMap = revIncludedRelatedConfigsMap, relatedResourceWrapper = relatedResourceWrapper, - relatedResourcesQueue = relatedResourcesQueue + relatedResourcesQueue = relatedResourcesQueue, ) } } @@ -583,22 +591,23 @@ constructor( resources: List, relatedResourcesConfigsMap: Map?, relatedResourceWrapper: RelatedResourceWrapper, - relatedResourcesQueue: ArrayDeque, List?>>) { - val resourceConfigs = relatedResourcesConfigsMap?.get(key) - val id = resourceConfigs?.id ?: defaultKey - if (!id.isNullOrBlank()) { - relatedResourceWrapper.relatedResourceMap[id] = - relatedResourceWrapper.relatedResourceMap.getOrPut(id) { mutableListOf() }.apply { - addAll(resources.distinctBy { it.logicalId }) - } - resources.chunked(COUNT) { item -> - with(resourceConfigs?.relatedResources) { - if (!this.isNullOrEmpty()) { - relatedResourcesQueue.addLast(Pair(item, this)) - } + relatedResourcesQueue: ArrayDeque, List?>>, + ) { + val resourceConfigs = relatedResourcesConfigsMap?.get(key) + val id = resourceConfigs?.id ?: defaultKey + if (!id.isNullOrBlank()) { + relatedResourceWrapper.relatedResourceMap[id] = + relatedResourceWrapper.relatedResourceMap + .getOrPut(id) { mutableListOf() } + .apply { addAll(resources.distinctBy { it.logicalId }) } + resources.chunked(COUNT) { item -> + with(resourceConfigs?.relatedResources) { + if (!this.isNullOrEmpty()) { + relatedResourcesQueue.addLast(Pair(item, this)) } } } + } } protected suspend fun Search.count( @@ -626,55 +635,55 @@ constructor( resources: List, configComputedRuleValues: Map, ): List> { - val search = - Search(resources.first().resourceType).apply { - val filters = - resources.map { - val apply: TokenParamFilterCriterion.() -> Unit = { value = of(it.logicalId) } - apply - } - filter(Resource.RES_ID, *filters.toTypedArray()) - } - - // Forward include related resources e.g. a member or managingEntity of a Group resource - val forwardIncludeResourceConfigs = - relatedResourcesConfigs?.revIncludeRelatedResourceConfigs(false) - - // Reverse include related resources e.g. all CarePlans, Immunizations for Patient resource - val reverseIncludeResourceConfigs = - relatedResourcesConfigs?.revIncludeRelatedResourceConfigs(true) - - search.apply { - reverseIncludeResourceConfigs?.forEach { resourceConfig -> - revInclude( - resourceConfig.resource, - ReferenceClientParam(resourceConfig.searchParameter), - ) { - (this as Search).applyConfiguredSortAndFilters( - resourceConfig = resourceConfig, - sortData = true, - configComputedRuleValues = configComputedRuleValues, - ) + val search = + Search(resources.first().resourceType).apply { + val filters = + resources.map { + val apply: TokenParamFilterCriterion.() -> Unit = { value = of(it.logicalId) } + apply } + filter(Resource.RES_ID, *filters.toTypedArray()) + } + + // Forward include related resources e.g. a member or managingEntity of a Group resource + val forwardIncludeResourceConfigs = + relatedResourcesConfigs?.revIncludeRelatedResourceConfigs(false) + + // Reverse include related resources e.g. all CarePlans, Immunizations for Patient resource + val reverseIncludeResourceConfigs = + relatedResourcesConfigs?.revIncludeRelatedResourceConfigs(true) + + search.apply { + reverseIncludeResourceConfigs?.forEach { resourceConfig -> + revInclude( + resourceConfig.resource, + ReferenceClientParam(resourceConfig.searchParameter), + ) { + (this as Search).applyConfiguredSortAndFilters( + resourceConfig = resourceConfig, + sortData = true, + configComputedRuleValues = configComputedRuleValues, + ) } + } - forwardIncludeResourceConfigs?.forEach { resourceConfig -> - include( - resourceConfig.resource, - ReferenceClientParam(resourceConfig.searchParameter), - ) { - (this as Search).applyConfiguredSortAndFilters( - resourceConfig = resourceConfig, - sortData = true, - configComputedRuleValues = configComputedRuleValues, - ) - } + forwardIncludeResourceConfigs?.forEach { resourceConfig -> + include( + resourceConfig.resource, + ReferenceClientParam(resourceConfig.searchParameter), + ) { + (this as Search).applyConfiguredSortAndFilters( + resourceConfig = resourceConfig, + sortData = true, + configComputedRuleValues = configComputedRuleValues, + ) } } - return kotlin + } + return kotlin .runCatching { fhirEngine.search(search) } - .onFailure { Timber.e(it, "Error fetching related resources") } - .getOrDefault(emptyList()) + .onFailure { Timber.e(it, "Error fetching related resources") } + .getOrDefault(emptyList()) } private fun List.revIncludeRelatedResourceConfigs(isRevInclude: Boolean) = @@ -731,11 +740,12 @@ constructor( } resources.forEach { resource -> - val retrievedRelatedResources = retrieveRelatedResources( - resource = resource, - relatedResourcesConfigs = resourceConfig.relatedResources, - configComputedRuleValues = computedValuesMap, - ) + val retrievedRelatedResources = + retrieveRelatedResources( + resource = resource, + relatedResourcesConfigs = resourceConfig.relatedResources, + configComputedRuleValues = computedValuesMap, + ) retrievedRelatedResources.relatedResourceMap.forEach { resourcesMap -> val filteredRelatedResources = filterResourcesByFhirPathExpression( @@ -906,48 +916,52 @@ constructor( val syncLocationIds = context.retrieveRelatedEntitySyncLocationIds() val locationIds = syncLocationIds - .map { retrieveFlattenedSubLocations(it).map { subLocation -> subLocation.logicalId }} + .map { retrieveFlattenedSubLocations(it).map { subLocation -> subLocation.logicalId } } .flatten() .toHashSet() - val countSearch = - Search(baseResourceConfig.resource).apply { - applyConfiguredSortAndFilters( - resourceConfig = baseResourceConfig, - sortData = false, - filterActiveResources = filterActiveResources, - configComputedRuleValues = configComputedRuleValues, - ) - } - val totalCount = fhirEngine.count(countSearch) - val searchResults = ArrayDeque>() - var pageNumber = 0 - var count = 0 - while (count < totalCount) { - val baseResourceSearch = - createSearch( - baseResourceConfig = baseResourceConfig, - filterActiveResources = filterActiveResources, - configComputedRuleValues = configComputedRuleValues, - currentPage = pageNumber, - count = COUNT, - ) - val result = fhirEngine.search(baseResourceSearch) - searchResults.addAll(result.filter { searchResult -> + val countSearch = + Search(baseResourceConfig.resource).apply { + applyConfiguredSortAndFilters( + resourceConfig = baseResourceConfig, + sortData = false, + filterActiveResources = filterActiveResources, + configComputedRuleValues = configComputedRuleValues, + ) + } + val totalCount = fhirEngine.count(countSearch) + val searchResults = ArrayDeque>() + var pageNumber = 0 + var count = 0 + while (count < totalCount) { + val baseResourceSearch = + createSearch( + baseResourceConfig = baseResourceConfig, + filterActiveResources = filterActiveResources, + configComputedRuleValues = configComputedRuleValues, + currentPage = pageNumber, + count = COUNT, + ) + val result = fhirEngine.search(baseResourceSearch) + searchResults.addAll( + result.filter { searchResult -> when (baseResourceConfig.resource) { - ResourceType.Location -> locationIds.contains(searchResult.resource.logicalId) - else -> searchResult.resource.meta.tag.any { - it.system == context.getString(R.string.sync_strategy_related_entity_location_system) - && locationIds.contains(it.code) + ResourceType.Location -> locationIds.contains(searchResult.resource.logicalId) + else -> + searchResult.resource.meta.tag.any { + it.system == + context.getString(R.string.sync_strategy_related_entity_location_system) && + locationIds.contains(it.code) } } - }) - count += COUNT - pageNumber++ - if (currentPage != null && pageSize != null) { - val maxPageCount = (currentPage + 1) * pageSize - if (searchResults.size >= maxPageCount) break - } + }, + ) + count += COUNT + pageNumber++ + if (currentPage != null && pageSize != null) { + val maxPageCount = (currentPage + 1) * pageSize + if (searchResults.size >= maxPageCount) break } + } if (currentPage != null && pageSize != null) { val fromIndex = currentPage * pageSize @@ -998,7 +1012,8 @@ constructor( filterActiveResources = filterActiveResources, baseResourceConfig = baseResourceConfig, ) - } as List + } + as List } } @@ -1132,16 +1147,16 @@ constructor( } private suspend fun retrieveSubLocations(locationId: String): ArrayDeque = - fhirEngine - .search( - Search(type = ResourceType.Location).apply { - filter( - Location.PARTOF, - { value = locationId.asReference(ResourceType.Location).reference }, - ) - }, - ) - .mapTo(ArrayDeque()) { it.resource } + fhirEngine + .search( + Search(type = ResourceType.Location).apply { + filter( + Location.PARTOF, + { value = locationId.asReference(ResourceType.Location).reference }, + ) + }, + ) + .mapTo(ArrayDeque()) { it.resource } /** * A wrapper data class to hold search results. All related resources are flattened into one Map @@ -1149,7 +1164,8 @@ constructor( */ data class RelatedResourceWrapper( val relatedResourceMap: MutableMap> = mutableMapOf(), - val relatedResourceCountMap: MutableMap> = mutableMapOf(), + val relatedResourceCountMap: MutableMap> = + mutableMapOf(), ) companion object { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt index 0363fc2061..06137e66be 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt @@ -22,6 +22,7 @@ import com.google.android.fhir.FhirEngine import com.google.android.fhir.datacapture.extensions.logicalId import com.google.android.fhir.search.Search import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject import kotlinx.coroutines.withContext import org.hl7.fhir.r4.model.Resource import org.hl7.fhir.r4.model.ResourceType @@ -44,7 +45,6 @@ import org.smartregister.fhircore.engine.util.extension.extractLogicalIdUuid import org.smartregister.fhircore.engine.util.extension.retrieveRelatedEntitySyncLocationIds import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor import timber.log.Timber -import javax.inject.Inject class RegisterRepository @Inject @@ -134,18 +134,24 @@ constructor( currentPage = pageNumber, count = COUNT, ) - searchResultsCount += fhirEngine.search(baseResourceSearch) - .asSequence() - .map { it.resource } - .filter { resource -> - when (resource.resourceType) { - ResourceType.Location -> locationIds.contains(resource.logicalId) - else -> resource.meta.tag.any { - it.system == context.getString(R.string.sync_strategy_related_entity_location_system) - && locationIds.contains(it.code) + searchResultsCount += + fhirEngine + .search(baseResourceSearch) + .asSequence() + .map { it.resource } + .filter { resource -> + when (resource.resourceType) { + ResourceType.Location -> locationIds.contains(resource.logicalId) + else -> + resource.meta.tag.any { + it.system == + context.getString(R.string.sync_strategy_related_entity_location_system) && + locationIds.contains(it.code) + } } } - }.count().toLong() + .count() + .toLong() count += COUNT pageNumber++ } @@ -164,7 +170,7 @@ constructor( onFailure = { Timber.e( it, - "Error counting register data for register id: ${registerConfiguration.id}" + "Error counting register data for register id: ${registerConfiguration.id}", ) }, ) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt index 0f82f47883..efa101b299 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt @@ -189,7 +189,9 @@ constructor( accountManager.peekAuthToken(account, AUTH_TOKEN_TYPE), ) Result.success(true) - } else Result.success(false) + } else { + Result.success(false) + } } catch (httpException: HttpException) { Result.failure(httpException) } catch (unknownHostException: UnknownHostException) { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/di/NetworkModule.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/di/NetworkModule.kt index e2c346fc93..1ce80b7bf7 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/di/NetworkModule.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/di/NetworkModule.kt @@ -66,7 +66,9 @@ class NetworkModule { level = if (BuildConfig.DEBUG) { HttpLoggingInterceptor.Level.BODY - } else HttpLoggingInterceptor.Level.BASIC + } else { + HttpLoggingInterceptor.Level.BASIC + } redactHeader(AUTHORIZATION) redactHeader(COOKIE) }, @@ -141,7 +143,9 @@ class NetworkModule { level = if (BuildConfig.DEBUG) { HttpLoggingInterceptor.Level.BODY - } else HttpLoggingInterceptor.Level.BASIC + } else { + HttpLoggingInterceptor.Level.BASIC + } redactHeader(AUTHORIZATION) redactHeader(COOKIE) }, diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/pdf/HtmlPopulator.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/pdf/HtmlPopulator.kt index 28aaf581ed..bcdb51f226 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/pdf/HtmlPopulator.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/pdf/HtmlPopulator.kt @@ -140,7 +140,9 @@ class HtmlPopulator( questionnaireResponseItemMap.getOrDefault(linkId, listOf()).joinToString { answer -> if (dateFormat == null) { answer.value.valueToString() - } else answer.value.valueToString(dateFormat) + } else { + answer.value.valueToString(dateFormat) + } } html.replace(i, matcher.end() + i, answer) } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ConfigRulesExecutor.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ConfigRulesExecutor.kt index 7c1821d6b4..c03ff0a495 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ConfigRulesExecutor.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ConfigRulesExecutor.kt @@ -52,7 +52,9 @@ class ConfigRulesExecutor @Inject constructor(val fhirPathDataExtractor: FhirPat if (BuildConfig.DEBUG) { val timeToFireRules = measureTimeMillis { rulesEngine.fire(rules, facts) } Timber.d("Rule executed in $timeToFireRules millisecond(s)") - } else rulesEngine.fire(rules, facts) + } else { + rulesEngine.fire(rules, facts) + } return facts.get(DATA) as Map } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ResourceDataRulesExecutor.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ResourceDataRulesExecutor.kt index fce7444a95..6124b286ad 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ResourceDataRulesExecutor.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/ResourceDataRulesExecutor.kt @@ -186,7 +186,9 @@ class ResourceDataRulesExecutor @Inject constructor(val rulesFactory: RulesFacto resources = newListRelatedResources, conditionalFhirPathExpression = listResource.conditionalFhirPathExpression, ) - } else newListRelatedResources ?: listOf() + } else { + newListRelatedResources ?: listOf() + } val sortConfig = listResource.sortConfig diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/RulesFactory.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/RulesFactory.kt index 9e563579fe..77a8e41935 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/RulesFactory.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/rulesengine/RulesFactory.kt @@ -140,7 +140,9 @@ constructor( if (BuildConfig.DEBUG) { val timeToFireRules = measureTimeMillis { rulesEngine.fire(rules, facts) } Timber.d("Rule executed in $timeToFireRules millisecond(s)") - } else rulesEngine.fire(rules, facts) + } else { + rulesEngine.fire(rules, facts) + } return facts.get(DATA) as Map } @@ -192,13 +194,14 @@ constructor( return if (referenceFhirPathExpression.isNullOrEmpty()) { value - } else + } else { value.filter { resource.logicalId == fhirPathDataExtractor .extractValue(it, referenceFhirPathExpression) .extractLogicalIdUuid() } + } } /** @@ -686,7 +689,9 @@ constructor( } if (createLocalChangeEntitiesAfterPurge) { defaultRepository.addOrUpdate(resource = updatedResource as Resource) - } else defaultRepository.createRemote(resource = arrayOf(updatedResource as Resource)) + } else { + defaultRepository.createRemote(resource = arrayOf(updatedResource as Resource)) + } } } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt index 6fee7dfe88..9f907d8e9e 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt @@ -396,7 +396,9 @@ constructor( end = if (durationExpression.isNotBlank() && offsetDate.hasValue()) { evaluateToDate(offsetDate, "\$this + $durationExpression")?.value - } else carePlan.period.end + } else { + carePlan.period.end + } } .also { taskPeriods.add(it) } } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/base/AlertDialogue.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/base/AlertDialogue.kt index 677cf7b786..b329d1a556 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/base/AlertDialogue.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/base/AlertDialogue.kt @@ -81,7 +81,9 @@ object AlertDialogue { dialog.findViewById(R.id.pr_circular)?.apply { if (alertIntent == AlertIntent.PROGRESS) { this.show() - } else this.hide() + } else { + this.hide() + } } dialog.findViewById(R.id.tv_alert_message)?.apply { this.text = message } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/Pin.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/Pin.kt index 5487b9d92e..7b6eb5619c 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/Pin.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/Pin.kt @@ -114,7 +114,9 @@ fun PinInput( enteredPin = if (it.length < enteredPin.size) { enteredPin.safeRemoveLast() - } else enteredPin.safePlus(it.last()) + } else { + enteredPin.safePlus(it.last()) + } nextCellIndex = enteredPin.size onPinSet(enteredPin) onShowPinError(false) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/register/RegisterFooter.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/register/RegisterFooter.kt index 93a64f7537..fdddeae1ea 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/register/RegisterFooter.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/components/register/RegisterFooter.kt @@ -43,7 +43,6 @@ const val SEARCH_FOOTER_PREVIOUS_BUTTON_TAG = "searchFooterPreviousButtonTag" const val SEARCH_FOOTER_NEXT_BUTTON_TAG = "searchFooterNextButtonTag" const val SEARCH_FOOTER_PAGINATION_TAG = "searchFooterPaginationTag" - @Composable fun RegisterFooter( resultCount: Int, diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/multiselect/MultiSelectView.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/multiselect/MultiSelectView.kt index 212ffcceaa..59bb1305d8 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/multiselect/MultiSelectView.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/multiselect/MultiSelectView.kt @@ -87,7 +87,9 @@ fun MultiSelectCheckbox( imageVector = if (collapsedState.value) { Icons.Default.ArrowDropDown - } else Icons.AutoMirrored.Filled.ArrowRight, + } else { + Icons.AutoMirrored.Filled.ArrowRight + }, contentDescription = null, tint = Color.Gray, modifier = Modifier.clickable { collapsedState.value = !collapsedState.value }, diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/AndroidExtensions.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/AndroidExtensions.kt index 806075ad5b..7d873a8d40 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/AndroidExtensions.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/AndroidExtensions.kt @@ -31,11 +31,14 @@ import android.os.LocaleList import android.os.Parcelable import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.compose.ui.graphics.Color as ComposeColor import androidx.compose.ui.state.ToggleableState import androidx.core.os.bundleOf import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.updatePadding +import java.io.Serializable +import java.util.Locale import kotlinx.coroutines.flow.firstOrNull import org.smartregister.fhircore.engine.datastore.syncLocationIdsProtoStore import org.smartregister.fhircore.engine.ui.theme.DangerColor @@ -46,9 +49,6 @@ import org.smartregister.fhircore.engine.ui.theme.SuccessColor import org.smartregister.fhircore.engine.ui.theme.WarningColor import org.smartregister.fhircore.engine.util.annotation.ExcludeFromJacocoGeneratedReport import timber.log.Timber -import java.io.Serializable -import java.util.Locale -import androidx.compose.ui.graphics.Color as ComposeColor const val ERROR_COLOR = "errorColor" const val PRIMARY_COLOR = "primaryColor" diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/MeasureExtensions.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/MeasureExtensions.kt index dd733712c4..c889b3566e 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/MeasureExtensions.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/MeasureExtensions.kt @@ -92,7 +92,7 @@ fun MeasureReport.StratifierGroupComponent.findPercentage( ): String { return if (denominator == 0) { "0" - } else + } else { findPopulation(MeasurePopulationType.NUMERATOR) ?.count ?.toBigDecimal() @@ -103,6 +103,7 @@ fun MeasureReport.StratifierGroupComponent.findPercentage( reportConfiguration?.roundingStrategy?.value ?: DEFAULT_ROUNDING_STRATEGY.value, ) .toString() + } } val MeasureReport.StratifierGroupComponent.displayText diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/QuestionnaireExtension.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/QuestionnaireExtension.kt index d036dfdde6..cbb925e223 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/QuestionnaireExtension.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/QuestionnaireExtension.kt @@ -183,7 +183,9 @@ fun List.prePopulateInitialValues( (it.value is Coding) && if (actionParam.value.contains(",")) { actionParam.value.split(",").contains((it.value as Coding).code) - } else actionParam.value == (it.value as Coding).code + } else { + actionParam.value == (it.value as Coding).code + } } .forEach { it.initialSelected = true } } else { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ReferenceExtension.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ReferenceExtension.kt index d833d7b9b0..c31a255128 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ReferenceExtension.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ReferenceExtension.kt @@ -25,10 +25,11 @@ fun Reference.extractId(): String = fun Reference.extractType(): ResourceType? = if (this.reference.isNullOrEmpty()) { null - } else + } else { this.reference.substringBefore("/" + this.extractId()).substringAfterLast("/").let { ResourceType.fromCode(it) } + } fun String.asReference(resourceType: ResourceType): Reference { val resourceId = this diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ResourceExtension.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ResourceExtension.kt index 2f87eac395..bb6e5b55b0 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ResourceExtension.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/ResourceExtension.kt @@ -24,6 +24,12 @@ import com.google.android.fhir.datacapture.extensions.createQuestionnaireRespons import com.google.android.fhir.datacapture.extensions.logicalId import com.google.android.fhir.get import com.google.android.fhir.search.search +import java.time.Duration +import java.time.temporal.ChronoUnit +import java.util.Date +import java.util.Locale +import java.util.UUID +import kotlin.math.abs import org.hl7.fhir.exceptions.FHIRException import org.hl7.fhir.r4.model.Base import org.hl7.fhir.r4.model.BaseDateTimeType @@ -67,12 +73,6 @@ import org.smartregister.fhircore.engine.data.local.DefaultRepository import org.smartregister.fhircore.engine.domain.model.RepositoryResourceData import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor import timber.log.Timber -import java.time.Duration -import java.time.temporal.ChronoUnit -import java.util.Date -import java.util.Locale -import java.util.UUID -import kotlin.math.abs const val REFERENCE = "reference" const val PARTOF = "part-of" diff --git a/android/geowidget/src/main/java/org/smartregister/fhircore/geowidget/screens/GeoWidgetViewModel.kt b/android/geowidget/src/main/java/org/smartregister/fhircore/geowidget/screens/GeoWidgetViewModel.kt index dc2073653f..e0b4e4bf3f 100644 --- a/android/geowidget/src/main/java/org/smartregister/fhircore/geowidget/screens/GeoWidgetViewModel.kt +++ b/android/geowidget/src/main/java/org/smartregister/fhircore/geowidget/screens/GeoWidgetViewModel.kt @@ -19,10 +19,10 @@ package org.smartregister.fhircore.geowidget.screens import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import org.smartregister.fhircore.engine.util.DispatcherProvider import org.smartregister.fhircore.geowidget.model.GeoJsonFeature import org.smartregister.fhircore.geowidget.model.ServicePointType -import javax.inject.Inject @HiltViewModel class GeoWidgetViewModel @Inject constructor(val dispatcherProvider: DispatcherProvider) : diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/data/DataMigration.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/data/DataMigration.kt index 8807b5d3e6..a565ea5d29 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/data/DataMigration.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/data/DataMigration.kt @@ -211,7 +211,9 @@ constructor( } if (migrationConfig.createLocalChangeEntitiesAfterPurge) { defaultRepository.addOrUpdate(resource = updatedResource as Resource) - } else defaultRepository.createRemote(resource = *arrayOf(updatedResource as Resource)) + } else { + defaultRepository.createRemote(resource = *arrayOf(updatedResource as Resource)) + } } } Timber.i("Data migration completed successfully for version: ${migrationConfig.version}") diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/data/register/RegisterPagingSource.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/data/register/RegisterPagingSource.kt index 42e3ef14b7..f489eba575 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/data/register/RegisterPagingSource.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/data/register/RegisterPagingSource.kt @@ -66,8 +66,11 @@ class RegisterPagingSource( val prevKey = if (_registerPagingSourceState.loadAll && currentPage > 0) currentPage - 1 else null val nextKey = - if (_registerPagingSourceState.loadAll && registerData.isNotEmpty()) currentPage + 1 - else null + if (_registerPagingSourceState.loadAll && registerData.isNotEmpty()) { + currentPage + 1 + } else { + null + } val data = registerData.map { repositoryResourceData -> diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/appsetting/AppSettingViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/appsetting/AppSettingViewModel.kt index 03e1cd12fb..8ac0f9d169 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/appsetting/AppSettingViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/appsetting/AppSettingViewModel.kt @@ -172,13 +172,14 @@ constructor( entry.key, parentIt.map { it.focus.extractId() }, ) - } else + } else { fhirResourceDataSource.post( requestBody = generateRequestBundle(entry.key, parentIt.map { it.focus.extractId() }) .encodeResourceToString() .toRequestBody(NetworkModule.JSON_MEDIA_TYPE), ) + } resultBundle.entry.forEach { bundleEntryComponent -> if (bundleEntryComponent.resource != null) { diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/login/LoginActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/login/LoginActivity.kt index 966faf9bca..f873e96df6 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/login/LoginActivity.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/login/LoginActivity.kt @@ -90,7 +90,9 @@ open class LoginActivity : BaseMultiLanguageActivity() { downloadNowWorkflowConfigs() if (isPinEnabled && !hasActivePin) { navigateToPinLogin(launchSetup = true) - } else loginActivity.navigateToHome() + } else { + loginActivity.navigateToHome() + } } } launchDialPad.observe(loginActivity) { if (!it.isNullOrBlank()) launchDialPad(it) } diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt index f8e9363b3b..81c1f8371b 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainActivity.kt @@ -199,7 +199,9 @@ open class AppMainActivity : BaseMultiLanguageActivity(), QuestionnaireHandler, ), ), ) - } else Timber.e("QuestionnaireConfig & QuestionnaireResponse are both null") + } else { + Timber.e("QuestionnaireConfig & QuestionnaireResponse are both null") + } } } diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainViewModel.kt index 04cae4f44c..0a7fce88db 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/AppMainViewModel.kt @@ -34,6 +34,13 @@ import com.google.android.fhir.FhirEngine import com.google.android.fhir.sync.CurrentSyncJobStatus import com.google.android.fhir.sync.SyncJobStatus import dagger.hilt.android.lifecycle.HiltViewModel +import java.text.SimpleDateFormat +import java.time.OffsetDateTime +import java.util.Date +import java.util.Locale +import java.util.TimeZone +import javax.inject.Inject +import kotlin.time.Duration import kotlinx.coroutines.async import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch @@ -81,13 +88,6 @@ import org.smartregister.fhircore.quest.ui.shared.models.QuestionnaireSubmission import org.smartregister.fhircore.quest.util.extensions.handleClickEvent import org.smartregister.fhircore.quest.util.extensions.resourceReferenceToBitMap import org.smartregister.fhircore.quest.util.extensions.schedulePeriodically -import java.text.SimpleDateFormat -import java.time.OffsetDateTime -import java.util.Date -import java.util.Locale -import java.util.TimeZone -import javax.inject.Inject -import kotlin.time.Duration @HiltViewModel class AppMainViewModel @@ -134,14 +134,15 @@ constructor( } fun retrieveIconsAsBitmap() { - viewModelScope.launch (dispatcherProvider.io()){ + viewModelScope.launch(dispatcherProvider.io()) { navigationConfiguration.clientRegisters .asSequence() .filter { it.menuIconConfig != null && - it.menuIconConfig?.type == ICON_TYPE_REMOTE && - !it.menuIconConfig?.reference.isNullOrBlank() - }.mapNotNull { it.menuIconConfig!!.reference } + it.menuIconConfig?.type == ICON_TYPE_REMOTE && + !it.menuIconConfig?.reference.isNullOrBlank() + } + .mapNotNull { it.menuIconConfig!!.reference } .resourceReferenceToBitMap( fhirEngine = fhirEngine, decodedImageMap = configurationRegistry.decodedImageMap, @@ -291,11 +292,15 @@ constructor( NavigationArg.SCREEN_TITLE to if (startDestinationConfig.screenTitle.isNullOrEmpty()) { topMenuConfig.display - } else startDestinationConfig.screenTitle, + } else { + startDestinationConfig.screenTitle + }, NavigationArg.REGISTER_ID to if (startDestinationConfig.id.isNullOrEmpty()) { clickAction?.id ?: topMenuConfig.id - } else startDestinationConfig.id, + } else { + startDestinationConfig.id + }, ) } LauncherType.MAP -> bundleOf(NavigationArg.GEO_WIDGET_ID to startDestinationConfig.id) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/AppDrawer.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/AppDrawer.kt index 0ae4299164..2e2d6b3362 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/AppDrawer.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/AppDrawer.kt @@ -321,7 +321,9 @@ private fun DefaultSyncStatus( Modifier.background( if (allDataSynced) { SideMenuBottomItemDarkColor - } else WarningColor.copy(alpha = TRANSPARENCY), + } else { + WarningColor.copy(alpha = TRANSPARENCY) + }, ) .padding(vertical = 16.dp), ) { @@ -332,7 +334,9 @@ private fun DefaultSyncStatus( stringResource( if (allDataSynced) { org.smartregister.fhircore.engine.R.string.manual_sync - } else org.smartregister.fhircore.engine.R.string.sync, + } else { + org.smartregister.fhircore.engine.R.string.sync + }, ), subTitle = if (allDataSynced) { diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/multiselect/MultiSelectViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/multiselect/MultiSelectViewModel.kt index 64799c70b9..885990d23f 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/multiselect/MultiSelectViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/multiselect/MultiSelectViewModel.kt @@ -26,6 +26,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.android.fhir.datacapture.extensions.logicalId import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch import org.smartregister.fhircore.engine.data.local.DefaultRepository @@ -36,7 +37,6 @@ import org.smartregister.fhircore.engine.ui.multiselect.TreeBuilder import org.smartregister.fhircore.engine.ui.multiselect.TreeNode import org.smartregister.fhircore.engine.util.extension.extractLogicalIdUuid import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor -import javax.inject.Inject @HiltViewModel class MultiSelectViewModel diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileScreen.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileScreen.kt index 1037a76430..04a946015a 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileScreen.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileScreen.kt @@ -163,7 +163,9 @@ fun ProfileScreen( bottom = if (!fabActions.isNullOrEmpty() && fabActions.first().visible) { PADDING_BOTTOM_WITH_FAB.dp - } else PADDING_BOTTOM_WITHOUT_FAB.dp, + } else { + PADDING_BOTTOM_WITHOUT_FAB.dp + }, ), ) { item(key = profileUiState.resourceData?.baseResourceId) { diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileViewModel.kt index 219cd3b6e5..1673f814d2 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/ProfileViewModel.kt @@ -25,6 +25,7 @@ import androidx.lifecycle.viewModelScope import com.google.android.fhir.datacapture.extensions.logicalId import com.google.android.fhir.db.ResourceNotFoundException import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow @@ -59,7 +60,6 @@ import org.smartregister.fhircore.quest.util.extensions.handleClickEvent import org.smartregister.fhircore.quest.util.extensions.resourceReferenceToBitMap import org.smartregister.fhircore.quest.util.extensions.toParamDataMap import timber.log.Timber -import javax.inject.Inject @HiltViewModel class ProfileViewModel @@ -149,7 +149,7 @@ constructor( withContext(dispatcherProvider.io()) { profileConfigs.views.decodeImageResourcesToBitmap( fhirEngine = registerRepository.fhirEngine, - decodedImageMap = configurationRegistry.decodedImageMap + decodedImageMap = configurationRegistry.decodedImageMap, ) } } diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/components/ChangeManagingEntityView.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/components/ChangeManagingEntityView.kt index d7b6c97d24..229dc75593 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/components/ChangeManagingEntityView.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/profile/components/ChangeManagingEntityView.kt @@ -154,7 +154,9 @@ private fun ChangeManagingEntityBottomBar( id = if (isEnabled) { org.smartregister.fhircore.engine.R.color.colorPrimary - } else org.smartregister.fhircore.engine.R.color.white, + } else { + org.smartregister.fhircore.engine.R.color.white + }, ), ), ) { @@ -165,7 +167,9 @@ private fun ChangeManagingEntityBottomBar( id = if (isEnabled) { org.smartregister.fhircore.engine.R.color.white - } else org.smartregister.fhircore.engine.R.color.colorPrimary, + } else { + org.smartregister.fhircore.engine.R.color.colorPrimary + }, ), text = stringResource(id = org.smartregister.fhircore.engine.R.string.str_save).uppercase(), ) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt index 50f1520793..971003c944 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt @@ -36,6 +36,10 @@ import com.google.android.fhir.search.filter.TokenParamFilterCriterion import com.google.android.fhir.search.search import com.google.android.fhir.workflow.FhirOperator import dagger.hilt.android.lifecycle.HiltViewModel +import java.util.Date +import java.util.UUID +import javax.inject.Inject +import javax.inject.Provider import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -95,10 +99,6 @@ import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor import org.smartregister.fhircore.engine.util.helper.TransformSupportServices import org.smartregister.fhircore.quest.R import timber.log.Timber -import java.util.Date -import java.util.UUID -import javax.inject.Inject -import javax.inject.Provider @HiltViewModel class QuestionnaireViewModel diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterFragment.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterFragment.kt index 601d529406..03d1bb1acf 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterFragment.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterFragment.kt @@ -46,6 +46,7 @@ import com.google.android.fhir.sync.CurrentSyncJobStatus import com.google.android.fhir.sync.SyncJobStatus import com.google.android.fhir.sync.SyncOperation import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -68,7 +69,6 @@ import org.smartregister.fhircore.quest.ui.shared.viewmodels.SearchViewModel import org.smartregister.fhircore.quest.util.extensions.handleClickEvent import org.smartregister.fhircore.quest.util.extensions.hookSnackBar import org.smartregister.fhircore.quest.util.extensions.rememberLifecycleEvent -import javax.inject.Inject @ExperimentalMaterialApi @AndroidEntryPoint diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterScreen.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterScreen.kt index 5facb82ae5..54e4bf4e5d 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterScreen.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterScreen.kt @@ -171,7 +171,9 @@ fun RegisterScreen( id = if (appDrawerUIState.isSyncUpload == true) { R.string.syncing_up - } else R.string.syncing_down, + } else { + R.string.syncing_down + }, ), showPercentageProgress = true, ) @@ -191,8 +193,9 @@ fun RegisterScreen( onEvent = onEvent, registerUiState = registerUiState, currentPage = currentPage, - showPagination = !registerUiState.registerConfiguration.infiniteScroll && - searchQuery.value.isBlank(), + showPagination = + !registerUiState.registerConfiguration.infiniteScroll && + searchQuery.value.isBlank(), onSearchByQrSingleResultAction = { resourceData -> if ( !searchQuery.value.isBlank() && searchQuery.value.mode == SearchMode.QrCodeScan diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModel.kt index 66834c58c0..1aa74b6290 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModel.kt @@ -29,6 +29,8 @@ import androidx.paging.cachedIn import androidx.paging.filter import com.google.android.fhir.sync.CurrentSyncJobStatus import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +import kotlin.math.ceil import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -62,8 +64,6 @@ import org.smartregister.fhircore.quest.data.register.RegisterPagingSource import org.smartregister.fhircore.quest.data.register.model.RegisterPagingSourceState import org.smartregister.fhircore.quest.util.extensions.toParamDataMap import timber.log.Timber -import javax.inject.Inject -import kotlin.math.ceil @HiltViewModel class RegisterViewModel @@ -154,8 +154,10 @@ constructor( return registerConfiguration } - private fun retrieveCompleteRegisterData(registerId: String, forceRefresh: Boolean): - Flow> { + private fun retrieveCompleteRegisterData( + registerId: String, + forceRefresh: Boolean, + ): Flow> { if (completeRegisterData == null || forceRefresh) { completeRegisterData = getPager(registerId, true).flow.cachedIn(viewModelScope) } @@ -171,24 +173,23 @@ constructor( val regConfig = retrieveRegisterConfiguration(registerId) if (regConfig.infiniteScroll) { registerData.value = retrieveCompleteRegisterData(registerId, false) - } else paginateRegisterData(registerId) + } else { + paginateRegisterData(registerId) + } } else { filterRegisterData(event.searchQuery.query) } } - is RegisterEvent.MoveToNextPage -> { currentPage.value = currentPage.value.plus(1) paginateRegisterData(registerId) } - is RegisterEvent.MoveToPreviousPage -> { currentPage.value.let { if (it > 0) currentPage.value = it.minus(1) } paginateRegisterData(registerId) } - RegisterEvent.ResetFilterRecordsCount -> _filteredRecordsCount.longValue = -1 - } + } } fun filterRegisterData(searchText: String) { @@ -456,7 +457,8 @@ constructor( viewModelScope.launch { val currentRegisterConfiguration = retrieveRegisterConfiguration(registerId, paramsMap) if (currentRegisterConfiguration.infiniteScroll) { - registerData.value = retrieveCompleteRegisterData(currentRegisterConfiguration.id, clearCache) + registerData.value = + retrieveCompleteRegisterData(currentRegisterConfiguration.id, clearCache) } else { _totalRecordsCount.longValue = registerRepository.countRegisterData(registerId = registerId, paramsMap = paramsMap) @@ -491,11 +493,11 @@ constructor( filteredRecordsCount = _filteredRecordsCount.longValue, pagesCount = ceil( - ( - if (registerFilterState.value.fhirResourceConfig != null) { - _filteredRecordsCount.longValue - } else _totalRecordsCount.longValue - ) + (if (registerFilterState.value.fhirResourceConfig != null) { + _filteredRecordsCount.longValue + } else { + _totalRecordsCount.longValue + }) .toDouble() .div(currentRegisterConfiguration.pageSize.toLong()), ) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/components/RegisterCardList.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/components/RegisterCardList.kt index a964f7a85a..194038b148 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/components/RegisterCardList.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/register/components/RegisterCardList.kt @@ -117,12 +117,17 @@ fun RegisterCardList( // Register pagination item { val fabActions = registerUiState.registerConfiguration?.fabActions - Box(modifier = Modifier.padding( - bottom = - if (!fabActions.isNullOrEmpty() && fabActions.first().visible) { - PADDING_BOTTOM_WITH_FAB.dp - } else PADDING_BOTTOM_WITHOUT_FAB.dp, - )) { + Box( + modifier = + Modifier.padding( + bottom = + if (!fabActions.isNullOrEmpty() && fabActions.first().visible) { + PADDING_BOTTOM_WITH_FAB.dp + } else { + PADDING_BOTTOM_WITHOUT_FAB.dp + }, + ), + ) { if (pagingItems.itemCount > 0 && showPagination) { RegisterFooter( resultCount = pagingItems.itemCount, diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeItemViewHolderFactory.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeItemViewHolderFactory.kt index d7a4bcf438..468f58c079 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeItemViewHolderFactory.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeItemViewHolderFactory.kt @@ -92,9 +92,10 @@ internal class EditTextQrCodeItemViewHolderFactory( editable.toString().let { if (it.isBlank()) { null - } else + } else { QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent() .setValue(StringType(it)) + } } qrCodeAnswerChangeListener.onQrCodeChanged( diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeViewHolderFactory.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeViewHolderFactory.kt index 6e1c248eab..3bac623fb0 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeViewHolderFactory.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/sdc/qrCode/EditTextQrCodeViewHolderFactory.kt @@ -60,7 +60,9 @@ object EditTextQrCodeViewHolderFactory : prevAnswerEmpty && !newAnswerEmpty -> { if (canHaveMultipleAnswers) { questionnaireViewItem.addAnswer(newAnswer!!) - } else questionnaireViewItem.setAnswer(newAnswer!!) + } else { + questionnaireViewItem.setAnswer(newAnswer!!) + } } !prevAnswerEmpty && newAnswerEmpty -> { questionnaireViewItem.removeAnswer(previousAnswer!!) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ActionableButton.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ActionableButton.kt index 77a7b46631..103b2795cd 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ActionableButton.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ActionableButton.kt @@ -192,7 +192,9 @@ fun ActionableButton( } else { if (colorOpacity == 0.0f) { DefaultColor.copy(alpha = 0.9f) - } else statusColor.copy(alpha = colorOpacity) + } else { + statusColor.copy(alpha = colorOpacity) + } }, textAlign = TextAlign.Start, overflow = TextOverflow.Ellipsis, diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/SyncStatusView.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/SyncStatusView.kt index 2783138e71..423323e660 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/SyncStatusView.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/SyncStatusView.kt @@ -106,7 +106,9 @@ fun SyncBottomBar( val bottomRadius = if (!hideSyncCompleteStatus.value || currentSyncJobStatus is CurrentSyncJobStatus.Running) { 32.dp - } else 0.dp + } else { + 0.dp + } val height = when { syncNotificationBarExpanded -> @@ -147,7 +149,9 @@ fun SyncBottomBar( imageVector = if (syncNotificationBarExpanded) { Icons.Default.KeyboardArrowDown - } else Icons.Default.KeyboardArrowUp, + } else { + Icons.Default.KeyboardArrowUp + }, contentDescription = null, tint = when (currentSyncJobStatus) { @@ -237,7 +241,9 @@ fun SyncStatusView( imageVector = if (currentSyncJobStatus is CurrentSyncJobStatus.Succeeded) { Icons.Default.CheckCircle - } else Icons.Default.Error, + } else { + Icons.Default.Error + }, contentDescription = null, tint = when (currentSyncJobStatus) { @@ -308,7 +314,9 @@ fun SyncStatusView( stringResource( if (currentSyncJobStatus is CurrentSyncJobStatus.Failed) { org.smartregister.fhircore.engine.R.string.retry - } else org.smartregister.fhircore.engine.R.string.cancel, + } else { + org.smartregister.fhircore.engine.R.string.cancel + }, ), modifier = Modifier.padding(start = 16.dp).clickable { diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ViewRenderer.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ViewRenderer.kt index 8855bb2021..276d67c769 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ViewRenderer.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/shared/components/ViewRenderer.kt @@ -58,7 +58,9 @@ fun ViewRenderer( val interpolatedProperties = if (areViewPropertiesInterpolated) { properties - } else properties.interpolate(resourceData.computedValuesMap) + } else { + properties.interpolate(resourceData.computedValuesMap) + } GenerateView( modifier = generateModifier(properties), properties = interpolatedProperties, diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensions.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensions.kt index 0fc6c394bc..a3b7a6979d 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensions.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensions.kt @@ -30,6 +30,7 @@ import androidx.core.os.bundleOf import androidx.navigation.NavController import androidx.navigation.NavOptions import com.google.android.fhir.FhirEngine +import kotlin.collections.set import org.hl7.fhir.r4.model.Binary import org.smartregister.fhircore.engine.configuration.navigation.ICON_TYPE_REMOTE import org.smartregister.fhircore.engine.configuration.navigation.NavigationMenuConfig @@ -62,7 +63,6 @@ import org.smartregister.fhircore.quest.navigation.NavigationArg import org.smartregister.fhircore.quest.ui.pdf.PdfLauncherFragment import org.smartregister.fhircore.quest.ui.shared.QuestionnaireHandler import org.smartregister.p2p.utils.startP2PScreen -import kotlin.collections.set const val PRACTITIONER_ID = "practitionerId" @@ -261,12 +261,12 @@ suspend fun Sequence.resourceReferenceToBitMap( fhirEngine: FhirEngine, decodedImageMap: SnapshotStateMap, ) { - forEach { - val resourceId = it.extractLogicalIdUuid() - fhirEngine.loadResource(resourceId)?.let { binary -> - decodedImageMap[resourceId] = binary.data.decodeToBitmap() - } + forEach { + val resourceId = it.extractLogicalIdUuid() + fhirEngine.loadResource(resourceId)?.let { binary -> + decodedImageMap[resourceId] = binary.data.decodeToBitmap() } + } } suspend fun List.decodeImageResourcesToBitmap( @@ -276,13 +276,15 @@ suspend fun List.decodeImageResourcesToBitmap( val queue = ArrayDeque(this) while (queue.isNotEmpty()) { val viewProperty = queue.removeFirst() - when(viewProperty.viewType) { + when (viewProperty.viewType) { ViewType.IMAGE -> { val imageProperties = (viewProperty as ImageProperties) if (imageProperties.imageConfig != null) { val imageConfig = imageProperties.imageConfig - if (ICON_TYPE_REMOTE.equals(imageConfig?.type, ignoreCase = true) && - !imageConfig?.reference.isNullOrBlank()) { + if ( + ICON_TYPE_REMOTE.equals(imageConfig?.type, ignoreCase = true) && + !imageConfig?.reference.isNullOrBlank() + ) { val resourceId = imageConfig!!.reference!! fhirEngine.loadResource(resourceId)?.let { binary: Binary -> decodedImageMap[resourceId] = binary.data.decodeToBitmap() @@ -291,13 +293,14 @@ suspend fun List.decodeImageResourcesToBitmap( } } ViewType.COLUMN -> (viewProperty as ColumnProperties).children.forEach(queue::addLast) - ViewType.ROW -> (viewProperty as RowProperties).children.forEach(queue::addLast) - ViewType.SERVICE_CARD -> (viewProperty as ServiceCardProperties).details.forEach(queue::addLast) + ViewType.ROW -> (viewProperty as RowProperties).children.forEach(queue::addLast) + ViewType.SERVICE_CARD -> + (viewProperty as ServiceCardProperties).details.forEach(queue::addLast) ViewType.CARD -> (viewProperty as CardViewProperties).content.forEach(queue::addLast) ViewType.LIST -> (viewProperty as ListProperties).registerCard.views.forEach(queue::addLast) ViewType.STACK -> (viewProperty as StackViewProperties).children.forEach(queue::addLast) else -> { - /**Ignore other views that cannot display images**/ + /** Ignore other views that cannot display images* */ } } } diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/CqlContentTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/CqlContentTest.kt index d9724ab580..14a356e110 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/CqlContentTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/CqlContentTest.kt @@ -220,7 +220,9 @@ class CqlContentTest : RobolectricTest() { it.name to if (it.hasResource()) { it.resource.encodeResourceToString() - } else it.valueToString() + } else { + it.valueToString() + } } val expectedResource = resource.parseSampleResourceFromFile().convertToString(true) diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModelTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModelTest.kt index 55f632705b..a8e7bf5ee7 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModelTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/ui/register/RegisterViewModelTest.kt @@ -28,6 +28,7 @@ import io.mockk.mockk import io.mockk.runs import io.mockk.spyk import io.mockk.verify +import javax.inject.Inject import kotlinx.coroutines.test.runTest import org.hl7.fhir.r4.model.Coding import org.hl7.fhir.r4.model.DateType @@ -59,7 +60,6 @@ import org.smartregister.fhircore.engine.util.SharedPreferencesHelper import org.smartregister.fhircore.quest.app.fakes.Faker import org.smartregister.fhircore.quest.robolectric.RobolectricTest import org.smartregister.fhircore.quest.ui.shared.models.SearchQuery -import javax.inject.Inject @HiltAndroidTest class RegisterViewModelTest : RobolectricTest() { diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt index 76501d8854..d530ad6294 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt @@ -36,7 +36,11 @@ import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify +<<<<<<< HEAD import kotlinx.coroutines.Dispatchers +======= +import javax.inject.Inject +>>>>>>> 77d16628c (Run spotlessApply) import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runTest import kotlinx.coroutines.withContext @@ -79,8 +83,11 @@ import org.smartregister.fhircore.quest.navigation.MainNavigationScreen import org.smartregister.fhircore.quest.navigation.NavigationArg import org.smartregister.fhircore.quest.robolectric.RobolectricTest import org.smartregister.fhircore.quest.ui.shared.QuestionnaireHandler +<<<<<<< HEAD import javax.inject.Inject import kotlin.coroutines.CoroutineContext +======= +>>>>>>> 77d16628c (Run spotlessApply) @HiltAndroidTest class ConfigExtensionsKtTest : RobolectricTest() { @@ -675,7 +682,13 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun decodeBinaryResourcesToBitmapOnNavigationMenuClientRegistersDoneCorrectly(): Unit = runBlocking { +<<<<<<< HEAD val navigationMenuConfigs = sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } +======= + defaultRepository.create(addResourceTags = true, binaryImage) + val navigationMenuConfigs = + sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } +>>>>>>> 77d16628c (Run spotlessApply) val decodedImageMap = mutableStateMapOf() withContext(dispatcherProvider.io()){ defaultRepository.create(addResourceTags = true, binaryImage) @@ -692,10 +705,18 @@ class ConfigExtensionsKtTest : RobolectricTest() { fun decodeBinaryResourcesToBitmapOnOverflowMenuConfigDoneCorrectly(): Unit = runTest { val navigationMenuConfigs = sequenceOf(overflowMenuItemConfig).mapNotNull { it.icon?.reference } val decodedImageMap = mutableStateMapOf() +<<<<<<< HEAD withContext(Dispatchers.IO){ defaultRepository.create(addResourceTags = true, binaryImage) navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, decodedImageMap = decodedImageMap,) +======= + runBlocking { + navigationMenuConfigs.resourceReferenceToBitMap( + fhirEngine = fhirEngine, + decodedImageMap = decodedImageMap, + ) +>>>>>>> 77d16628c (Run spotlessApply) } Assert.assertTrue(decodedImageMap.isNotEmpty()) Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) @@ -742,10 +763,16 @@ class ConfigExtensionsKtTest : RobolectricTest() { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val listViewProperties = cardViewProperties.content[0] as ListProperties val decodedImageMap = mutableStateMapOf() +<<<<<<< HEAD withContext(Dispatchers.IO){ defaultRepository.create(addResourceTags = true, binaryImage) listOf(listViewProperties.registerCard.views[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } +======= + defaultRepository.create(addResourceTags = true, binaryImage) + listOf(listViewProperties.registerCard.views[0]) + .decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) +>>>>>>> 77d16628c (Run spotlessApply) Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) } From e416aeb0ce2df7e21d1eefc27d0651a753768ea7 Mon Sep 17 00:00:00 2001 From: Lentumunai-Mark Date: Tue, 17 Sep 2024 17:44:30 +0300 Subject: [PATCH 4/5] Refactor load images tests for different views. Signed-off-by: Lentumunai-Mark --- .../util/extensions/ConfigExtensionsKtTest.kt | 30 ++----------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt index d530ad6294..b3e4113737 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt @@ -36,11 +36,8 @@ import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify -<<<<<<< HEAD import kotlinx.coroutines.Dispatchers -======= import javax.inject.Inject ->>>>>>> 77d16628c (Run spotlessApply) import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runTest import kotlinx.coroutines.withContext @@ -83,11 +80,6 @@ import org.smartregister.fhircore.quest.navigation.MainNavigationScreen import org.smartregister.fhircore.quest.navigation.NavigationArg import org.smartregister.fhircore.quest.robolectric.RobolectricTest import org.smartregister.fhircore.quest.ui.shared.QuestionnaireHandler -<<<<<<< HEAD -import javax.inject.Inject -import kotlin.coroutines.CoroutineContext -======= ->>>>>>> 77d16628c (Run spotlessApply) @HiltAndroidTest class ConfigExtensionsKtTest : RobolectricTest() { @@ -682,15 +674,9 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun decodeBinaryResourcesToBitmapOnNavigationMenuClientRegistersDoneCorrectly(): Unit = runBlocking { -<<<<<<< HEAD val navigationMenuConfigs = sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } -======= - defaultRepository.create(addResourceTags = true, binaryImage) - val navigationMenuConfigs = - sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } ->>>>>>> 77d16628c (Run spotlessApply) val decodedImageMap = mutableStateMapOf() - withContext(dispatcherProvider.io()){ + withContext(Dispatchers.IO){ defaultRepository.create(addResourceTags = true, binaryImage) navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, @@ -705,18 +691,12 @@ class ConfigExtensionsKtTest : RobolectricTest() { fun decodeBinaryResourcesToBitmapOnOverflowMenuConfigDoneCorrectly(): Unit = runTest { val navigationMenuConfigs = sequenceOf(overflowMenuItemConfig).mapNotNull { it.icon?.reference } val decodedImageMap = mutableStateMapOf() -<<<<<<< HEAD - withContext(Dispatchers.IO){ + withContext(Dispatchers.IO) { defaultRepository.create(addResourceTags = true, binaryImage) - navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, - decodedImageMap = decodedImageMap,) -======= - runBlocking { navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, decodedImageMap = decodedImageMap, ) ->>>>>>> 77d16628c (Run spotlessApply) } Assert.assertTrue(decodedImageMap.isNotEmpty()) Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) @@ -763,16 +743,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val listViewProperties = cardViewProperties.content[0] as ListProperties val decodedImageMap = mutableStateMapOf() -<<<<<<< HEAD withContext(Dispatchers.IO){ defaultRepository.create(addResourceTags = true, binaryImage) listOf(listViewProperties.registerCard.views[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } -======= - defaultRepository.create(addResourceTags = true, binaryImage) - listOf(listViewProperties.registerCard.views[0]) - .decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) ->>>>>>> 77d16628c (Run spotlessApply) Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) } From 6e69c95d4e05e80e903899a0ad0c660d1a9fc25b Mon Sep 17 00:00:00 2001 From: Lentumunai-Mark Date: Tue, 17 Sep 2024 17:45:41 +0300 Subject: [PATCH 5/5] Resolve conflicts. Signed-off-by: Lentumunai-Mark --- .../engine/data/local/DefaultRepository.kt | 6 ++--- .../util/extensions/ConfigExtensionsKtTest.kt | 23 +++++++++++-------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt index c6e1c3f66f..ad62b3cfee 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/DefaultRepository.kt @@ -43,6 +43,9 @@ import com.jayway.jsonpath.JsonPath import com.jayway.jsonpath.Option import com.jayway.jsonpath.PathNotFoundException import dagger.hilt.android.qualifiers.ApplicationContext +import java.util.UUID +import javax.inject.Inject +import kotlin.math.min import kotlinx.coroutines.withContext import kotlinx.serialization.json.JsonArray import kotlinx.serialization.json.JsonElement @@ -95,9 +98,6 @@ import org.smartregister.fhircore.engine.util.extension.updateLastUpdated import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor import org.smartregister.fhircore.engine.util.pmap import timber.log.Timber -import java.util.UUID -import javax.inject.Inject -import kotlin.math.min open class DefaultRepository @Inject diff --git a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt index b3e4113737..3130b55387 100644 --- a/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt +++ b/android/quest/src/test/java/org/smartregister/fhircore/quest/util/extensions/ConfigExtensionsKtTest.kt @@ -36,8 +36,8 @@ import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify -import kotlinx.coroutines.Dispatchers import javax.inject.Inject +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runTest import kotlinx.coroutines.withContext @@ -674,9 +674,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { @Test fun decodeBinaryResourcesToBitmapOnNavigationMenuClientRegistersDoneCorrectly(): Unit = runBlocking { - val navigationMenuConfigs = sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } + val navigationMenuConfigs = + sequenceOf(navigationMenuConfig).mapNotNull { it.menuIconConfig?.reference } val decodedImageMap = mutableStateMapOf() - withContext(Dispatchers.IO){ + withContext(dispatcherProvider.io()) { defaultRepository.create(addResourceTags = true, binaryImage) navigationMenuConfigs.resourceReferenceToBitMap( fhirEngine = fhirEngine, @@ -718,7 +719,7 @@ class ConfigExtensionsKtTest : RobolectricTest() { fun testImageBitmapUpdatedCorrectlyGivenCardViewProperties(): Unit = runTest { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val decodedImageMap = mutableStateMapOf() - withContext(Dispatchers.IO){ + withContext(Dispatchers.IO) { defaultRepository.create(addResourceTags = true, binaryImage) listOf(cardViewProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } @@ -730,9 +731,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { fun testImageBitmapUpdatedCorrectlyGivenListViewProperties(): Unit = runTest { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val decodedImageMap = mutableStateMapOf() - withContext(Dispatchers.IO){ + withContext(Dispatchers.IO) { defaultRepository.create(addResourceTags = true, binaryImage) - listOf(cardViewProperties.content[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + listOf(cardViewProperties.content[0]) + .decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) @@ -743,9 +745,10 @@ class ConfigExtensionsKtTest : RobolectricTest() { val cardViewProperties = profileConfiguration.views[0] as CardViewProperties val listViewProperties = cardViewProperties.content[0] as ListProperties val decodedImageMap = mutableStateMapOf() - withContext(Dispatchers.IO){ + withContext(Dispatchers.IO) { defaultRepository.create(addResourceTags = true, binaryImage) - listOf(listViewProperties.registerCard.views[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) + listOf(listViewProperties.registerCard.views[0]) + .decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } Assert.assertTrue(decodedImageMap.containsKey("d60ff460-7671-466a-93f4-c93a2ebf2077")) Assert.assertTrue(decodedImageMap.isNotEmpty()) @@ -757,7 +760,7 @@ class ConfigExtensionsKtTest : RobolectricTest() { val listViewProperties = cardViewProperties.content[0] as ListProperties val columnProperties = listViewProperties.registerCard.views[0] as ColumnProperties val decodedImageMap = mutableStateMapOf() - withContext(Dispatchers.IO){ + withContext(Dispatchers.IO) { defaultRepository.create(addResourceTags = true, binaryImage) listOf(columnProperties.children[0]).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } @@ -784,7 +787,7 @@ class ConfigExtensionsKtTest : RobolectricTest() { ), ) val decodedImageMap = mutableStateMapOf() - withContext(Dispatchers.IO){ + withContext(Dispatchers.IO) { listOf(rowProperties).decodeImageResourcesToBitmap(fhirEngine, decodedImageMap) } Assert.assertTrue(decodedImageMap.isEmpty())