11package dev.johnoreilly.peopleinspace.peopleinspace.glance
22
33import android.content.Context
4+ import android.content.Context.MODE_PRIVATE
45import android.graphics.Bitmap
56import androidx.compose.ui.graphics.ImageBitmap
67import androidx.compose.ui.graphics.asImageBitmap
8+ import androidx.core.content.ContextCompat.getDrawable
79import dev.johnoreilly.common.remote.IssPosition
810import dev.johnoreilly.common.repository.PeopleInSpaceRepositoryInterface
911import dev.johnoreilly.peopleinspace.R
1012import kotlinx.coroutines.Dispatchers
1113import kotlinx.coroutines.flow.first
1214import kotlinx.coroutines.launch
1315import kotlinx.coroutines.withContext
16+ import org.osmdroid.config.Configuration
1417import org.osmdroid.tileprovider.MapTileProviderBasic
1518import org.osmdroid.tileprovider.tilesource.TileSourceFactory
1619import org.osmdroid.util.GeoPoint
@@ -25,7 +28,6 @@ suspend fun fetchIssPosition(repository: PeopleInSpaceRepositoryInterface): GeoP
2528 val issPosition: IssPosition = repository.pollISSPosition().first()
2629
2730 val issPositionPoint = GeoPoint (issPosition.latitude, issPosition.longitude)
28- println (" ISS Position: $issPositionPoint " )
2931 return issPositionPoint
3032}
3133
@@ -39,31 +41,41 @@ suspend fun fetchMapBitmap(
3941): ImageBitmap {
4042 val stationMarker = IconOverlay (
4143 issPositionPoint,
42- context.resources. getDrawable(R .drawable.ic_iss, context.theme )
44+ getDrawable(context, R .drawable.ic_iss)
4345 )
4446
4547 val source = TileSourceFactory .DEFAULT_TILE_SOURCE
4648 val projection = Projection (zoomLevel, pWidth, pHeight, issPositionPoint, 0f , true , false , 0 , 0 )
4749
48- val bitmap = withContext(Dispatchers .Main ) {
49- suspendCoroutine<Bitmap > { cont ->
50- val mapSnapshot = MapSnapshot (
51- {
52- if (it.status == MapSnapshot .Status .CANVAS_OK ) {
53- val bitmap = Bitmap .createBitmap(it.bitmap)
54- cont.resume(bitmap)
55- }
56- },
57- MapSnapshot .INCLUDE_FLAG_UPTODATE or MapSnapshot .INCLUDE_FLAG_SCALED ,
58- MapTileProviderBasic (context, source, null ),
59- if (includeStationMarker) listOf (stationMarker) else listOf (),
60- projection
61- )
50+ Configuration .getInstance().load(
51+ context.applicationContext,
52+ context.getSharedPreferences(" osmdroid" , MODE_PRIVATE )
53+ )
54+
55+ val mapTileProvider = MapTileProviderBasic (context, source, null )
56+ try {
57+ val bitmap = withContext(Dispatchers .Main ) {
58+ suspendCoroutine { cont ->
59+ val mapSnapshot = MapSnapshot (
60+ {
61+ if (it.status == MapSnapshot .Status .CANVAS_OK ) {
62+ val bitmap = Bitmap .createBitmap(it.bitmap)
63+ cont.resume(bitmap)
64+ }
65+ },
66+ MapSnapshot .INCLUDE_FLAG_UPTODATE or MapSnapshot .INCLUDE_FLAG_SCALED ,
67+ mapTileProvider,
68+ if (includeStationMarker) listOf (stationMarker) else listOf (),
69+ projection
70+ )
6271
63- launch(Dispatchers .IO ) {
64- mapSnapshot.run ()
72+ launch(Dispatchers .IO ) {
73+ mapSnapshot.run ()
74+ }
6575 }
6676 }
77+ return bitmap.asImageBitmap()
78+ } finally {
79+ mapTileProvider.detach()
6780 }
68- return bitmap.asImageBitmap()
6981}
0 commit comments