Skip to content

Commit 4f1fc73

Browse files
authored
Remove Desugaring Requirement By Removing Instant.now() (#154)
* Remove use of Instant.now() replace with older API.
1 parent 09ee268 commit 4f1fc73

File tree

9 files changed

+36
-72
lines changed

9 files changed

+36
-72
lines changed

android/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ android {
3232
}
3333
}
3434
compileOptions {
35-
// Flag to enable support for the new language APIs
36-
coreLibraryDesugaringEnabled true
37-
3835
sourceCompatibility JavaVersion.VERSION_1_8
3936
targetCompatibility JavaVersion.VERSION_1_8
4037
}
@@ -59,7 +56,6 @@ dependencies {
5956
implementation 'androidx.lifecycle:lifecycle-process:2.4.0'
6057
implementation 'androidx.lifecycle:lifecycle-common-java8:2.4.0'
6158

62-
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
6359

6460
// TESTING
6561
testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'

android/src/test/java/com/segment/analytics/kotlin/android/EventsFileTests.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.segment.analytics.kotlin.core.TrackEvent
66
import com.segment.analytics.kotlin.core.emptyJsonObject
77
import com.segment.analytics.kotlin.core.utilities.EncodeDefaultsJson
88
import com.segment.analytics.kotlin.core.utilities.EventsFileManager
9+
import com.segment.analytics.kotlin.core.utilities.dateTimeNowString
910
import io.mockk.every
1011
import io.mockk.mockkStatic
1112
import kotlinx.coroutines.test.runTest
@@ -32,6 +33,8 @@ class EventsFileTests {
3233

3334
init {
3435
mockkStatic(Instant::class)
36+
mockkStatic(::dateTimeNowString)
37+
every { dateTimeNowString() } returns Date(0).toInstant().toString()
3538
every { Instant.now() } returns Date(0).toInstant()
3639
}
3740

core/src/main/java/com/segment/analytics/kotlin/core/Events.kt

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
package com.segment.analytics.kotlin.core
22

3+
import com.segment.analytics.kotlin.core.utilities.dateTimeNowString
34
import kotlinx.serialization.DeserializationStrategy
4-
import kotlinx.serialization.KSerializer
55
import kotlinx.serialization.SerialName
66
import kotlinx.serialization.Serializable
7-
import kotlinx.serialization.descriptors.PrimitiveKind
8-
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
9-
import kotlinx.serialization.encoding.Decoder
10-
import kotlinx.serialization.encoding.Encoder
117
import kotlinx.serialization.json.*
128
import sovran.kotlin.Store
13-
import java.time.Instant
149
import java.util.*
1510

1611
typealias AnalyticsContext = JsonObject
@@ -21,18 +16,6 @@ typealias Traits = JsonObject
2116
val emptyJsonObject = JsonObject(emptyMap())
2217
val emptyJsonArray = JsonArray(emptyList())
2318

24-
class DateSerializer : KSerializer<Instant> {
25-
override val descriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING)
26-
27-
override fun deserialize(decoder: Decoder): Instant {
28-
return Instant.parse(decoder.decodeString())
29-
}
30-
31-
override fun serialize(encoder: Encoder, value: Instant) {
32-
encoder.encodeString(value.toString())
33-
}
34-
}
35-
3619
@Serializable
3720
data class DestinationMetadata(
3821
var bundled: List<String>? = emptyList(),
@@ -97,7 +80,7 @@ sealed class BaseEvent {
9780
}
9881

9982
internal fun applyBaseData() {
100-
this.timestamp = Instant.now().toString()
83+
this.timestamp = dateTimeNowString()
10184
this.context = emptyJsonObject
10285
this.messageId = UUID.randomUUID().toString()
10386
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.segment.analytics.kotlin.core.utilities
2+
3+
import java.text.SimpleDateFormat
4+
import java.util.*
5+
6+
/**
7+
* This function is a replacement for Instant.now().toString(). It produces strings in a
8+
* compatible format.
9+
*
10+
* Ex:
11+
* Instant.now(): 2023-04-19T04:03:46.880969Z
12+
* dateTimeNowString(): 2023-04-19T04:03:46.880Z
13+
*/
14+
fun dateTimeNowString(): String {
15+
val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'Szzz")
16+
val utc = TimeZone.getTimeZone("UTC");
17+
sdf.timeZone = utc;
18+
return sdf.format(Date()).replace("UTC", "Z")
19+
}

core/src/main/java/com/segment/analytics/kotlin/core/utilities/EventsFileManager.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.segment.analytics.kotlin.core.utilities
33
import kotlinx.coroutines.sync.Semaphore
44
import java.io.File
55
import java.io.FileOutputStream
6-
import java.time.Instant
76

87
/**
98
* Responsible for storing events in a batch payload style
@@ -134,7 +133,9 @@ class EventsFileManager(
134133
return
135134
}
136135
// close events array and batch object
137-
val contents = """],"sentAt":"${Instant.now()}","writeKey":"$writeKey"}"""
136+
137+
138+
val contents = """],"sentAt":"${dateTimeNowString()}","writeKey":"$writeKey"}"""
138139
writeToFile(contents.toByteArray(), file)
139140
file.renameTo(File(directory, file.nameWithoutExtension))
140141
os?.close()

core/src/test/kotlin/com/segment/analytics/kotlin/core/AnalyticsTests.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.segment.analytics.kotlin.core
33
import com.segment.analytics.kotlin.core.platform.DestinationPlugin
44
import com.segment.analytics.kotlin.core.platform.Plugin
55
import com.segment.analytics.kotlin.core.platform.plugins.ContextPlugin
6+
import com.segment.analytics.kotlin.core.utilities.dateTimeNowString
67
import com.segment.analytics.kotlin.core.utils.StubPlugin
78
import com.segment.analytics.kotlin.core.utils.TestRunPlugin
89
import com.segment.analytics.kotlin.core.utils.clearPersistentStorage
@@ -56,6 +57,8 @@ class AnalyticsTests {
5657
init {
5758
mockkStatic(Instant::class)
5859
every { Instant.now() } returns Date(0).toInstant()
60+
mockkStatic(::dateTimeNowString)
61+
every { dateTimeNowString() } returns Date(0).toInstant().toString()
5962
mockkStatic(UUID::class)
6063
every { UUID.randomUUID().toString() } returns "qwerty-qwerty-123"
6164
}

core/src/test/kotlin/com/segment/analytics/kotlin/core/DateSerializerTests.kt

Lines changed: 0 additions & 47 deletions
This file was deleted.

core/src/test/kotlin/com/segment/analytics/kotlin/core/compat/JavaAnalyticsTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.segment.analytics.kotlin.core.emptyJsonObject
1515
import com.segment.analytics.kotlin.core.platform.DestinationPlugin
1616
import com.segment.analytics.kotlin.core.platform.Plugin
1717
import com.segment.analytics.kotlin.core.platform.plugins.ContextPlugin
18+
import com.segment.analytics.kotlin.core.utilities.dateTimeNowString
1819
import com.segment.analytics.kotlin.core.utils.StubPlugin
1920
import com.segment.analytics.kotlin.core.utils.TestRunPlugin
2021
import com.segment.analytics.kotlin.core.utils.mockHTTPClient
@@ -62,6 +63,8 @@ internal class JavaAnalyticsTest {
6263
init {
6364
mockkStatic(Instant::class)
6465
every { Instant.now() } returns Date(0).toInstant()
66+
mockkStatic(::dateTimeNowString)
67+
every { dateTimeNowString() } returns Date(0).toInstant().toString()
6568
mockkStatic(UUID::class)
6669
every { UUID.randomUUID().toString() } returns "qwerty-qwerty-123"
6770
mockHTTPClient()

core/src/test/kotlin/com/segment/analytics/kotlin/core/utilities/EventsFileManagerTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ internal class EventsFileManagerTest{
2626
init {
2727
mockkStatic(Instant::class)
2828
every { Instant.now() } returns Date(0).toInstant()
29+
30+
mockkStatic(::dateTimeNowString)
31+
every { dateTimeNowString() } returns Date(0).toInstant().toString()
2932
}
3033

3134
@BeforeEach

0 commit comments

Comments
 (0)