diff --git a/android/buildSrc/src/main/kotlin/BuildConfigs.kt b/android/buildSrc/src/main/kotlin/BuildConfigs.kt index b4ac17129a..7b8368968e 100644 --- a/android/buildSrc/src/main/kotlin/BuildConfigs.kt +++ b/android/buildSrc/src/main/kotlin/BuildConfigs.kt @@ -2,8 +2,8 @@ object BuildConfigs { const val minSdk = 26 const val compileSdk = 34 const val targetSdk = 34 - const val versionCode = 11 - const val versionName = "2.0.1" + const val versionCode = 12 + const val versionName = "2.0.2" const val applicationId = "org.smartregister.opensrp" const val jvmToolchain = 17 const val kotlinCompilerExtensionVersion = "1.5.8" diff --git a/android/engine/src/main/res/values-in/strings.xml b/android/engine/src/main/res/values-in/strings.xml index 9e674f4fc5..d7d55b464b 100644 --- a/android/engine/src/main/res/values-in/strings.xml +++ b/android/engine/src/main/res/values-in/strings.xml @@ -1,9 +1,12 @@ Sinkronisasi manual + Sinkronkan Bahasa Keluar sebagai Tampilkan yang terlambat Cari nama atau nomor ID + Cari nama + SINKRONKAN DATA PINDAI BARCODE Tidak Ada Hasil Maaf, kami tidak dapat menemukan klien dengan nama atau nomor ID tersebut @@ -65,12 +68,15 @@ Apakah Anda yakin ingin membuang jawabannya? Buang perubahan Buang - Simpan sebagian draf + Simpan sebagai draf Batal + Batalkan Perubahan Ya Detail yang diberikan mengalami kesalahan validasi. Atasi kesalahan dan kirim lagi Validasi Gagal OK + Buka draf + Hapus draf Username Password Lupa Password @@ -123,6 +129,7 @@ PELAYANAN SELANJUTNYA KARTU PELAYANAN Pasien lainnya + Pilih lokasi RESPONS (%1$s) Mencoba masuk dengan pengguna lain Mohon tunggu... @@ -144,6 +151,7 @@ Pekan/minggu Hari Menginisiasi pengaturan … + Initializing application … e.g JohnDoe %1$d%% Ada yang salah... @@ -157,6 +165,7 @@ Info perangkat Muat ulang Resources Tidak Disinkronkan + Semua data telah tersinkronisasi Statistik Tersinkronisasi Semua data disinkronkan Diperlukan pengaturan pengguna. Aktifkan koneksi internet Anda @@ -175,4 +184,25 @@ Tanggal Perangkat Versi migrasi data + Oke + TAMBAH + Memulai migrasi data dari versi %1$d + Data aplikasi berhasil dimigrasikan ke versi %1$d + Bantu + Tidak ada data yang disetel + Sinkronisasi selesai + Kesalahan sinkronisasi + Menghitung sisa waktu dalam menit… + %1$d%% Sinkronisasi ke atas… + %1$d%% Sinkronisasi ke bawah… + COBA LAGI + Ada beberapa data yang belum tersinkronisasi + Kontak supervisor hilang atau nomor telepon yang diberikan tidak valid + TERAPKAN FILTER + Simpan perubahan draf + Apakah Anda ingin menyimpan perubahan draf? + Buka perubahan draf + Anda dapat membuka kembali formulir draf yang disimpan untuk melanjutkan atau menghapusnya + Berikutnya + Sebelumnya diff --git a/android/gradle.properties b/android/gradle.properties index 103cfe3327..3ef79e4284 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -9,22 +9,24 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx6144m +org.gradle.jvmargs=-Xmx10g -XX:MaxMetaspaceSize=4g # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true - +org.gradle.daemon=true android.useAndroidX=true android.enableJetifier=true android.defaults.buildfeatures.buildconfig=true android.suppressUnsupportedCompileSdk=34 android.jetifier.ignorelist=jackson-core +#org.gradle.daemon.max-idle-time=10800000 // 3 hours in milliseconds org.gradle.warning.mode=all +org.gradle.configuration-cache=true org.gradle.caching=false org.gradle.parallel=true org.gradle.configureondemand=true -android.enableR8.fullMode=true +android.enableR8.fullMode=false diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index dd4db05d9d..90702e4b7c 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -8,7 +8,7 @@ androidx-test= "1.6.2" appcompat = "1.7.0" benchmark-junit = "1.3.3" cardview = "1.0.0" -common-utils = "1.0.0-SNAPSHOT" +common-utils = "1.0.1-SNAPSHOT" compose-ui = "1.6.8" compressor = "3.0.1" constraintlayout = "2.1.4" diff --git a/android/quest/build.gradle.kts b/android/quest/build.gradle.kts index ff2834411a..6baf09f5a1 100644 --- a/android/quest/build.gradle.kts +++ b/android/quest/build.gradle.kts @@ -116,8 +116,8 @@ android { } getByName("release") { - isMinifyEnabled = true - isShrinkResources = true + isMinifyEnabled = false + isShrinkResources = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro", @@ -199,7 +199,10 @@ android { testCoverage { jacocoVersion = BuildConfigs.jacocoVersion } - lint { abortOnError = false } + lint { + checkReleaseBuilds = true + abortOnError = false + } flavorDimensions += "apps" diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/TopScreenSection.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/TopScreenSection.kt index 29c14d7acc..cf12ec2645 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/TopScreenSection.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/main/components/TopScreenSection.kt @@ -146,7 +146,7 @@ fun TopScreenSection( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, ) { - Row(verticalAlignment = Alignment.CenterVertically) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.weight(4f)) { Icon( when (toolBarHomeNavigation) { ToolBarHomeNavigation.OPEN_DRAWER -> Icons.Filled.Menu @@ -169,7 +169,7 @@ fun TopScreenSection( Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(start = 8.dp), + modifier = Modifier.padding(start = 8.dp).weight(1f), ) { SetupToolbarIcons( menuIcons = topScreenSection?.menuIcons, @@ -412,7 +412,7 @@ private fun RenderMenuIcon( @Composable fun TopScreenSectionWithFilterItemOverNinetyNinePreview() { TopScreenSection( - title = "All Clients", + title = "All Clients All Clients All Clients All Clients All Clients", searchQuery = SearchQuery("Eddy"), filteredRecordsCount = 120, onSearchTextChanged = { _, _ -> }, diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt index 9ed3132b57..effb4fdf9d 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt @@ -387,6 +387,14 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() { lifecycleScope.launch { retrieveQuestionnaireResponse()?.let { questionnaireResponse -> viewModel.saveDraftQuestionnaire(questionnaireResponse, questionnaireConfig) + setResult( + Activity.RESULT_OK, + Intent().apply { + putExtra(QUESTIONNAIRE_RESPONSE, questionnaireResponse as Serializable) + putExtra(QUESTIONNAIRE_CONFIG, questionnaireConfig as Parcelable) + putExtra(ON_RESULT_TYPE, ActivityOnResultType.QUESTIONNAIRE.name) + }, + ) finish() } } 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 ecbe982df5..30f5d0e220 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 @@ -73,6 +73,7 @@ import org.smartregister.fhircore.engine.domain.model.ActionParameter import org.smartregister.fhircore.engine.domain.model.ActionParameterType import org.smartregister.fhircore.engine.domain.model.isEditable import org.smartregister.fhircore.engine.domain.model.isReadOnly +import org.smartregister.fhircore.engine.domain.model.isSummary import org.smartregister.fhircore.engine.rulesengine.RulesExecutor import org.smartregister.fhircore.engine.task.FhirCarePlanGenerator import org.smartregister.fhircore.engine.util.DispatcherProvider @@ -706,42 +707,40 @@ constructor( * This function saves [QuestionnaireResponse] as draft if any of the [QuestionnaireResponse.item] * has an answer. */ - fun saveDraftQuestionnaire( + suspend fun saveDraftQuestionnaire( questionnaireResponse: QuestionnaireResponse, questionnaireConfig: QuestionnaireConfig, ) { - viewModelScope.launch { - val hasPages = questionnaireResponse.item.any { it.hasItem() } - val questionnaireHasAnswer = - questionnaireResponse.item.any { - if (!hasPages) { - it.answer.any { answerComponent -> answerComponent.hasValue() } - } else { - questionnaireResponse.item.any { page -> - page.item.any { pageItem -> - pageItem.answer.any { answerComponent -> answerComponent.hasValue() } - } + val hasPages = questionnaireResponse.item.any { it.hasItem() } + val questionnaireHasAnswer = + questionnaireResponse.item.any { + if (!hasPages) { + it.answer.any { answerComponent -> answerComponent.hasValue() } + } else { + questionnaireResponse.item.any { page -> + page.item.any { pageItem -> + pageItem.answer.any { answerComponent -> answerComponent.hasValue() } } } } - questionnaireResponse.questionnaire = - questionnaireConfig.id.asReference(ResourceType.Questionnaire).reference - if ( - !questionnaireConfig.resourceIdentifier.isNullOrBlank() && - questionnaireConfig.resourceType != null - ) { - questionnaireResponse.subject = - questionnaireConfig.resourceIdentifier!!.asReference( - questionnaireConfig.resourceType!!, - ) } - if (questionnaireHasAnswer) { - questionnaireResponse.status = QuestionnaireResponse.QuestionnaireResponseStatus.INPROGRESS - defaultRepository.addOrUpdate( - addMandatoryTags = true, - resource = questionnaireResponse, + questionnaireResponse.questionnaire = + questionnaireConfig.id.asReference(ResourceType.Questionnaire).reference + if ( + !questionnaireConfig.resourceIdentifier.isNullOrBlank() && + questionnaireConfig.resourceType != null + ) { + questionnaireResponse.subject = + questionnaireConfig.resourceIdentifier!!.asReference( + questionnaireConfig.resourceType!!, ) - } + } + if (questionnaireHasAnswer) { + questionnaireResponse.status = QuestionnaireResponse.QuestionnaireResponseStatus.INPROGRESS + defaultRepository.addOrUpdate( + addMandatoryTags = true, + resource = questionnaireResponse, + ) } } @@ -1138,6 +1137,7 @@ constructor( !resourceIdentifier.isNullOrEmpty() && (questionnaireConfig.isEditable() || questionnaireConfig.isReadOnly() || + questionnaireConfig.isSummary() || questionnaireConfig.saveDraft) ) { defaultRepository diff --git a/package-lock.json b/package-lock.json index e269aaf09b..abe27502b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10495,15 +10495,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, diff --git a/yarn.lock b/yarn.lock index 2ace96069d..f8126b6c43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5990,9 +5990,9 @@ multicast-dns@^7.2.5: thunky "^1.0.2" nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== negotiator@0.6.3: version "0.6.3"