Skip to content

Commit e0a0339

Browse files
committed
Move Config to use Instant
1 parent 6b9cb80 commit e0a0339

File tree

9 files changed

+38
-28
lines changed

9 files changed

+38
-28
lines changed

firebase-config/api/android/firebase-config.api

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ public final class dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig {
2525
}
2626

2727
public final class dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo {
28-
public synthetic fun <init> (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;JLdev/gitlive/firebase/remoteconfig/FetchStatus;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
28+
public fun <init> (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;Lkotlinx/datetime/Instant;Ldev/gitlive/firebase/remoteconfig/FetchStatus;)V
2929
public final fun component1 ()Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;
30-
public final fun component2-UwyO8pc ()J
30+
public final fun component2 ()Lkotlinx/datetime/Instant;
3131
public final fun component3 ()Ldev/gitlive/firebase/remoteconfig/FetchStatus;
32-
public final fun copy-8Mi8wO0 (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;JLdev/gitlive/firebase/remoteconfig/FetchStatus;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
33-
public static synthetic fun copy-8Mi8wO0$default (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;JLdev/gitlive/firebase/remoteconfig/FetchStatus;ILjava/lang/Object;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
32+
public final fun copy (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;Lkotlinx/datetime/Instant;Ldev/gitlive/firebase/remoteconfig/FetchStatus;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
33+
public static synthetic fun copy$default (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;Lkotlinx/datetime/Instant;Ldev/gitlive/firebase/remoteconfig/FetchStatus;ILjava/lang/Object;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
3434
public fun equals (Ljava/lang/Object;)Z
3535
public final fun getConfigSettings ()Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;
36-
public final fun getFetchTime-UwyO8pc ()J
36+
public final fun getFetchTime ()Lkotlinx/datetime/Instant;
3737
public final fun getFetchTimeMillis ()J
3838
public final fun getLastFetchStatus ()Ldev/gitlive/firebase/remoteconfig/FetchStatus;
3939
public fun hashCode ()I

firebase-config/api/jvm/firebase-config.api

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ public final class dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig {
2525
}
2626

2727
public final class dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo {
28-
public synthetic fun <init> (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;JLdev/gitlive/firebase/remoteconfig/FetchStatus;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
28+
public fun <init> (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;Lkotlinx/datetime/Instant;Ldev/gitlive/firebase/remoteconfig/FetchStatus;)V
2929
public final fun component1 ()Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;
30-
public final fun component2-UwyO8pc ()J
30+
public final fun component2 ()Lkotlinx/datetime/Instant;
3131
public final fun component3 ()Ldev/gitlive/firebase/remoteconfig/FetchStatus;
32-
public final fun copy-8Mi8wO0 (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;JLdev/gitlive/firebase/remoteconfig/FetchStatus;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
33-
public static synthetic fun copy-8Mi8wO0$default (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;JLdev/gitlive/firebase/remoteconfig/FetchStatus;ILjava/lang/Object;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
32+
public final fun copy (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;Lkotlinx/datetime/Instant;Ldev/gitlive/firebase/remoteconfig/FetchStatus;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
33+
public static synthetic fun copy$default (Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;Lkotlinx/datetime/Instant;Ldev/gitlive/firebase/remoteconfig/FetchStatus;ILjava/lang/Object;)Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo;
3434
public fun equals (Ljava/lang/Object;)Z
3535
public final fun getConfigSettings ()Ldev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigSettings;
36-
public final fun getFetchTime-UwyO8pc ()J
36+
public final fun getFetchTime ()Lkotlinx/datetime/Instant;
3737
public final fun getFetchTimeMillis ()J
3838
public final fun getLastFetchStatus ()Ldev/gitlive/firebase/remoteconfig/FetchStatus;
3939
public fun hashCode ()I

firebase-config/build.gradle.kts

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ android {
2929
}
3030

3131
compileOptions {
32+
isCoreLibraryDesugaringEnabled = true
3233
sourceCompatibility = JavaVersion.VERSION_17
3334
targetCompatibility = JavaVersion.VERSION_17
3435
}
@@ -44,6 +45,10 @@ android {
4445
}
4546
}
4647

48+
dependencies {
49+
coreLibraryDesugaring(libs.android.desugarjdk)
50+
}
51+
4752
val supportIosTarget = project.property("skipIosTarget") != "true"
4853

4954
kotlin {
@@ -120,6 +125,7 @@ kotlin {
120125
dependencies {
121126
api(project(":firebase-app"))
122127
implementation(project(":firebase-common"))
128+
api(libs.kotlinx.datetime)
123129
}
124130
}
125131

firebase-config/src/androidMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfigServerException
88
import dev.gitlive.firebase.Firebase
99
import dev.gitlive.firebase.FirebaseApp
1010
import kotlinx.coroutines.tasks.await
11+
import kotlinx.datetime.Instant
1112
import kotlin.time.Duration
12-
import kotlin.time.Duration.Companion.milliseconds
1313
import kotlin.time.Duration.Companion.seconds
1414
import com.google.firebase.remoteconfig.FirebaseRemoteConfig as AndroidFirebaseRemoteConfig
1515
import com.google.firebase.remoteconfig.FirebaseRemoteConfigInfo as AndroidFirebaseRemoteConfigInfo
@@ -31,8 +31,8 @@ public actual class FirebaseRemoteConfig internal constructor(public val android
3131
public actual suspend fun settings(init: FirebaseRemoteConfigSettings.() -> Unit) {
3232
val settings = FirebaseRemoteConfigSettings().apply(init)
3333
val androidSettings = com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings.Builder()
34-
.setMinimumFetchIntervalInSeconds(settings.minimumFetchIntervalInSeconds)
35-
.setFetchTimeoutInSeconds(settings.fetchTimeoutInSeconds)
34+
.setMinimumFetchIntervalInSeconds(settings.minimumFetchInterval.inWholeSeconds)
35+
.setFetchTimeoutInSeconds(settings.fetchTimeout.inWholeSeconds)
3636
.build()
3737
android.setConfigSettingsAsync(androidSettings).await()
3838
}
@@ -74,7 +74,7 @@ public actual class FirebaseRemoteConfig internal constructor(public val android
7474

7575
return FirebaseRemoteConfigInfo(
7676
configSettings = configSettings.asCommon(),
77-
fetchTime = fetchTimeMillis.milliseconds,
77+
fetchTime = Instant.fromEpochMilliseconds(fetchTimeMillis),
7878
lastFetchStatus = lastFetchStatus,
7979
)
8080
}

firebase-config/src/commonMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigInfo.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dev.gitlive.firebase.remoteconfig
22

3-
import kotlin.time.Duration
3+
import kotlinx.datetime.Instant
44

55
/** Wraps the current state of the [FirebaseRemoteConfig] singleton object. */
66
public data class FirebaseRemoteConfigInfo(
@@ -12,13 +12,13 @@ public data class FirebaseRemoteConfigInfo(
1212
val configSettings: FirebaseRemoteConfigSettings,
1313

1414
/**
15-
* Gets the timestamp ([Duration] since epoch) of the last successful fetch, regardless of
15+
* Gets the [Instant] of the last successful fetch, regardless of
1616
* whether the fetch was activated or not.
1717
*
18-
* @return `-1.milliseconds` if no fetch attempt has been made yet. Otherwise, returns the timestamp of the last
18+
* @return `Instant.fromEpochMilliseconds(-1)` if no fetch attempt has been made yet. Otherwise, returns the timestamp of the last
1919
* successful fetch operation.
2020
*/
21-
val fetchTime: Duration,
21+
val fetchTime: Instant,
2222

2323
/**
2424
* Gets the status of the most recent fetch attempt.
@@ -28,7 +28,7 @@ public data class FirebaseRemoteConfigInfo(
2828
val lastFetchStatus: FetchStatus,
2929
) {
3030
@Deprecated("Replaced with Kotlin Duration", replaceWith = ReplaceWith("fetchTime"))
31-
val fetchTimeMillis: Long get() = fetchTime.inWholeMilliseconds
31+
val fetchTimeMillis: Long get() = fetchTime.toEpochMilliseconds()
3232
}
3333

3434
public enum class FetchStatus {

firebase-config/src/commonTest/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import dev.gitlive.firebase.FirebaseOptions
99
import dev.gitlive.firebase.apps
1010
import dev.gitlive.firebase.initialize
1111
import dev.gitlive.firebase.runTest
12+
import kotlinx.datetime.Instant
1213
import kotlin.test.AfterTest
1314
import kotlin.test.BeforeTest
1415
import kotlin.test.Ignore
1516
import kotlin.test.Test
1617
import kotlin.test.assertEquals
17-
import kotlin.time.Duration.Companion.milliseconds
1818
import kotlin.time.Duration.Companion.minutes
1919
import kotlin.time.Duration.Companion.seconds
2020

@@ -104,7 +104,7 @@ class FirebaseRemoteConfigTest {
104104
assertEquals(
105105
FirebaseRemoteConfigInfo(
106106
configSettings = FirebaseRemoteConfigSettings(),
107-
fetchTime = (-1).milliseconds,
107+
fetchTime = Instant.fromEpochMilliseconds(-1),
108108
lastFetchStatus = FetchStatus.NoFetchYet,
109109
).toString(),
110110
remoteConfig.info.toString(),

firebase-config/src/iosMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt

+5-6
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import dev.gitlive.firebase.FirebaseApp
1313
import dev.gitlive.firebase.FirebaseException
1414
import dev.gitlive.firebase.app
1515
import kotlinx.coroutines.CompletableDeferred
16+
import kotlinx.datetime.Instant
17+
import kotlinx.datetime.toKotlinInstant
1618
import platform.Foundation.NSError
17-
import platform.Foundation.timeIntervalSince1970
1819
import kotlin.time.Duration
19-
import kotlin.time.Duration.Companion.milliseconds
2020
import kotlin.time.Duration.Companion.seconds
2121
import kotlin.time.DurationUnit
2222

@@ -45,10 +45,9 @@ public actual class FirebaseRemoteConfig internal constructor(public val ios: FI
4545
get() {
4646
return FirebaseRemoteConfigInfo(
4747
configSettings = ios.configSettings.asCommon(),
48-
fetchTime = ios.lastFetchTime
49-
?.timeIntervalSince1970?.seconds
50-
?.takeIf { it > Duration.ZERO }
51-
?: (-1L).milliseconds,
48+
fetchTime = ios.lastFetchTime?.toKotlinInstant()
49+
?.takeIf { it.toEpochMilliseconds() > 0 }
50+
?: Instant.fromEpochMilliseconds(-1),
5251
lastFetchStatus = ios.lastFetchStatus.asCommon(),
5352
)
5453
}

firebase-config/src/jsMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import dev.gitlive.firebase.FirebaseApp
55
import dev.gitlive.firebase.FirebaseException
66
import dev.gitlive.firebase.remoteconfig.externals.*
77
import kotlinx.coroutines.await
8+
import kotlinx.datetime.Instant
89
import kotlin.js.json
910
import kotlin.time.Duration
1011
import kotlin.time.Duration.Companion.milliseconds
@@ -24,7 +25,7 @@ public actual class FirebaseRemoteConfig internal constructor(public val js: Rem
2425
get() = rethrow {
2526
FirebaseRemoteConfigInfo(
2627
configSettings = js.settings.toFirebaseRemoteConfigSettings(),
27-
fetchTime = js.fetchTimeMillis.milliseconds,
28+
fetchTime = Instant.fromEpochMilliseconds(js.fetchTimeMillis.toLong()),
2829
lastFetchStatus = js.lastFetchStatus.toFetchStatus(),
2930
)
3031
}

gradle/libs.versions.toml

+4
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ kotlin = "2.0.0"
1212
kotlinx-coroutines = "1.9.0-RC"
1313
kotlinx-serialization = "1.7.0"
1414
kotlinx-binarycompatibilityvalidator = "0.15.0-Beta.2"
15+
kotlinx-datetime = "0.6.0"
1516
kotlinter = "4.4.0"
1617
settings-api = "2.0"
1718
settings-language = "2.0"
1819
firebase-cocoapods = "10.28.0"
1920
test-logger-plugin = "3.2.0"
2021
dokka = "1.9.20"
22+
desugar-libs = "2.0.3"
2123

2224
[libraries]
2325
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
@@ -45,7 +47,9 @@ kotlinx-coroutines-play-services = { module = "org.jetbrains.kotlinx:kotlinx-cor
4547
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
4648
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
4749
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
50+
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
4851
dokka-base = { module = "org.jetbrains.dokka:dokka-base", version.ref = "dokka" }
52+
android-desugarjdk = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-libs" }
4953

5054
[plugins]
5155
android-application = { id = "com.android.application", version.ref = "agp" }

0 commit comments

Comments
 (0)