From a1bdd09d4de310fbed33898c87da0c520ae3ae3e Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 20 Apr 2026 20:02:07 -0500 Subject: [PATCH] fix(fdroid): prevent NotImplementedError crash on firmware release fetch (#5197) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> --- .../org/meshtastic/app/di/FDroidNetworkModule.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/fdroid/kotlin/org/meshtastic/app/di/FDroidNetworkModule.kt b/app/src/fdroid/kotlin/org/meshtastic/app/di/FDroidNetworkModule.kt index fba7a417f..a32016972 100644 --- a/app/src/fdroid/kotlin/org/meshtastic/app/di/FDroidNetworkModule.kt +++ b/app/src/fdroid/kotlin/org/meshtastic/app/di/FDroidNetworkModule.kt @@ -25,12 +25,18 @@ import org.meshtastic.core.network.service.ApiService @Module class FDroidNetworkModule { + /** + * F-Droid builds intentionally avoid network calls to the Meshtastic API. + * + * We throw [UnsupportedOperationException] (an [Exception], not an [Error]) so that `safeCatching {}` in the + * repositories captures the failure and falls back to the bundled JSON assets instead of crashing the app. + */ @Single fun provideApiService(): ApiService = object : ApiService { override suspend fun getDeviceHardware(): List = - throw NotImplementedError("API calls to getDeviceHardware are not supported on Fdroid builds.") + throw UnsupportedOperationException("getDeviceHardware is not supported on F-Droid builds.") override suspend fun getFirmwareReleases(): NetworkFirmwareReleases = - throw NotImplementedError("API calls to getFirmwareReleases are not supported on Fdroid builds.") + throw UnsupportedOperationException("getFirmwareReleases is not supported on F-Droid builds.") } }