Skip to content

Commit 696bd7d

Browse files
committed
Create getDemoDataFromJson method and use it.
Change-Id: I19336b061e74a378cc70470fbd6af8ee4c7533e0
1 parent 5084e5c commit 696bd7d

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
package com.google.samples.apps.nowinandroid.core.network.demo
1818

1919
import JvmUnitTestDemoAssetManager
20-
import android.os.Build
20+
import android.os.Build.VERSION.SDK_INT
21+
import android.os.Build.VERSION_CODES.N
2122
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
2223
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO
2324
import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource
@@ -29,6 +30,7 @@ import kotlinx.coroutines.withContext
2930
import kotlinx.serialization.ExperimentalSerializationApi
3031
import kotlinx.serialization.json.Json
3132
import kotlinx.serialization.json.decodeFromStream
33+
import java.io.BufferedReader
3234
import javax.inject.Inject
3335

3436
/**
@@ -40,38 +42,35 @@ class DemoNiaNetworkDataSource @Inject constructor(
4042
private val assets: DemoAssetManager = JvmUnitTestDemoAssetManager,
4143
) : NiaNetworkDataSource {
4244

43-
@OptIn(ExperimentalSerializationApi::class)
4445
override suspend fun getTopics(ids: List<String>?): List<NetworkTopic> =
45-
withContext(ioDispatcher) {
46-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
47-
assets.open(TOPICS_ASSET).use(networkJson::decodeFromStream)
48-
} else {
49-
// Use decodeFromString to capability with API 24 below.
50-
// https://github.com/Kotlin/kotlinx.serialization/issues/2457#issuecomment-1786923342
51-
val topicsJsonString = assets.readText(TOPICS_ASSET)
52-
networkJson.decodeFromString(topicsJsonString)
53-
}
54-
}
46+
getDemoDataFromJson(TOPICS_ASSET)
5547

56-
@OptIn(ExperimentalSerializationApi::class)
5748
override suspend fun getNewsResources(ids: List<String>?): List<NetworkNewsResource> =
58-
withContext(ioDispatcher) {
59-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
60-
assets.open(NEWS_ASSET).use(networkJson::decodeFromStream)
61-
} else {
62-
// Use decodeFromString to capability with API 24 below.
63-
// https://github.com/Kotlin/kotlinx.serialization/issues/2457#issuecomment-1786923342
64-
val newsJsonString = assets.readText(NEWS_ASSET)
65-
networkJson.decodeFromString(newsJsonString)
66-
}
67-
}
49+
getDemoDataFromJson(NEWS_ASSET)
6850

6951
override suspend fun getTopicChangeList(after: Int?): List<NetworkChangeList> =
7052
getTopics().mapToChangeList(NetworkTopic::id)
7153

7254
override suspend fun getNewsResourceChangeList(after: Int?): List<NetworkChangeList> =
7355
getNewsResources().mapToChangeList(NetworkNewsResource::id)
7456

57+
/**
58+
* Get Demo data form a [fileName] Json file.
59+
*/
60+
@OptIn(ExperimentalSerializationApi::class)
61+
private suspend inline fun <reified T> getDemoDataFromJson(fileName: String): List<T> =
62+
withContext(ioDispatcher) {
63+
assets.open(fileName).use { inputStream ->
64+
if (SDK_INT >= N) {
65+
networkJson.decodeFromStream(inputStream)
66+
} // https://github.com/Kotlin/kotlinx.serialization/issues/2457#issuecomment-1786923342
67+
else {
68+
inputStream.bufferedReader().use(BufferedReader::readText)
69+
.let(networkJson::decodeFromString)
70+
}
71+
}
72+
}
73+
7574
companion object {
7675
private const val NEWS_ASSET = "news.json"
7776
private const val TOPICS_ASSET = "topics.json"

0 commit comments

Comments
 (0)