diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 3262ac54a4..9770315b35 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -23,7 +23,7 @@ jobs:
LOKALISE_ID: ${{ secrets.LOKALISE_ID }}
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
@@ -53,7 +53,7 @@ jobs:
LOKALISE_ID: ${{ secrets.LOKALISE_ID }}
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
@@ -63,7 +63,7 @@ jobs:
# Only write to the cache for builds on the 'develop' branch
cache-read-only: false
- run: ./gradlew lint
- - uses: yutailang0119/action-android-lint@v4.0.0
+ - uses: yutailang0119/action-android-lint@v5.0.0
with:
report-path: app/build/reports/lint-results-debug.xml
continue-on-error: true
@@ -83,7 +83,7 @@ jobs:
LOKALISE_ID: ${{ secrets.LOKALISE_ID }}
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
@@ -97,7 +97,7 @@ jobs:
run: ./gradlew ktlintCheck
- name: Annotate ktlint errors in the PR
continue-on-error: false
- uses: yutailang0119/action-ktlint@v4
+ uses: yutailang0119/action-ktlint@v5
with:
report-path: build/reports/ktlint/*.xml
build:
@@ -116,7 +116,7 @@ jobs:
LOKALISE_ID: ${{ secrets.LOKALISE_ID }}
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml
index df51046868..63b37bbf0a 100644
--- a/.github/workflows/staging.yml
+++ b/.github/workflows/staging.yml
@@ -26,7 +26,7 @@ jobs:
LOKALISE_ID: ${{ secrets.LOKALISE_ID }}
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
@@ -62,7 +62,7 @@ jobs:
keyPassword: ${{ secrets.KEY_PASSWORD }}
env:
BUILD_TOOLS_VERSION: ${{ env.BUILD_TOOL_VERSION }}
- - uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0
+ - uses: wzieba/Firebase-Distribution-Github-Action@v1.7.1
with:
serviceCredentialsFileContent: ${{ secrets.FIREBASE_CREDENTIALS_FILE_CONTENT }}
appId: ${{ secrets.FIREBASE_STAGING_APP_ID_PACKAGE_COM_HEDVIG_APP }}
diff --git a/.github/workflows/unused-resources.yml b/.github/workflows/unused-resources.yml
index cfa66b586a..1b313389b7 100644
--- a/.github/workflows/unused-resources.yml
+++ b/.github/workflows/unused-resources.yml
@@ -22,7 +22,7 @@ jobs:
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
diff --git a/.github/workflows/upload-to-play-store.yml b/.github/workflows/upload-to-play-store.yml
index a12806b0b3..8af9264fc1 100644
--- a/.github/workflows/upload-to-play-store.yml
+++ b/.github/workflows/upload-to-play-store.yml
@@ -26,7 +26,7 @@ jobs:
LOKALISE_ID: ${{ secrets.LOKALISE_ID }}
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Setup JDK 17
- uses: actions/setup-java@v4.7.0
+ uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'zulu'
diff --git a/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml b/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml
index a5918e68ab..568741e54f 100644
--- a/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml
+++ b/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml
@@ -1,4 +1,2 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt b/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt
index 595ebff73e..78c89562d0 100644
--- a/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt
+++ b/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt
@@ -13,6 +13,9 @@ import com.hedvig.android.apollo.octopus.test.OctopusFakeResolver
import com.hedvig.android.apollo.test.TestApolloClientRule
import com.hedvig.android.core.common.test.isLeft
import com.hedvig.android.core.common.test.isRight
+import com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl
+import com.hedvig.android.feature.travelcertificate.data.TravelCertificateData
+import com.hedvig.android.feature.travelcertificate.data.TravelCertificateError
import com.hedvig.android.logger.TestLogcatLoggingRule
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.LocalDate
@@ -39,7 +42,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
@Test
fun `when the feature flag is on and the network request fails, we get not Error response`() = runTest {
val travelCertificateUseCase =
- com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl(
+ GetTravelCertificateSpecificationsUseCaseImpl(
apolloClient,
)
@@ -48,14 +51,14 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
assertThat(
result,
- ).isLeft().isInstanceOf()
+ ).isLeft().isInstanceOf()
}
@Test
fun `when the feature flag is on and the network response contains no travel certificate, we get not eligible`() =
runTest {
val travelCertificateUseCase =
- com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl(
+ GetTravelCertificateSpecificationsUseCaseImpl(
apolloClient,
)
@@ -67,13 +70,13 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
assertThat(
result,
- ).isLeft().isInstanceOf()
+ ).isLeft().isInstanceOf()
}
@Test
fun `when the passed contractId is wrong, we get not eligible`() = runTest {
val travelCertificateUseCase =
- com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl(
+ GetTravelCertificateSpecificationsUseCaseImpl(
apolloClient,
)
@@ -85,13 +88,13 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
assertThat(
result,
- ).isLeft().isInstanceOf()
+ ).isLeft().isInstanceOf()
}
@Test
fun `when the passed contractId is right, we get TravelCertificateData`() = runTest {
val travelCertificateUseCase =
- com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl(
+ GetTravelCertificateSpecificationsUseCaseImpl(
apolloClient,
)
@@ -103,7 +106,6 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
contractSpecifications = listOf(
buildTravelCertificateContractSpecification {
contractId = "id"
- email = "email"
minStartDate = LocalDate.parse("2023-02-02")
maxStartDate = LocalDate.parse("2023-03-02")
maxDurationDays = 1
@@ -117,8 +119,8 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
val result = travelCertificateUseCase.invoke("id")
assertThat(result).isRight().isEqualTo(
- com.hedvig.android.feature.travelcertificate.data.TravelCertificateData(
- com.hedvig.android.feature.travelcertificate.data.TravelCertificateData.TravelCertificateSpecification(
+ TravelCertificateData(
+ TravelCertificateData.TravelCertificateSpecification(
contractId = "id",
email = "email",
maxDurationDays = 1,
@@ -132,7 +134,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
@Test
fun `when the passed contractId is correct, but the contract is not eligible, we get not eligible`() = runTest {
val travelCertificateUseCase =
- com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl(
+ GetTravelCertificateSpecificationsUseCaseImpl(
apolloClient,
)
@@ -144,7 +146,6 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
contractSpecifications = listOf(
buildTravelCertificateContractSpecification {
contractId = "id"
- email = "email"
minStartDate = LocalDate.parse("2023-02-02")
maxStartDate = LocalDate.parse("2023-03-02")
maxDurationDays = 1
@@ -159,7 +160,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
assertThat(
result,
- ).isLeft().isInstanceOf()
+ ).isLeft().isInstanceOf()
}
@Test
@@ -167,25 +168,25 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
@TestParameter contractSupportsTravelCertificate: Boolean,
) = runTest {
val travelCertificateUseCase =
- com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl(
+ GetTravelCertificateSpecificationsUseCaseImpl(
apolloClient,
)
+ val contractId = "contractId"
apolloClient.enqueueTestResponse(
TravelCertificateSpecificationsQuery(),
TravelCertificateSpecificationsQuery.Data(OctopusFakeResolver) {
currentMember = buildMember {
+ activeContracts = listOf(
+ buildContract {
+ this.id = if (contractSupportsTravelCertificate) contractId else "non-matching ID"
+ this.supportsTravelCertificate = true
+ },
+ )
travelCertificateSpecifications = buildTravelCertificateSpecification {
- activeContracts = listOf(
- buildContract {
- id = "contractId"
- supportsTravelCertificate = contractSupportsTravelCertificate
- },
- )
contractSpecifications = listOf(
buildTravelCertificateContractSpecification {
- contractId = "contractId"
- email = "email"
+ this.contractId = contractId
minStartDate = LocalDate.parse("2023-02-02")
maxStartDate = LocalDate.parse("2023-03-02")
maxDurationDays = 1
@@ -200,9 +201,9 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
if (contractSupportsTravelCertificate) {
assertThat(result).isRight().isEqualTo(
- com.hedvig.android.feature.travelcertificate.data.TravelCertificateData(
- com.hedvig.android.feature.travelcertificate.data.TravelCertificateData.TravelCertificateSpecification(
- contractId = "contractId",
+ TravelCertificateData(
+ TravelCertificateData.TravelCertificateSpecification(
+ contractId = contractId,
email = "email",
maxDurationDays = 1,
dateRange = LocalDate.parse("2023-02-02")..LocalDate.parse("2023-03-02"),
@@ -213,7 +214,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest {
} else {
assertThat(
result,
- ).isLeft().isInstanceOf()
+ ).isLeft().isInstanceOf()
}
}
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index dc49715e8d..6b52b0b34b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -5,86 +5,86 @@ targetSdkVersion = "34"
minSdkVersion = "23"
# lint versions
-lintApi = "31.8.2"
-lintGradlePlugin = "8.8.2"
+lintApi = "31.10.0"
+lintGradlePlugin = "8.10.0"
# gradlePlugin versions
-androidGradlePlugin = "8.8.2"
-apolloAdapters = "0.0.4"
-apollo = "4.1.1"
+androidGradlePlugin = "8.10.0"
+apolloAdapters = "0.0.6"
+apollo = "4.2.0"
cacheFix = "3.0.1"
crashlytics = "3.0.3"
-datadogPlugin = "1.15.0"
+datadogPlugin = "1.16.0"
doctor = "0.10.0"
-easylauncher = "6.4.0"
+easylauncher = "6.4.1"
googleServices = "4.4.2"
-gradleDevelocity = "3.19.2"
+gradleDevelocity = "4.0.1"
kotlin = "2.1.21"
-kotlinter = "5.0.1"
-ksp = "2.1.10-1.0.31"
-ktor = "3.1.1"
+kotlinter = "5.0.2"
+ksp = "2.1.21-2.0.1"
+ktor = "3.1.3"
license = "0.9.8"
-molecule = "2.0.0"
+molecule = "2.1.0"
squareSortDependencies = "0.14"
# Other versions sorted alphabetically
-accompanist = "0.37.2"
+accompanist = "0.37.3"
androidx-activity-compose = "1.10.1"
androidx-activity-core = "1.10.1"
androidx-annotation = "1.9.1"
-androidx-composeBom = "2025.02.00"
+androidx-composeBom = "2025.05.00"
#todo: remove this alpha when stable compose version bumps to 1.8
-androidx-datastore = "1.1.3"
+androidx-datastore = "1.1.6"
androidx-junit = "1.2.1"
-androidx-lifecycle = "2.8.7"
-androidx-navigation = "2.8.7"
+androidx-lifecycle = "2.9.0"
+androidx-navigation = "2.9.0"
androidx-other-appCompat = "1.7.0"
androidx-other-browser = "1.8.0"
androidx-other-constraintLayout = "2.2.0"
-androidx-other-core = "1.15.0"
-androidx-other-splashscreen = "1.2.0-beta01"
+androidx-other-core = "1.16.0"
+androidx-other-splashscreen = "1.2.0-beta02"
androidx-other-startup = "1.2.0"
-androidx-other-workManager = "2.10.0"
+androidx-other-workManager = "2.10.1"
androidx-test = "1.6.1"
androidx-testRunners = "1.6.2"
-androidx-ui-alpha = "1.8.0-beta03"
+androidx-ui-alpha = "1.8.1"
androidxGraphicsShapes = "1.0.1"
-arrow = "2.0.1"
+arrow = "2.1.2"
assertK = "0.28.1"
atomicfu = "0.27.0"
coil = "2.7.0"
composeRichtext = "1.0.0-alpha02"
coreLibraryDesugaring = "2.1.5"
coroutines = "1.10.2"
-datadog = "2.18.0"
-dependencyAnalysis = "2.10.1"
+datadog = "2.21.0"
+dependencyAnalysis = "2.17.0"
firebaseCrashlyticsBuildtools = "3.0.3"
hedvigAuthlib = "1.4.3"
junit = "4.13.2"
-koinBom = "4.0.2"
+koinBom = "4.0.4"
kotlinx-serialization = "1.8.1"
kotlinxDatetime = "0.6.2"
-media3 = "1.5.1"
+media3 = "1.7.1"
modalSheet = "0.7.0"
moneta = "1.4.4"
navigationRecentsUrlSharing = "1.0.0"
okhttp = "4.12.0"
-okio = "3.10.2"
+okio = "3.11.0"
paging = "3.3.6"
playReview = "2.0.2"
-playServicesBase = "18.5.0"
-retrofit = "2.11.0"
+playServicesBase = "18.7.0"
+retrofit = "3.0.0"
robolectric = "4.14.1"
-room = "2.7.0-rc01"
+room = "2.7.1"
slimber = "2.0.0"
-sqlite = "2.5.0-rc01"
+sqlite = "2.5.1"
testParameterInjector = "1.18"
timber = "5.0.1"
turbine = "1.2.0"
unleash = "1.0.0"
uuid = "0.8.4"
zXing = "3.5.3"
-zoomable = "1.6.2"
+zoomable = "1.7.0"
[libraries]
@@ -163,7 +163,7 @@ datadog-sdk-okhttp = { module = "com.datadoghq:dd-sdk-android-okhttp", version.r
datadog-sdk-rum = { module = "com.datadoghq:dd-sdk-android-rum", version.ref = "datadog" }
datadog-sdk-trace = { module = "com.datadoghq:dd-sdk-android-trace", version.ref = "datadog" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics-ktx" }
-firebase-bom = "com.google.firebase:firebase-bom:33.10.0"
+firebase-bom = "com.google.firebase:firebase-bom:33.13.0"
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics-ktx" }
firebase-dynamicLinks = { module = "com.google.firebase:firebase-dynamic-links" }
firebase-messaging = { module = "com.google.firebase:firebase-messaging-ktx" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 2733ed5dc3..5c82cb0324 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle.kts b/settings.gradle.kts
index d28f713b4f..2a99dc4e0a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -33,7 +33,7 @@ dependencyResolutionManagement {
}
plugins {
- id("com.gradle.develocity") version "3.19.2"
+ id("com.gradle.develocity") version "4.0.1"
}
develocity {