Skip to content

Commit

Permalink
Add coroutines executeAsync extension to OkHttp in sample (#2520)
Browse files Browse the repository at this point in the history
* Add coroutines executeAsync extension to OkHttp in sample
  • Loading branch information
yschimke authored Feb 17, 2025
1 parent e0aee23 commit b680de1
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 74 deletions.
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ mikepenz-markdown = "com.mikepenz:multiplatform-markdown-renderer:0.27.0"
moshi-adapters = { module = "com.squareup.moshi:moshi-adapters", version.ref = "moshi" }
moshi-kotlin = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" }
moshi-kotlin-codegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi" }
okhttp-coroutines = { module = "com.squareup.okhttp3:okhttp-coroutines", version.ref = "com-squareup-okhttp3" }
okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
oss-licenses-plugin = { module = "com.google.android.gms:oss-licenses-plugin", version.ref = "ossLicensesPlugin" }
osslicenses-parser = { module = "com.github.droibit.oss-licenses-android:parser", version.ref = "osslicenses" }
Expand Down
1 change: 1 addition & 0 deletions network-awareness/okhttp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ dependencies {

implementation(libs.kotlin.stdlib)
implementation(libs.com.squareup.okhttp3.okhttp)
implementation(libs.okhttp.coroutines)
implementation(libs.androidx.annotation)
api(libs.kotlinx.coroutines.core)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,13 @@ import com.google.android.horologist.networks.testdoubles.FakeNetworkRequester
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import okhttp3.Call
import okhttp3.Callback
import kotlinx.coroutines.test.runTest
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.coroutines.executeAsync
import org.junit.Assert.assertThrows
import org.junit.Test
import java.io.IOException
import java.util.concurrent.CompletableFuture
import java.util.concurrent.ExecutionException
import java.util.concurrent.TimeUnit
import kotlin.time.Duration.Companion.seconds

class NetworkSelectingCallFactoryTest {
Expand Down Expand Up @@ -114,7 +110,7 @@ class NetworkSelectingCallFactoryTest {
}

@Test
fun enqueueNormalConnectionForImages() {
fun enqueueNormalConnectionForImages() = runTest {
val request = Request.Builder()
.url("https://example.org/image.png")
.requestType(RequestType.ImageRequest)
Expand All @@ -128,7 +124,7 @@ class NetworkSelectingCallFactoryTest {
}

@Test
fun enqueueRequestHighBandwidthForDownloads() {
fun enqueueRequestHighBandwidthForDownloads() = runTest {
networkingRules.preferredNetworks[RequestType.MediaRequest(Download)] = NetworkType.Wifi
networkingRules.highBandwidthTypes[RequestType.MediaRequest(Download)] = true
networkRequester.supportedNetworks = listOf(NetworkType.Wifi)
Expand All @@ -149,7 +145,7 @@ class NetworkSelectingCallFactoryTest {
}

@Test
fun enqueueRequestHighBandwidthForDownloadsButFails() {
fun enqueueRequestHighBandwidthForDownloadsButFails(): Unit = runTest {
networkingRules.preferredNetworks[DownloadRequest] = NetworkType.Wifi
networkingRules.highBandwidthTypes[DownloadRequest] = true
networkingRules.validRequests[Pair(DownloadRequest, BT)] = false
Expand All @@ -160,32 +156,13 @@ class NetworkSelectingCallFactoryTest {
.requestType(RequestType.MediaRequest(Download))
.build()

val thrown = assertThrows(IOException::class.java) {
callFactory.newCall(request).executeAsync()
}
val result = runCatching { callFactory.newCall(request).executeAsync() }

assertThat(thrown).hasMessageThat().isEqualTo("Unable to use BT for media-download")
assertThat(result.isFailure).isTrue()
val throwable = result.exceptionOrNull()
assertThat(throwable).isInstanceOf(IOException::class.java)
assertThat(throwable).hasMessageThat().isEqualTo("Unable to use BT for media-download")

// assertThat(highBandwidthRequester.pinned.value).isNull()
}
}

private fun Call.executeAsync(): Response {
val future = CompletableFuture<Response>()

enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
future.completeExceptionally(e)
}

override fun onResponse(call: Call, response: Response) {
future.complete(response)
}
})

return try {
future.get(5, TimeUnit.SECONDS)
} catch (ee: ExecutionException) {
throw ee.cause!!
}
}
1 change: 1 addition & 0 deletions sample/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ dependencies {
implementation(libs.lottie.compose)

implementation(libs.com.squareup.okhttp3.logging.interceptor)
implementation(libs.okhttp.coroutines)

implementation(libs.compose.ui.toolingpreview)
implementation(libs.androidx.wear.tooling.preview)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import kotlinx.coroutines.launch
import okhttp3.Call
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.coroutines.executeAsync
import java.io.IOException

public class NetworkScreenViewModel(
Expand Down

0 comments on commit b680de1

Please sign in to comment.