diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index adacd0c4..493cc5bc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: cache gradle dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.gradle/caches @@ -49,7 +49,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: cache gradle dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.gradle/caches @@ -73,7 +73,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: cache gradle dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.gradle/caches diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 607056e0..742d0f40 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: cache gradle dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.gradle/caches diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 707e00eb..b65c32cd 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -13,7 +13,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: cache gradle dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.gradle/caches diff --git a/android/src/main/java/com/segment/analytics/kotlin/android/Storage.kt b/android/src/main/java/com/segment/analytics/kotlin/android/Storage.kt index 9eae7a47..7dde9516 100644 --- a/android/src/main/java/com/segment/analytics/kotlin/android/Storage.kt +++ b/android/src/main/java/com/segment/analytics/kotlin/android/Storage.kt @@ -6,7 +6,9 @@ import com.segment.analytics.kotlin.android.utilities.AndroidKVS import com.segment.analytics.kotlin.core.Analytics import com.segment.analytics.kotlin.core.Storage import com.segment.analytics.kotlin.core.StorageProvider +import com.segment.analytics.kotlin.core.utilities.EventStream import com.segment.analytics.kotlin.core.utilities.FileEventStream +import com.segment.analytics.kotlin.core.utilities.KVS import com.segment.analytics.kotlin.core.utilities.StorageImpl import kotlinx.coroutines.CoroutineDispatcher import sovran.kotlin.Store @@ -14,12 +16,12 @@ import sovran.kotlin.Store @Deprecated("Use StorageProvider to create storage for Android instead") class AndroidStorage( context: Context, - private val store: Store, + store: Store, writeKey: String, - private val ioDispatcher: CoroutineDispatcher, + ioDispatcher: CoroutineDispatcher, directory: String? = null, subject: String? = null -) : StorageImpl( +) : AndroidStorageImpl( propertiesFile = AndroidKVS(context.getSharedPreferences("analytics-android-$writeKey", Context.MODE_PRIVATE)), eventStream = FileEventStream(context.getDir(directory ?: "segment-disk-queue", Context.MODE_PRIVATE)), store = store, @@ -28,6 +30,38 @@ class AndroidStorage( ioDispatcher = ioDispatcher ) +open class AndroidStorageImpl( + propertiesFile: KVS, + eventStream: EventStream, + store: Store, + writeKey: String, + fileIndexKey: String, + ioDispatcher: CoroutineDispatcher +) : StorageImpl( + propertiesFile = propertiesFile, + eventStream = eventStream, + store = store, + writeKey = writeKey, + fileIndexKey = fileIndexKey, + ioDispatcher = ioDispatcher +) { + override fun read(key: Storage.Constants): String? { + return if (key == Storage.Constants.LegacyAppBuild) { + // The legacy app build number was stored as an integer so we have to get it + // as an integer and convert it to a String. + val noBuild = -1 + val build = propertiesFile.get(key.rawVal, noBuild) + if (build != noBuild) { + build.toString() + } else { + null + } + } else { + super.read(key) + } + } +} + object AndroidStorageProvider : StorageProvider { override fun createStorage(vararg params: Any): Storage { @@ -51,6 +85,6 @@ object AndroidStorageProvider : StorageProvider { val propertiesFile = AndroidKVS(sharedPreferences) val eventStream = FileEventStream(eventDirectory) - return StorageImpl(propertiesFile, eventStream, analytics.store, config.writeKey, fileIndexKey, analytics.fileIODispatcher) + return AndroidStorageImpl(propertiesFile, eventStream, analytics.store, config.writeKey, fileIndexKey, analytics.fileIODispatcher) } } \ No newline at end of file diff --git a/android/src/test/java/com/segment/analytics/kotlin/android/StorageTests.kt b/android/src/test/java/com/segment/analytics/kotlin/android/StorageTests.kt index 67499c7d..9245434d 100644 --- a/android/src/test/java/com/segment/analytics/kotlin/android/StorageTests.kt +++ b/android/src/test/java/com/segment/analytics/kotlin/android/StorageTests.kt @@ -189,6 +189,12 @@ class StorageTests { androidStorage.remove(Storage.Constants.AppVersion) assertEquals(null, map["segment.app.version"]) } + + @Test + fun `test legacy app build`() = runTest { + map["build"] = 100 + assertEquals("100", androidStorage.read(Storage.Constants.LegacyAppBuild)) + } } @Nested diff --git a/core/src/main/java/com/segment/analytics/kotlin/core/utilities/StorageImpl.kt b/core/src/main/java/com/segment/analytics/kotlin/core/utilities/StorageImpl.kt index f1b152d3..0642c764 100644 --- a/core/src/main/java/com/segment/analytics/kotlin/core/utilities/StorageImpl.kt +++ b/core/src/main/java/com/segment/analytics/kotlin/core/utilities/StorageImpl.kt @@ -24,7 +24,7 @@ import java.io.InputStream * for events storage */ open class StorageImpl( - internal val propertiesFile: KVS, + val propertiesFile: KVS, internal val eventStream: EventStream, private val store: Store, private val writeKey: String,