Skip to content

Commit 7be234e

Browse files
authored
Refactor to support JVM (#13)
* move around modules, and add core-kotlin module * move context around, fix storage for jvm * add kotlin JVM sample app * rename module * rename packages * fix core tests * fix android tests * fix example app * fix example apps * code cleanup * fix some docs and rename test to tests * add documentation * clarify main.kt * move around some code * rename modules * fix conflicts after rebase from master and fix wildcard imports * fix tests
1 parent 77fedfe commit 7be234e

File tree

90 files changed

+1184
-1440
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+1184
-1440
lines changed

analytics-kotlin/src/test/java/com/segment/analytics/main/utils/Mocks.kt

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

analytics-kotlin/src/test/java/com/segment/analytics/main/utils/Utils.kt

Lines changed: 0 additions & 33 deletions
This file was deleted.
File renamed without changes.

analytics-kotlin/build.gradle renamed to android/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ android {
4545

4646
dependencies {
4747
// MAIN DEPS
48-
api project(":sovran-kotlin")
48+
api project(':core')
49+
api 'com.github.segmentio:sovran-kotlin:0.1.0'
4950
api "org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1"
5051
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
5152
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
File renamed without changes.
File renamed without changes.

analytics-kotlin/src/main/java/com/segment/analytics/AndroidAnalytics.kt renamed to android/src/main/java/com/segment/analytics/kotlin/android/AndroidAnalytics.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
package com.segment.analytics
1+
package com.segment.analytics.kotlin.android
22

33
import android.content.Context
44
import android.util.Log
5-
import com.segment.analytics.platform.plugins.LogType
6-
import com.segment.analytics.platform.plugins.Logger
7-
import com.segment.analytics.platform.plugins.android.AndroidContextPlugin
8-
import com.segment.analytics.platform.plugins.android.AndroidLifecyclePlugin
5+
import com.segment.analytics.kotlin.android.plugins.AndroidContextPlugin
6+
import com.segment.analytics.kotlin.android.plugins.AndroidLifecyclePlugin
7+
import com.segment.analytics.kotlin.core.Analytics
8+
import com.segment.analytics.kotlin.core.BaseEvent
9+
import com.segment.analytics.kotlin.core.Configuration
10+
import com.segment.analytics.kotlin.core.platform.plugins.LogType
11+
import com.segment.analytics.kotlin.core.platform.plugins.Logger
912
import kotlinx.coroutines.CoroutineDispatcher
1013
import kotlinx.coroutines.CoroutineScope
1114
import kotlinx.coroutines.Dispatchers
@@ -31,7 +34,8 @@ public fun Analytics(
3134
analyticsScope = coroutineScope,
3235
analyticsDispatcher = analyticsDispatcher,
3336
ioDispatcher = ioDispatcher,
34-
application = context
37+
application = context,
38+
storageProvider = AndroidStorageProvider
3539
)
3640
return Analytics(conf).apply {
3741
startup()
@@ -53,7 +57,8 @@ public fun Analytics(
5357
require(writeKey.isNotBlank()) { "writeKey cannot be blank " }
5458
val conf = Configuration(
5559
writeKey = writeKey,
56-
application = context
60+
application = context,
61+
storageProvider = AndroidStorageProvider
5762
)
5863
configs.invoke(conf)
5964
return Analytics(conf).apply {
@@ -62,7 +67,7 @@ public fun Analytics(
6267
}
6368

6469
// Logger instance that uses the android `Log` class
65-
object AndroidLogger: Logger("AndroidLogger") {
70+
object AndroidLogger : Logger("AndroidLogger") {
6671
override fun log(type: LogType, message: String, event: BaseEvent?) {
6772
when (type) {
6873
LogType.ERROR -> {
@@ -84,6 +89,5 @@ object AndroidLogger: Logger("AndroidLogger") {
8489
private fun Analytics.startup() {
8590
add(AndroidLogger)
8691
add(AndroidContextPlugin())
87-
8892
add(AndroidLifecyclePlugin())
8993
}

analytics-kotlin/src/main/java/com/segment/analytics/Storage.kt renamed to android/src/main/java/com/segment/analytics/kotlin/android/Storage.kt

Lines changed: 12 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,20 @@
1-
package com.segment.analytics
1+
package com.segment.analytics.kotlin.android
22

33
import android.content.Context
44
import android.content.SharedPreferences
5-
import com.segment.analytics.Storage.Companion.MAX_PAYLOAD_SIZE
6-
import com.segment.analytics.utilities.EventsFileManager
5+
import com.segment.analytics.kotlin.android.utilities.AndroidKVS
6+
import com.segment.analytics.kotlin.core.Analytics
7+
import com.segment.analytics.kotlin.core.Storage
8+
import com.segment.analytics.kotlin.core.Storage.Companion.MAX_PAYLOAD_SIZE
9+
import com.segment.analytics.kotlin.core.StorageProvider
10+
import com.segment.analytics.kotlin.core.System
11+
import com.segment.analytics.kotlin.core.UserInfo
12+
import com.segment.analytics.kotlin.core.utilities.EventsFileManager
713
import kotlinx.coroutines.CoroutineDispatcher
8-
import kotlinx.serialization.json.Json
9-
import kotlinx.serialization.json.JsonObject
1014
import sovran.kotlin.Store
1115
import sovran.kotlin.Subscriber
1216
import java.io.File
1317

14-
interface Storage {
15-
companion object {
16-
/** Our servers only accept payloads < 32KB. */
17-
const val MAX_PAYLOAD_SIZE = 32000 // 32KB.
18-
19-
/**
20-
* Our servers only accept batches < 500KB. This limit is 475KB to account for extra data that
21-
* is not present in payloads themselves, but is added later, such as `sentAt`, `integrations` and other json tokens.
22-
*/
23-
const val MAX_BATCH_SIZE = 475000 // 475KB.
24-
}
25-
26-
enum class Constants(val rawVal: String) {
27-
UserId("segment.userId"),
28-
Traits("segment.traits"),
29-
AnonymousId("segment.anonymousId"),
30-
Settings("segment.settings"),
31-
Events("segment.events"),
32-
AppVersion("segment.app.version"),
33-
AppBuild("segment.app.build")
34-
}
35-
36-
fun subscribeToStore()
37-
fun write(key: Constants, value: String)
38-
fun read(key: Constants): String?
39-
fun remove(key: Constants): Boolean
40-
fun removeFile(filePath: String): Boolean
41-
42-
fun userInfoUpdate(userInfo: UserInfo) {
43-
write(Constants.AnonymousId, userInfo.anonymousId)
44-
userInfo.userId?.let { write(Constants.UserId, it) }
45-
userInfo.traits?.let {
46-
write(
47-
Constants.Traits,
48-
Json.encodeToString(JsonObject.serializer(), it)
49-
)
50-
}
51-
}
52-
53-
fun systemUpdate(system: System) {
54-
system.settings?.let {
55-
write(
56-
Constants.Settings,
57-
Json.encodeToString(Settings.serializer(), it)
58-
)
59-
}
60-
}
61-
}
62-
63-
fun parseFilePaths(filePathStr: String?): List<String> {
64-
return if (filePathStr.isNullOrEmpty()) {
65-
emptyList()
66-
} else {
67-
filePathStr.split(",").map { it.trim() }
68-
}
69-
}
70-
7118
// Android specific
7219
class AndroidStorage(
7320
internal val analytics: Analytics,
@@ -80,7 +27,8 @@ class AndroidStorage(
8027
private val sharedPreferences: SharedPreferences =
8128
context.getSharedPreferences("analytics-android-$writeKey", Context.MODE_PRIVATE)
8229
private val storageDirectory: File = context.getDir("segment-disk-queue", Context.MODE_PRIVATE)
83-
internal val eventsFile = EventsFileManager(storageDirectory, writeKey, sharedPreferences)
30+
internal val eventsFile =
31+
EventsFileManager(storageDirectory, writeKey, AndroidKVS(sharedPreferences))
8432

8533
override fun subscribeToStore() {
8634
store.subscribe(
@@ -147,17 +95,7 @@ class AndroidStorage(
14795
}
14896
}
14997

150-
interface StorageProvider {
151-
fun getStorage(
152-
analytics: Analytics,
153-
store: Store,
154-
writeKey: String,
155-
ioDispatcher: CoroutineDispatcher,
156-
application: Any
157-
): Storage
158-
}
159-
160-
object ConcreteStorageProvider: StorageProvider {
98+
object AndroidStorageProvider : StorageProvider {
16199
override fun getStorage(
162100
analytics: Analytics,
163101
store: Store,

0 commit comments

Comments
 (0)