diff --git a/android/android-studio/app/src/main/java/com/arduino/ide/mobile/project/SketchProject.kt b/android/android-studio/app/src/main/java/com/arduino/ide/mobile/project/SketchProject.kt index f169dd4..2faa984 100644 --- a/android/android-studio/app/src/main/java/com/arduino/ide/mobile/project/SketchProject.kt +++ b/android/android-studio/app/src/main/java/com/arduino/ide/mobile/project/SketchProject.kt @@ -1,6 +1,7 @@ package com.arduino.ide.mobile.project import android.content.Context +import android.util.Log import java.io.File /** @@ -83,10 +84,15 @@ class SketchProject( """.trimIndent() ) - val sketchFiles = files.map { (name, body) -> + val sketchFiles = files.mapNotNull { (name, body) -> val file = File(demoRoot, name) - file.writeText(body) - SketchFile(name = name, path = file.absolutePath, content = body) + runCatching { + file.writeText(body) + SketchFile(name = name, path = file.absolutePath, content = body) + }.getOrElse { error -> + Log.e("SketchProject", "Failed to seed demo sketch file $name", error) + null + } } return SketchProject("Blink", demoRoot, sketchFiles) diff --git a/android/android-studio/app/src/main/java/com/arduino/ide/mobile/snippets/SnippetRepository.kt b/android/android-studio/app/src/main/java/com/arduino/ide/mobile/snippets/SnippetRepository.kt index 7de3dfa..d5c2384 100644 --- a/android/android-studio/app/src/main/java/com/arduino/ide/mobile/snippets/SnippetRepository.kt +++ b/android/android-studio/app/src/main/java/com/arduino/ide/mobile/snippets/SnippetRepository.kt @@ -1,6 +1,7 @@ package com.arduino.ide.mobile.snippets import android.content.Context +import android.util.Log import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey @@ -62,15 +63,20 @@ class SnippetRepository( .map { prefs -> parseUserSnippets(prefs) } private suspend fun loadBundledSnippets(): List = withContext(dispatcher) { - val assetManager = context.assets - val directories = assetManager.list("snippets") ?: emptyArray() - val snippets = mutableListOf() - directories.forEach { assetFile -> - val stream = assetManager.open("snippets/$assetFile") - val content = stream.bufferedReader().use { it.readText() } - snippets += parseSnippetArray(JSONArray(content), isUserDefined = false) + runCatching { + val assetManager = context.assets + val directories = assetManager.list("snippets") ?: emptyArray() + val snippets = mutableListOf() + directories.forEach { assetFile -> + val stream = assetManager.open("snippets/$assetFile") + val content = stream.bufferedReader().use { it.readText() } + snippets += parseSnippetArray(JSONArray(content), isUserDefined = false) + } + snippets + }.getOrElse { error -> + Log.e("SnippetRepository", "Failed to load bundled snippets", error) + emptyList() } - snippets } private fun parseUserSnippets(prefs: Preferences): List {