Skip to content

Commit beea40f

Browse files
committed
revert okhttp usage, use android.net.Uri
1 parent 1eaad0a commit beea40f

File tree

7 files changed

+40
-50
lines changed

7 files changed

+40
-50
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
distribution: 'zulu'
1919
java-version: 11
2020
- name: Assemble & Linters
21-
run: ./gradlew :demo:assembleDebug lint lintKotlin
21+
run: ./gradlew :core:testDebugUnitTest :demo:assembleDebug lint lintKotlin
2222
- uses: yutailang0119/action-android-lint@v3.1.0
2323
name: App Lint errors to annotations
2424
if: ${{ failure() }}

core/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ dependencies {
5454
implementation(libs.kotlin.stdlib)
5555
implementation(libs.kotlin.serialization)
5656
implementation(libs.compose.navigation)
57-
implementation(libs.okhttp)
5857

5958
testImplementation(libs.junit)
6059
testImplementation(libs.roboletric)

core/src/main/kotlin/com/kiwi/navigationcompose/typed/internal/Routing.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.kiwi.navigationcompose.typed.internal
22

3+
import android.net.Uri
34
import androidx.annotation.MainThread
45
import com.kiwi.navigationcompose.typed.Destination
56
import kotlinx.serialization.ExperimentalSerializationApi
67
import kotlinx.serialization.KSerializer
78
import kotlinx.serialization.SerializationStrategy
8-
import okhttp3.HttpUrl
99

1010
@ExperimentalSerializationApi
1111
internal fun createRouteSlug(serializer: KSerializer<*>): String =
@@ -38,12 +38,10 @@ internal fun <T : Destination> T.toRoute(): String {
3838
) {
3939
"Polymorphic serializer for $this is not registered. Use registerDestination<T>()."
4040
}
41-
val urlBuilder = HttpUrl.Builder().apply {
42-
scheme("https")
43-
host("a")
44-
addPathSegment(createRouteSlug(serializer))
41+
val urlBuilder = Uri.Builder().apply {
42+
appendPath(createRouteSlug(serializer))
4543
}
4644
val encoder = UrlEncoder(urlBuilder)
4745
encoder.encodeSerializableValue(serializer, this)
48-
return urlBuilder.build().toString().substring(10)
46+
return urlBuilder.build().toString().substring(1)
4947
}

core/src/main/kotlin/com/kiwi/navigationcompose/typed/internal/UrlEncoder.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.kiwi.navigationcompose.typed.internal
22

3+
import android.net.Uri
34
import kotlinx.serialization.ExperimentalSerializationApi
45
import kotlinx.serialization.SerializationStrategy
56
import kotlinx.serialization.descriptors.SerialDescriptor
67
import kotlinx.serialization.encoding.AbstractEncoder
78
import kotlinx.serialization.encoding.CompositeEncoder
89
import kotlinx.serialization.json.Json
910
import kotlinx.serialization.modules.SerializersModule
10-
import okhttp3.HttpUrl
1111

1212
@ExperimentalSerializationApi
1313
internal class UrlEncoder(
14-
private val url: HttpUrl.Builder,
14+
private val url: Uri.Builder,
1515
) : AbstractEncoder() {
1616
override val serializersModule: SerializersModule by lazy { getSerializersModule() }
1717

@@ -61,9 +61,9 @@ internal class UrlEncoder(
6161

6262
private fun appendValue(value: String) {
6363
if (elementOptional) {
64-
url.addQueryParameter(elementName, value)
64+
url.appendQueryParameter(elementName, value)
6565
} else {
66-
url.addPathSegment(value)
66+
url.appendPath(value)
6767
}
6868
}
6969
}

core/src/test/kotlin/com/kiwi/navigationcompose/typed/internal/RoutePatternTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal class RoutePatternTest {
3434
) : Destination
3535

3636
Assert.assertEquals(
37-
"com.kiwi.navigationcompose.typed.internal.RoutePatternTest.test.TestData/{a}/{c}/{e}/{g}/{i}/{k}/{m}?b={b}&d={d}&f={f}&h={h}&j={j}&l={l}&n={n}",
37+
"com.kiwi.navigationcompose.typed.internal.RoutePatternTest.test.TestData/{a}/{c}/{g}/{i}/{k}/{m}?b={b}&d={d}&e={e}&f={f}&h={h}&j={j}&l={l}&n={n}",
3838
createRoutePattern<TestData>(),
3939
)
4040
}

core/src/test/kotlin/com/kiwi/navigationcompose/typed/internal/UriEncoderTest.kt

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package com.kiwi.navigationcompose.typed.internal
22

3+
import android.net.Uri
34
import com.kiwi.navigationcompose.typed.internal.helpers.SubClass
45
import com.kiwi.navigationcompose.typed.internal.helpers.SubObject
56
import com.kiwi.navigationcompose.typed.internal.helpers.SubSealed
67
import kotlinx.serialization.ExperimentalSerializationApi
78
import kotlinx.serialization.Serializable
89
import kotlinx.serialization.serializer
9-
import okhttp3.HttpUrl
1010
import org.junit.Assert
1111
import org.junit.Test
12+
import org.junit.runner.RunWith
13+
import org.robolectric.RobolectricTestRunner
1214

1315
@OptIn(ExperimentalSerializationApi::class)
16+
@RunWith(RobolectricTestRunner::class)
17+
1418
internal class UriEncoderTest {
1519
@Test
1620
fun testValues() {
@@ -33,10 +37,7 @@ internal class UriEncoderTest {
3337
val n: SubSealed,
3438
)
3539

36-
val url = HttpUrl.Builder().apply {
37-
scheme("http")
38-
host("example.com")
39-
}
40+
val url = Uri.Builder()
4041
val encoder = UrlEncoder(url)
4142
val testData = TestData(
4243
a = 1,
@@ -57,23 +58,21 @@ internal class UriEncoderTest {
5758

5859
encoder.encodeSerializableValue(serializer(), testData)
5960

60-
val expectedUrl = HttpUrl.Builder().apply {
61-
scheme("http")
62-
host("example.com")
63-
addPathSegment("1")
64-
addPathSegment("2.23")
65-
addPathSegment("3")
66-
addPathSegment("true")
67-
addQueryParameter("e", "value")
68-
addPathSegment("4.0")
69-
addPathSegment("5")
70-
addPathSegment("6")
71-
addPathSegment("7")
72-
addPathSegment("[8,9]")
73-
addPathSegment("""{"10":"11"}""")
74-
addPathSegment("""{"int":12}""")
75-
addPathSegment("{}")
76-
addPathSegment("""{"type":"com.kiwi.navigationcompose.typed.internal.helpers.SubSealed.B","int":13}""")
61+
val expectedUrl = Uri.Builder().apply {
62+
appendPath("1")
63+
appendPath("2.23")
64+
appendPath("3")
65+
appendPath("true")
66+
appendQueryParameter("e", "value")
67+
appendPath("4.0")
68+
appendPath("5")
69+
appendPath("6")
70+
appendPath("7")
71+
appendPath("[8,9]")
72+
appendPath("""{"10":"11"}""")
73+
appendPath("""{"int":12}""")
74+
appendPath("{}")
75+
appendPath("""{"type":"com.kiwi.navigationcompose.typed.internal.helpers.SubSealed.B","int":13}""")
7776
}
7877
Assert.assertEquals(expectedUrl.toString(), url.toString())
7978
}
@@ -99,25 +98,20 @@ internal class UriEncoderTest {
9998
val n: SubSealed? = null,
10099
)
101100

102-
val url = HttpUrl.Builder().apply {
103-
scheme("http")
104-
host("example.com")
105-
}
101+
val url = Uri.Builder()
106102
val encoder = UrlEncoder(url)
107103
val testData = TestData()
108104

109105
encoder.encodeSerializableValue(serializer(), testData)
110106

111-
val expectedUrl = HttpUrl.Builder().apply {
112-
scheme("http")
113-
host("example.com")
114-
addQueryParameter("a", "1")
115-
addQueryParameter("c", "3")
116-
addQueryParameter("e", "value")
117-
addQueryParameter("g", "5")
118-
addQueryParameter("i", "7")
119-
addQueryParameter("k", """{"10":"11"}""")
120-
addQueryParameter("m", "{}")
107+
val expectedUrl = Uri.Builder().apply {
108+
appendQueryParameter("a", "1")
109+
appendQueryParameter("c", "3")
110+
appendQueryParameter("e", "value")
111+
appendQueryParameter("g", "5")
112+
appendQueryParameter("i", "7")
113+
appendQueryParameter("k", """{"10":"11"}""")
114+
appendQueryParameter("m", "{}")
121115
}
122116
Assert.assertEquals(expectedUrl.toString(), url.toString())
123117
}

gradle/libs.versions.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ kotlin-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-j
1919
compose-material = { module = "androidx.compose.material:material", version.ref = "compose-main" }
2020
compose-navigation = { module = "androidx.navigation:navigation-compose", version.ref = "compose-navigation" }
2121
junit = { module = "junit:junit", version = "4.13.2" }
22-
okhttp = { module = "com.squareup.okhttp3:okhttp", version = "4.10.0" }
2322
roboletric = { module = "org.robolectric:robolectric", version = "4.8.2" }
2423

2524
[bundles]

0 commit comments

Comments
 (0)