diff --git a/feature/voiceburst/build.gradle.kts b/feature/voiceburst/build.gradle.kts index 1e790269f..bf07655ca 100644 --- a/feature/voiceburst/build.gradle.kts +++ b/feature/voiceburst/build.gradle.kts @@ -22,15 +22,18 @@ plugins { alias(libs.plugins.meshtastic.kotlinx.serialization) } -// ─── Codec2 JNI detection ───────────────────────────────────────── -val codec2SoArm64 = File(projectDir, "src/androidMain/jniLibs/arm64-v8a/libcodec2.so") -val codec2JniArm64 = File(projectDir, "src/androidMain/jniLibs/arm64-v8a/libcodec2_jni.so") -val codec2Available = codec2SoArm64.exists() && codec2JniArm64.exists() +// --- Codec2 JNI detection --------------------------------------------------- +val codec2SoArm64 = File(projectDir, "src/androidMain/jniLibs/arm64-v8a/libcodec2.so") +val codec2JniArm64 = File(projectDir, "src/androidMain/jniLibs/arm64-v8a/libcodec2_jni.so") +val codec2SoX86_64 = File(projectDir, "src/androidMain/jniLibs/x86_64/libcodec2.so") +val codec2JniX86_64 = File(projectDir, "src/androidMain/jniLibs/x86_64/libcodec2_jni.so") +val codec2Available = (codec2SoArm64.exists() && codec2JniArm64.exists()) || + (codec2SoX86_64.exists() && codec2JniX86_64.exists()) if (codec2Available) { - logger.lifecycle(":feature:voiceburst — libcodec2.so + libcodec2_jni.so trovate") + logger.lifecycle(":feature:voiceburst -- libcodec2.so + libcodec2_jni.so found") } else { - logger.lifecycle(":feature:voiceburst — .so assenti → stub mode (esegui scripts/build_codec2.sh)") + logger.lifecycle(":feature:voiceburst -- .so not found -> stub mode (run scripts/build_codec2.sh)") } kotlin { @@ -73,6 +76,6 @@ kotlin { } } -// ─── NESSUN externalNativeBuild ─────────────────────────────────── -// Le .so prebuilt in jniLibs/ vengono incluse automaticamente da AGP. -// Il JNI wrapper è compilato da scripts/build_codec2.sh. \ No newline at end of file +// No externalNativeBuild block needed. +// Prebuilt .so files in jniLibs/ are packaged automatically by AGP. +// The JNI wrapper is compiled separately via scripts/build_codec2.sh. diff --git a/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/audio/AndroidAudioRecorder.kt b/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/audio/AndroidAudioRecorder.kt index 9406ff9e3..d53f93074 100644 --- a/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/audio/AndroidAudioRecorder.kt +++ b/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/audio/AndroidAudioRecorder.kt @@ -143,7 +143,7 @@ class AndroidAudioRecorder( Logger.e(e, tag = TAG) { "Error during recording" } onError(e) } finally { - record.stop() + runCatching { record.stop() } // guard against IllegalStateException on early-stop record.release() audioRecord = null keepRecording = false diff --git a/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/repository/AndroidVoiceBurstRepository.kt b/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/repository/AndroidVoiceBurstRepository.kt index 6e1c0ff54..8fd7c336e 100644 --- a/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/repository/AndroidVoiceBurstRepository.kt +++ b/feature/voiceburst/src/androidMain/kotlin/org/meshtastic/feature/voiceburst/repository/AndroidVoiceBurstRepository.kt @@ -71,7 +71,7 @@ class AndroidVoiceBurstRepository( // ─── Feature flag ───────────────────────────────────────────────────────── private val featureEnabledFlow = dataStore.data - .map { prefs -> prefs[KEY_FEATURE_ENABLED] ?: true } // Default ON + .map { prefs -> prefs[KEY_FEATURE_ENABLED] ?: false } // Default OFF (experimental opt-in) override val isFeatureEnabled: StateFlow = featureEnabledFlow.stateIn(