diff options
Diffstat (limited to 'android-app/app/src')
3 files changed, 31 insertions, 9 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt index 4a28bb4..bf25dfc 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt @@ -89,9 +89,15 @@ class TrackRepository(context: Context) { suspend fun getPastTracks(): List<List<TrackPoint>> = withContext(Dispatchers.IO) { if (!pastTracksLoaded) { pastTracksLoaded = true + NavLogger.i("track", "getPastTracks: loading from storage (first call)") val stored = storage.loadAllTracks() + NavLogger.i("track", "getPastTracks: storage returned ${stored.size} tracks " + + "(points: ${stored.map { it.size }})") // Merge: put stored tracks behind any in-memory tracks from this session _pastTracks.addAll(stored) + NavLogger.i("track", "getPastTracks: total in memory=${_pastTracks.size}") + } else { + NavLogger.i("track", "getPastTracks: returning cached ${_pastTracks.size} tracks") } _pastTracks.toList() } diff --git a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackStorage.kt b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackStorage.kt index 3a04688..40ef6ea 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackStorage.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackStorage.kt @@ -119,21 +119,31 @@ class TrackStorage(private val context: Context) { "AND ${MediaStore.Files.FileColumns.DISPLAY_NAME} LIKE ?" val args = arrayOf("Documents/Nav/", "nav_%.gpx") - context.contentResolver.query(uri, projection, selection, args, null)?.use { cursor -> - val idCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID) - while (cursor.moveToNext()) { - val fileUri = android.net.Uri.withAppendedPath(uri, cursor.getLong(idCol).toString()) + val cursor = context.contentResolver.query(uri, projection, selection, args, null) + NavLogger.i("track", "loadViaMediaStore: cursor=${cursor?.count ?: "null"} rows") + cursor?.use { c -> + val idCol = c.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID) + while (c.moveToNext()) { + val id = c.getLong(idCol) + val fileUri = android.net.Uri.withAppendedPath(uri, id.toString()) + NavLogger.i("track", "loadViaMediaStore: parsing id=$id uri=$fileUri") runCatching { - context.contentResolver.openInputStream(fileUri)?.use { stream -> - val points = GpxParser.parse(stream) - if (points.isNotEmpty()) tracks.add(points) + val stream = context.contentResolver.openInputStream(fileUri) + if (stream == null) { + NavLogger.e("track", "loadViaMediaStore: openInputStream null for id=$id") + } else { + stream.use { s -> + val points = GpxParser.parse(s) + NavLogger.i("track", "loadViaMediaStore: id=$id → ${points.size} points") + if (points.isNotEmpty()) tracks.add(points) + } } }.onFailure { e -> - NavLogger.e("track", "load parse error: ${e.javaClass.simpleName}: ${e.message}") + NavLogger.e("track", "loadViaMediaStore: parse error id=$id: ${e.javaClass.simpleName}: ${e.message}") } } } - NavLogger.i("track", "loadViaMediaStore: ${tracks.size} tracks found") + NavLogger.i("track", "loadViaMediaStore: done — ${tracks.size} tracks loaded") return tracks } diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt index 502c44f..0cc9d3c 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt @@ -91,6 +91,12 @@ class MainViewModel( val vesselRepository get() = org.terst.nav.NavApplication.vesselRepository + init { + viewModelScope.launch { + _pastTracks.value = trackRepository.getPastTracks() + } + } + private val _thermalState = MutableStateFlow(ThermalState.OK) val thermalState: StateFlow<ThermalState> = _thermalState.asStateFlow() |
