diff --git a/app/src/main/kotlin/org/meshtastic/app/di/AppKoinModule.kt b/app/src/main/kotlin/org/meshtastic/app/di/AppKoinModule.kt
index 9cfb92cfb..c907a05fd 100644
--- a/app/src/main/kotlin/org/meshtastic/app/di/AppKoinModule.kt
+++ b/app/src/main/kotlin/org/meshtastic/app/di/AppKoinModule.kt
@@ -37,6 +37,7 @@ import org.meshtastic.core.database.di.CoreDatabaseAndroidModule
import org.meshtastic.core.database.di.CoreDatabaseModule
import org.meshtastic.core.datastore.di.CoreDatastoreAndroidModule
import org.meshtastic.core.datastore.di.CoreDatastoreModule
+import org.meshtastic.core.network.di.CoreNetworkAndroidModule
import org.meshtastic.core.network.di.CoreNetworkModule
import org.meshtastic.core.prefs.di.CorePrefsAndroidModule
import org.meshtastic.core.prefs.di.CorePrefsModule
@@ -44,7 +45,7 @@ import org.meshtastic.core.service.di.CoreServiceAndroidModule
import org.meshtastic.core.service.di.CoreServiceModule
import org.meshtastic.core.ui.di.CoreUiModule
import org.meshtastic.feature.connections.di.FeatureConnectionsModule
-import org.meshtastic.feature.connections.repository.ProbeTableProvider
+import org.meshtastic.core.network.repository.ProbeTableProvider
import org.meshtastic.feature.firmware.di.FeatureFirmwareModule
import org.meshtastic.feature.intro.di.FeatureIntroModule
import org.meshtastic.feature.map.di.FeatureMapModule
@@ -72,6 +73,7 @@ import org.meshtastic.feature.settings.di.FeatureSettingsModule
CoreServiceModule::class,
CoreServiceAndroidModule::class,
CoreNetworkModule::class,
+ CoreNetworkAndroidModule::class,
CoreUiModule::class,
FeatureNodeModule::class,
FeatureMessagingModule::class,
diff --git a/conductor/tracks/extract_services_20260317/plan.md b/conductor/tracks/extract_services_20260317/plan.md
index 821f7890e..c2e582188 100644
--- a/conductor/tracks/extract_services_20260317/plan.md
+++ b/conductor/tracks/extract_services_20260317/plan.md
@@ -19,9 +19,9 @@
- [x] Task: Conductor - User Manual Verification 'Extraction to core:service' (Protocol in workflow.md)
## Phase 3: Extraction to `core:network`
-- [ ] Task: Move Radio connection and networking files from `app` to `core:network/androidMain`
- - [ ] Move the files
- - [ ] Update imports and Koin injections
+- [~] Task: Move Radio connection and networking files from `app` to `core:network/androidMain`
+ - [x] Move the files
+ - [x] Update imports and Koin injections
- [ ] Task: Abstract shared radio/network logic into `core:network/commonMain`
- [ ] Write failing tests for abstracted radio logic (TDD Red)
- [ ] Extract platform-agnostic business logic (TDD Green)
diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts
index 06ac5016b..4fd91682f 100644
--- a/core/network/build.gradle.kts
+++ b/core/network/build.gradle.kts
@@ -51,7 +51,10 @@ kotlin {
val jvmMain by getting { dependencies { implementation(libs.ktor.client.java) } }
androidMain.dependencies {
+ implementation(projects.core.ble)
+ implementation(projects.core.prefs)
implementation(libs.org.eclipse.paho.client.mqttv3)
+ implementation(libs.usb.serial.android)
implementation(libs.coil.network.okhttp)
implementation(libs.coil.svg)
implementation(libs.ktor.client.okhttp)
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/AndroidRadioInterfaceService.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/AndroidRadioInterfaceService.kt
similarity index 97%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/AndroidRadioInterfaceService.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/AndroidRadioInterfaceService.kt
index 88d739fe0..78da98714 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/AndroidRadioInterfaceService.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/AndroidRadioInterfaceService.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import android.app.Application
import android.provider.Settings
@@ -37,7 +37,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import org.koin.core.annotation.Named
import org.koin.core.annotation.Single
-import org.meshtastic.app.BuildConfig
+import org.meshtastic.core.common.BuildConfigProvider
import org.meshtastic.core.ble.BluetoothRepository
import org.meshtastic.core.common.util.BinaryLogFile
import org.meshtastic.core.common.util.handledLaunch
@@ -53,7 +53,7 @@ import org.meshtastic.core.repository.PlatformAnalytics
import org.meshtastic.core.repository.RadioInterfaceService
import org.meshtastic.core.repository.RadioPrefs
import org.meshtastic.core.repository.RadioTransport
-import org.meshtastic.feature.connections.repository.NetworkRepository
+import org.meshtastic.core.network.repository.NetworkRepository
import org.meshtastic.proto.Heartbeat
import org.meshtastic.proto.ToRadio
@@ -73,6 +73,7 @@ class AndroidRadioInterfaceService(
private val dispatchers: CoroutineDispatchers,
private val bluetoothRepository: BluetoothRepository,
private val networkRepository: NetworkRepository,
+ private val buildConfigProvider: BuildConfigProvider,
@Named("ProcessLifecycle") private val processLifecycle: Lifecycle,
private val radioPrefs: RadioPrefs,
private val interfaceFactory: Lazy,
@@ -187,7 +188,7 @@ class AndroidRadioInterfaceService(
interfaceFactory.value.toInterfaceAddress(interfaceId, rest)
override fun isMockInterface(): Boolean =
- BuildConfig.DEBUG || Settings.System.getString(context.contentResolver, "firebase.test.lab") == "true"
+ buildConfigProvider.isDebug || Settings.System.getString(context.contentResolver, "firebase.test.lab") == "true"
override fun getDeviceAddress(): String? {
// If the user has unpaired our device, treat things as if we don't have one
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterface.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterface.kt
similarity index 99%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterface.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterface.kt
index b37fa1c53..46b6aa349 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterface.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterface.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import android.annotation.SuppressLint
import co.touchlab.kermit.Logger
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterfaceFactory.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceFactory.kt
similarity index 97%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterfaceFactory.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceFactory.kt
index 341fe1afe..26956824c 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterfaceFactory.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceFactory.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.ble.BleConnectionFactory
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterfaceSpec.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceSpec.kt
similarity index 97%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterfaceSpec.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceSpec.kt
index aaa39b9bd..461ac4b65 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/BleRadioInterfaceSpec.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceSpec.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceFactory.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceFactory.kt
similarity index 98%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceFactory.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceFactory.kt
index 91f16e0d9..47a1365d2 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceFactory.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceFactory.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.model.InterfaceId
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceFactorySpi.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceFactorySpi.kt
similarity index 96%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceFactorySpi.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceFactorySpi.kt
index b9856af82..5354f5500 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceFactorySpi.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceFactorySpi.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.meshtastic.core.repository.RadioTransport
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceSpec.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceSpec.kt
similarity index 96%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceSpec.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceSpec.kt
index 7ac3619da..aec9ec667 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/InterfaceSpec.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/InterfaceSpec.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.meshtastic.core.repository.RadioInterfaceService
import org.meshtastic.core.repository.RadioTransport
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterface.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterface.kt
similarity index 99%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterface.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterface.kt
index 776729bba..8de3000af 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterface.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterface.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import co.touchlab.kermit.Logger
import kotlinx.coroutines.delay
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterfaceFactory.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterfaceFactory.kt
similarity index 95%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterfaceFactory.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterfaceFactory.kt
index 5f8328d3a..492b5782c 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterfaceFactory.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterfaceFactory.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterfaceSpec.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterfaceSpec.kt
similarity index 96%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterfaceSpec.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterfaceSpec.kt
index 13dcadd50..0f77cb5dc 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/MockInterfaceSpec.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/MockInterfaceSpec.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterface.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterface.kt
similarity index 95%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterface.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterface.kt
index e9eed976a..27348635c 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterface.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterface.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.meshtastic.core.repository.RadioTransport
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterfaceFactory.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterfaceFactory.kt
similarity index 95%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterfaceFactory.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterfaceFactory.kt
index 56d58b846..5d9991e34 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterfaceFactory.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterfaceFactory.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterfaceSpec.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterfaceSpec.kt
similarity index 96%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterfaceSpec.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterfaceSpec.kt
index 149a2469a..df77578bf 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/NopInterfaceSpec.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/NopInterfaceSpec.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterface.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterface.kt
similarity index 95%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterface.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterface.kt
index c1f509499..8356e8a59 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterface.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterface.kt
@@ -14,14 +14,14 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import co.touchlab.kermit.Logger
import org.meshtastic.core.common.util.nowMillis
import org.meshtastic.core.repository.RadioInterfaceService
-import org.meshtastic.feature.connections.repository.SerialConnection
-import org.meshtastic.feature.connections.repository.SerialConnectionListener
-import org.meshtastic.feature.connections.repository.UsbRepository
+import org.meshtastic.core.network.repository.SerialConnection
+import org.meshtastic.core.network.repository.SerialConnectionListener
+import org.meshtastic.core.network.repository.UsbRepository
import java.util.concurrent.atomic.AtomicReference
/** An interface that assumes we are talking to a meshtastic device via USB serial */
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterfaceFactory.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterfaceFactory.kt
similarity index 90%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterfaceFactory.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterfaceFactory.kt
index c7a123cc3..830358c16 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterfaceFactory.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterfaceFactory.kt
@@ -14,11 +14,11 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
-import org.meshtastic.feature.connections.repository.UsbRepository
+import org.meshtastic.core.network.repository.UsbRepository
/** Factory for creating `SerialInterface` instances. */
@Single
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterfaceSpec.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterfaceSpec.kt
similarity index 94%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterfaceSpec.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterfaceSpec.kt
index 54a44485b..b00491444 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/SerialInterfaceSpec.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/SerialInterfaceSpec.kt
@@ -14,13 +14,13 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import android.hardware.usb.UsbManager
import com.hoho.android.usbserial.driver.UsbSerialDriver
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
-import org.meshtastic.feature.connections.repository.UsbRepository
+import org.meshtastic.core.network.repository.UsbRepository
/** Serial/USB interface backend implementation. */
@Single
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/StreamInterface.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/StreamInterface.kt
similarity index 98%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/StreamInterface.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/StreamInterface.kt
index 477bd50d2..7414def38 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/StreamInterface.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/StreamInterface.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import co.touchlab.kermit.Logger
import kotlinx.coroutines.launch
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterface.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterface.kt
similarity index 98%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterface.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterface.kt
index 8217302ce..adab96d4d 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterface.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterface.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import co.touchlab.kermit.Logger
import org.meshtastic.core.common.util.handledLaunch
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterfaceFactory.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterfaceFactory.kt
similarity index 96%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterfaceFactory.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterfaceFactory.kt
index b11916940..003294448 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterfaceFactory.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterfaceFactory.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.di.CoroutineDispatchers
diff --git a/app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterfaceSpec.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterfaceSpec.kt
similarity index 96%
rename from app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterfaceSpec.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterfaceSpec.kt
index b48ee826c..2539bc13c 100644
--- a/app/src/main/kotlin/org/meshtastic/app/repository/radio/TCPInterfaceSpec.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/TCPInterfaceSpec.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import org.koin.core.annotation.Single
import org.meshtastic.core.repository.RadioInterfaceService
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/ConnectivityManager.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/ConnectivityManager.kt
similarity index 97%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/ConnectivityManager.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/ConnectivityManager.kt
index e245f2419..559b873d3 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/ConnectivityManager.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/ConnectivityManager.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.net.ConnectivityManager
import android.net.Network
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/NetworkRepository.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/NetworkRepository.kt
similarity index 98%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/NetworkRepository.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/NetworkRepository.kt
index f44f7f173..2e0f797ef 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/NetworkRepository.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/NetworkRepository.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.net.ConnectivityManager
import android.net.nsd.NsdManager
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/NsdManager.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/NsdManager.kt
similarity index 99%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/NsdManager.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/NsdManager.kt
index 6e7bf2eec..ab3926510 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/NsdManager.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/NsdManager.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.annotation.SuppressLint
import android.net.nsd.NsdManager
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/ProbeTableProvider.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/ProbeTableProvider.kt
similarity index 96%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/ProbeTableProvider.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/ProbeTableProvider.kt
index 7d091f2ff..433d96de5 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/ProbeTableProvider.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/ProbeTableProvider.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import com.hoho.android.usbserial.driver.CdcAcmSerialDriver
import com.hoho.android.usbserial.driver.ProbeTable
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnection.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnection.kt
similarity index 95%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnection.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnection.kt
index cb9dc679b..2ec10b7f1 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnection.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnection.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
/** USB serial connection. */
interface SerialConnection : AutoCloseable {
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnectionImpl.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnectionImpl.kt
similarity index 98%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnectionImpl.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnectionImpl.kt
index a06d5492d..e2d787920 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnectionImpl.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnectionImpl.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.hardware.usb.UsbManager
import co.touchlab.kermit.Logger
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnectionListener.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnectionListener.kt
similarity index 95%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnectionListener.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnectionListener.kt
index 4dbc2b90d..b56236f5b 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/SerialConnectionListener.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/SerialConnectionListener.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
/** Callbacks indicating state changes in the USB serial connection. */
interface SerialConnectionListener {
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbBroadcastReceiver.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbBroadcastReceiver.kt
similarity index 97%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbBroadcastReceiver.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbBroadcastReceiver.kt
index d472e3bf8..79d09639a 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbBroadcastReceiver.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbBroadcastReceiver.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.content.BroadcastReceiver
import android.content.Context
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbManager.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbManager.kt
similarity index 97%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbManager.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbManager.kt
index 66b3bb515..b36c5c3e9 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbManager.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbManager.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.content.BroadcastReceiver
import android.content.Context
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbRepository.kt b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbRepository.kt
similarity index 98%
rename from feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbRepository.kt
rename to core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbRepository.kt
index e73871336..b4773dff3 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/repository/UsbRepository.kt
+++ b/core/network/src/androidMain/kotlin/org/meshtastic/core/network/repository/UsbRepository.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
import android.app.Application
import android.hardware.usb.UsbDevice
diff --git a/core/network/src/androidUnitTest/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceTest.kt b/core/network/src/androidUnitTest/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceTest.kt
index 706a47340..457a3a9d9 100644
--- a/core/network/src/androidUnitTest/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceTest.kt
+++ b/core/network/src/androidUnitTest/kotlin/org/meshtastic/core/network/radio/BleRadioInterfaceTest.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.app.repository.radio
+package org.meshtastic.core.network.radio
import io.mockk.coEvery
import io.mockk.every
diff --git a/feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/repository/NetworkConstants.kt b/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/NetworkConstants.kt
similarity index 93%
rename from feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/repository/NetworkConstants.kt
rename to core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/NetworkConstants.kt
index 8a7cab5b6..e35abf554 100644
--- a/feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/repository/NetworkConstants.kt
+++ b/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/NetworkConstants.kt
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.meshtastic.feature.connections.repository
+package org.meshtastic.core.network.repository
object NetworkConstants {
const val SERVICE_PORT = 4403
diff --git a/feature/connections/build.gradle.kts b/feature/connections/build.gradle.kts
index 6b43d6376..292ebfa15 100644
--- a/feature/connections/build.gradle.kts
+++ b/feature/connections/build.gradle.kts
@@ -50,6 +50,7 @@ kotlin {
implementation(projects.core.service)
implementation(projects.core.ui)
implementation(projects.core.ble)
+ implementation(projects.core.network)
implementation(projects.feature.settings)
implementation(libs.jetbrains.lifecycle.viewmodel.compose)
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/AndroidScannerViewModel.kt b/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/AndroidScannerViewModel.kt
index fd97362c8..d701930ad 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/AndroidScannerViewModel.kt
+++ b/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/AndroidScannerViewModel.kt
@@ -32,7 +32,7 @@ import org.meshtastic.core.repository.ServiceRepository
import org.meshtastic.feature.connections.model.AndroidUsbDeviceData
import org.meshtastic.feature.connections.model.DeviceListEntry
import org.meshtastic.feature.connections.model.GetDiscoveredDevicesUseCase
-import org.meshtastic.feature.connections.repository.UsbRepository
+import org.meshtastic.core.network.repository.UsbRepository
@KoinViewModel
@Suppress("LongParameterList", "TooManyFunctions")
diff --git a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/domain/usecase/AndroidGetDiscoveredDevicesUseCase.kt b/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/domain/usecase/AndroidGetDiscoveredDevicesUseCase.kt
index 5289f10c3..6a5ec0528 100644
--- a/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/domain/usecase/AndroidGetDiscoveredDevicesUseCase.kt
+++ b/feature/connections/src/androidMain/kotlin/org/meshtastic/feature/connections/domain/usecase/AndroidGetDiscoveredDevicesUseCase.kt
@@ -38,9 +38,9 @@ import org.meshtastic.feature.connections.model.DeviceListEntry
import org.meshtastic.feature.connections.model.DiscoveredDevices
import org.meshtastic.feature.connections.model.GetDiscoveredDevicesUseCase
import org.meshtastic.feature.connections.model.getMeshtasticShortName
-import org.meshtastic.feature.connections.repository.NetworkRepository
-import org.meshtastic.feature.connections.repository.NetworkRepository.Companion.toAddressString
-import org.meshtastic.feature.connections.repository.UsbRepository
+import org.meshtastic.core.network.repository.NetworkRepository
+import org.meshtastic.core.network.repository.NetworkRepository.Companion.toAddressString
+import org.meshtastic.core.network.repository.UsbRepository
import java.util.Locale
@Suppress("LongParameterList")
diff --git a/feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/ui/components/NetworkDevices.kt b/feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/ui/components/NetworkDevices.kt
index ce530bac7..e179941f3 100644
--- a/feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/ui/components/NetworkDevices.kt
+++ b/feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/ui/components/NetworkDevices.kt
@@ -60,7 +60,7 @@ import org.meshtastic.core.resources.no_network_devices_found
import org.meshtastic.core.resources.recent_network_devices
import org.meshtastic.feature.connections.ScannerViewModel
import org.meshtastic.feature.connections.model.DeviceListEntry
-import org.meshtastic.feature.connections.repository.NetworkConstants
+import org.meshtastic.core.network.repository.NetworkConstants
@OptIn(ExperimentalMaterial3Api::class)
@Composable