Skip to content

Commit d2cc9bf

Browse files
authored
[1.14.1] Version 1.14.1 (#2655)
2 parents c4c2542 + 16d66fc commit d2cc9bf

34 files changed

Lines changed: 577 additions & 178 deletions

File tree

core/api/core.api

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11791,18 +11791,21 @@ public final class org/hisp/dhis/android/core/user/openid/IntentWithRequestCode
1179111791
}
1179211792

1179311793
public final class org/hisp/dhis/android/core/user/openid/OpenIDConnectConfig {
11794-
public fun <init> (Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V
11794+
public fun <init> (Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
11795+
public synthetic fun <init> (Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
1179511796
public final fun component1 ()Ljava/lang/String;
1179611797
public final fun component2 ()Landroid/net/Uri;
1179711798
public final fun component3 ()Landroid/net/Uri;
1179811799
public final fun component4 ()Ljava/lang/String;
1179911800
public final fun component5 ()Ljava/lang/String;
11800-
public final fun copy (Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Lorg/hisp/dhis/android/core/user/openid/OpenIDConnectConfig;
11801-
public static synthetic fun copy$default (Lorg/hisp/dhis/android/core/user/openid/OpenIDConnectConfig;Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lorg/hisp/dhis/android/core/user/openid/OpenIDConnectConfig;
11801+
public final fun component6 ()Ljava/lang/String;
11802+
public final fun copy (Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/hisp/dhis/android/core/user/openid/OpenIDConnectConfig;
11803+
public static synthetic fun copy$default (Lorg/hisp/dhis/android/core/user/openid/OpenIDConnectConfig;Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lorg/hisp/dhis/android/core/user/openid/OpenIDConnectConfig;
1180211804
public fun equals (Ljava/lang/Object;)Z
1180311805
public final fun getAuthorizationUri ()Ljava/lang/String;
1180411806
public final fun getClientId ()Ljava/lang/String;
1180511807
public final fun getDiscoveryUri ()Landroid/net/Uri;
11808+
public final fun getPrompt ()Ljava/lang/String;
1180611809
public final fun getRedirectUri ()Landroid/net/Uri;
1180711810
public final fun getTokenUrl ()Ljava/lang/String;
1180811811
public fun hashCode ()I

core/src/androidTest/java/org/hisp/dhis/android/testapp/dataset/DataSetCollectionRepositoryMockIntegrationShould.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,12 @@ class DataSetCollectionRepositoryMockIntegrationShould : BaseMockIntegrationTest
261261
val dataSetCapture = d2.dataSetModule().dataSets()
262262
.byOrganisationUnitScope(OrganisationUnit.Scope.SCOPE_DATA_CAPTURE)
263263
.blockingGet()
264-
assertThat(dataSetCapture.size).isEqualTo(3)
264+
assertThat(dataSetCapture.size).isEqualTo(2)
265265

266266
val dataSetSearch = d2.dataSetModule().dataSets()
267267
.byOrganisationUnitScope(OrganisationUnit.Scope.SCOPE_TEI_SEARCH)
268268
.blockingGet()
269-
assertThat(dataSetSearch.size).isEqualTo(0)
269+
assertThat(dataSetSearch.size).isEqualTo(3)
270270
}
271271

272272
@Test

core/src/androidTest/java/org/hisp/dhis/android/testapp/organisationunit/OrganisationUnitCollectionRepositoryMockIntegrationShould.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,20 +110,20 @@ class OrganisationUnitCollectionRepositoryMockIntegrationShould : BaseMockIntegr
110110
val captureOrganisationUnits = d2.organisationUnitModule().organisationUnits()
111111
.byOrganisationUnitScope(OrganisationUnit.Scope.SCOPE_DATA_CAPTURE)
112112
.blockingGet()
113-
assertThat(captureOrganisationUnits.size).isEqualTo(3)
113+
assertThat(captureOrganisationUnits.size).isEqualTo(1)
114114

115115
val searchOrganisationUnits = d2.organisationUnitModule().organisationUnits()
116116
.byOrganisationUnitScope(OrganisationUnit.Scope.SCOPE_TEI_SEARCH)
117117
.blockingGet()
118-
assertThat(searchOrganisationUnits.size).isEqualTo(0)
118+
assertThat(searchOrganisationUnits.size).isEqualTo(3)
119119
}
120120

121121
@Test
122122
fun filter_by_root_organisation_unit() {
123123
val rootOrganisationUnits = d2.organisationUnitModule().organisationUnits()
124124
.byRootOrganisationUnit(true)
125125
.blockingGet()
126-
assertThat(rootOrganisationUnits.size).isEqualTo(1)
126+
assertThat(rootOrganisationUnits.size).isEqualTo(2)
127127

128128
val notRootOrganisationUnits = d2.organisationUnitModule().organisationUnits()
129129
.byRootOrganisationUnit(false)

core/src/androidTest/java/org/hisp/dhis/android/testapp/program/ProgramCollectionRepositoryMockIntegrationShould.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ class ProgramCollectionRepositoryMockIntegrationShould : BaseMockIntegrationTest
383383
val programSearch = d2.programModule().programs()
384384
.byOrganisationUnitScope(OrganisationUnit.Scope.SCOPE_TEI_SEARCH)
385385
.blockingGet()
386-
assertThat(programSearch.size).isEqualTo(0)
386+
assertThat(programSearch.size).isEqualTo(3)
387387
}
388388

389389
@Test

core/src/main/java/org/hisp/dhis/android/core/configuration/internal/ServerUrlParser.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,24 @@ import org.hisp.dhis.android.core.maintenance.D2ErrorComponent
3636

3737
internal object ServerUrlParser {
3838
@JvmStatic
39-
@Suppress("ThrowsCount")
4039
@Throws(D2Error::class)
41-
fun parse(url: String?): Url {
40+
fun validate(url: String?) {
4241
when {
4342
url.isNullOrBlank() -> throw nullOrBlankUrlD2Error()
4443
!url.startsWith("http") -> throw malformedUrlD2Error()
45-
else -> try {
46-
val urlBuilder = URLBuilder(removeTrailingApi(url))
47-
urlBuilder.encodedPathSegments += "api/"
48-
return urlBuilder.build()
49-
} catch (_: URLParserException) {
50-
throw malformedUrlD2Error()
51-
}
44+
}
45+
}
46+
47+
@JvmStatic
48+
@Throws(D2Error::class)
49+
fun parse(url: String?): Url {
50+
validate(url)
51+
return try {
52+
val urlBuilder = URLBuilder(removeTrailingApi(url!!))
53+
urlBuilder.encodedPathSegments += "api/"
54+
urlBuilder.build()
55+
} catch (_: URLParserException) {
56+
throw malformedUrlD2Error()
5257
}
5358
}
5459

core/src/main/java/org/hisp/dhis/android/core/mockwebserver/Dhis2MockServer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ class Dhis2MockServer(private val fileReader: IFileReader, port: Int) {
541541
private const val DATA_SET_COMPLETE_REGISTRATIONS_JSON =
542542
"dataset/data_set_complete_registrations.json"
543543
private const val DATA_APPROVALS_MULTIPLE_JSON = "dataapproval/data_approvals_multiple.json"
544-
private const val ORGANISATION_UNITS_JSON = "organisationunit/organisation_units.json"
544+
private const val ORGANISATION_UNITS_JSON = "organisationunit/search_organisation_units.json"
545545
private const val RESERVE_VALUES_JSON =
546546
"trackedentity/tracked_entity_attribute_reserved_values.json"
547547
private const val SMS_METADATA = "sms/metadata_ids.json"

core/src/main/java/org/hisp/dhis/android/core/server/internal/LoginConfigCall.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ internal class LoginConfigCall(
4646
private val networkHandler: LoginConfigNetworkHandler,
4747
) {
4848
suspend fun checkServerUrl(serverUrl: String): Result<LoginConfig, D2Error> {
49+
try {
50+
ServerUrlParser.validate(serverUrl)
51+
} catch (d2Error: D2Error) {
52+
return Result.Failure(d2Error)
53+
}
54+
4955
val sanitizedUrl = ServerUrlParser.trimAndRemoveTrailingSlash(serverUrl)!!
5056
val loginConfig = tryLoginConfig(sanitizedUrl)
5157

core/src/main/java/org/hisp/dhis/android/core/trackedentity/internal/TrackedEntityEnrollmentOrphanCleaner.kt

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,56 +31,41 @@ import org.hisp.dhis.android.core.common.State
3131
import org.hisp.dhis.android.core.enrollment.Enrollment
3232
import org.hisp.dhis.android.core.enrollment.internal.EnrollmentStore
3333
import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstance
34-
import org.hisp.dhis.android.core.tracker.importer.internal.TrackerImporterBreakTheGlassHelper
3534
import org.hisp.dhis.android.persistence.common.querybuilders.WhereClauseBuilder
3635
import org.hisp.dhis.android.persistence.enrollment.EnrollmentTableInfo
3736
import org.koin.core.annotation.Singleton
3837

3938
@Singleton
4039
internal class TrackedEntityEnrollmentOrphanCleaner(
4140
private val enrollmentStore: EnrollmentStore,
42-
private val breakTheGlassHelper: TrackerImporterBreakTheGlassHelper,
4341
) {
4442

4543
suspend fun deleteOrphan(
4644
parent: TrackedEntityInstance?,
4745
children: Collection<Enrollment>?,
4846
program: String?,
4947
): Boolean {
50-
return if (parent != null && children != null) {
48+
return if (parent != null && children != null && program != null) {
5149
val orphanEnrollmentsClause = WhereClauseBuilder().run {
5250
appendKeyStringValue(EnrollmentTableInfo.Columns.TRACKED_ENTITY_INSTANCE, parent.uid())
5351
appendNotInKeyStringValues(EnrollmentTableInfo.Columns.UID, children.map { it.uid() })
5452
appendInKeyEnumValues(
5553
EnrollmentTableInfo.Columns.SYNC_STATE,
5654
listOf(State.SYNCED, State.SYNCED_VIA_SMS),
5755
)
58-
if (program != null) {
59-
appendKeyStringValue(EnrollmentTableInfo.Columns.PROGRAM, program)
60-
}
56+
appendKeyStringValue(EnrollmentTableInfo.Columns.PROGRAM, program)
6157
build()
6258
}
6359

6460
val orphanEnrollments = enrollmentStore.selectWhere(orphanEnrollmentsClause)
6561

66-
val deletedEnrollments = orphanEnrollments.filter { e -> isAccessibleByGlass(e, program) }
67-
68-
if (deletedEnrollments.isNotEmpty()) {
69-
enrollmentStore.deleteByUid(deletedEnrollments)
62+
if (orphanEnrollments.isNotEmpty()) {
63+
enrollmentStore.deleteByUid(orphanEnrollments)
7064
}
7165

72-
deletedEnrollments.isNotEmpty()
66+
orphanEnrollments.isNotEmpty()
7367
} else {
7468
false
7569
}
7670
}
77-
78-
private suspend fun isAccessibleByGlass(enrollment: Enrollment, program: String?): Boolean {
79-
val isProtected = breakTheGlassHelper.isProtectedInSearchScope(
80-
program = enrollment.program(),
81-
organisationUnit = enrollment.organisationUnit(),
82-
)
83-
84-
return !isProtected || enrollment.program() == program
85-
}
8671
}

core/src/main/java/org/hisp/dhis/android/core/trackedentity/ownership/ProgramOwnerStore.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ package org.hisp.dhis.android.core.trackedentity.ownership
3030

3131
import org.hisp.dhis.android.core.arch.db.stores.internal.ObjectWithoutUidStore
3232

33-
internal interface ProgramOwnerStore : ObjectWithoutUidStore<ProgramOwner>
33+
internal interface ProgramOwnerStore : ObjectWithoutUidStore<ProgramOwner> {
34+
suspend fun selectForTeiProgram(tei: String, program: String): ProgramOwner?
35+
}

core/src/main/java/org/hisp/dhis/android/core/trackedentity/search/TrackedEntityInstanceQueryDataFetcher.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ internal class TrackedEntityInstanceQueryDataFetcher(
8181
}
8282
if (result.size < requestedLoadSize && scope.mode() == RepositoryMode.OFFLINE_FIRST) {
8383
val onlineInstances = queryOnline(requestedLoadSize)
84-
result.addAll(onlineInstances)
84+
result.addAll(onlineInstances.filter { it.succeeded })
8585
}
8686
} else {
8787
val instances = queryOnline(requestedLoadSize)

0 commit comments

Comments
 (0)