From 2e7e88aa18acbc5fc8a098aa64af88ae8ca04521 Mon Sep 17 00:00:00 2001 From: Travis Wyatt Date: Wed, 22 Jul 2026 11:01:22 -0700 Subject: [PATCH] Drop `tuulbox` dependency --- gradle/libs.versions.toml | 1 - kable-core/build.gradle.kts | 1 - .../src/androidMain/kotlin/BluetoothState.kt | 1 - .../kotlin/BroadcastReceiverFlow.kt | 27 +++++++++++++++++++ samples/sensortag/bluetooth/build.gradle.kts | 1 - 5 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 kable-core/src/androidMain/kotlin/BroadcastReceiverFlow.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa066ffaf..5b5755e05 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,6 @@ mockk = { module = "io.mockk:mockk", version = "1.14.11" } robolectric = { module = "org.robolectric:robolectric", version = "4.16.1" } serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version = "1.11.0" } tomlkt = { module = "net.peanuuutz.tomlkt:tomlkt", version = "0.5.0" } -tuulbox-coroutines = { module = "com.juul.tuulbox:coroutines", version.ref = "tuulbox" } voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" } voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } diff --git a/kable-core/build.gradle.kts b/kable-core/build.gradle.kts index dd535c510..bd18fe596 100644 --- a/kable-core/build.gradle.kts +++ b/kable-core/build.gradle.kts @@ -88,7 +88,6 @@ kotlin { implementation(libs.androidx.core) implementation(libs.androidx.startup) implementation(libs.kotlin.parcelize.runtime) - implementation(libs.tuulbox.coroutines) } named("androidHostTest").dependencies { diff --git a/kable-core/src/androidMain/kotlin/BluetoothState.kt b/kable-core/src/androidMain/kotlin/BluetoothState.kt index 2a44487eb..f2d478f01 100644 --- a/kable-core/src/androidMain/kotlin/BluetoothState.kt +++ b/kable-core/src/androidMain/kotlin/BluetoothState.kt @@ -4,7 +4,6 @@ import android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED import android.bluetooth.BluetoothAdapter.ERROR import android.bluetooth.BluetoothAdapter.EXTRA_STATE import android.content.IntentFilter -import com.juul.tuulbox.coroutines.flow.broadcastReceiverFlow import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed diff --git a/kable-core/src/androidMain/kotlin/BroadcastReceiverFlow.kt b/kable-core/src/androidMain/kotlin/BroadcastReceiverFlow.kt new file mode 100644 index 000000000..354817287 --- /dev/null +++ b/kable-core/src/androidMain/kotlin/BroadcastReceiverFlow.kt @@ -0,0 +1,27 @@ +package com.juul.kable + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.RECEIVER_NOT_EXPORTED +import androidx.core.content.ContextCompat.RegisterReceiverFlags +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.callbackFlow + +// Copied from Tuulbox. +// https://github.com/JuulLabs/tuulbox/blob/8.1.0/coroutines/src/androidMain/kotlin/flow/BroadcastReceiverFlow.kt +internal fun broadcastReceiverFlow( + intentFilter: IntentFilter, + @RegisterReceiverFlags flags: Int = RECEIVER_NOT_EXPORTED, +): Flow = callbackFlow { + val broadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + trySend(intent) + } + } + ContextCompat.registerReceiver(applicationContext, broadcastReceiver, intentFilter, flags) + awaitClose { applicationContext.unregisterReceiver(broadcastReceiver) } +} diff --git a/samples/sensortag/bluetooth/build.gradle.kts b/samples/sensortag/bluetooth/build.gradle.kts index d3b9f61a1..72ed8835c 100644 --- a/samples/sensortag/bluetooth/build.gradle.kts +++ b/samples/sensortag/bluetooth/build.gradle.kts @@ -30,7 +30,6 @@ kotlin { androidMain.dependencies { implementation(libs.compose.activity) - implementation(libs.tuulbox.coroutines) } } }