Skip to content

Commit 715fe75

Browse files
authored
Simplify example attribution handling and add overlay attribution tracking (#8)
1 parent 232d963 commit 715fe75

File tree

10 files changed

+31
-95
lines changed
  • examples
    • Example01Pan/src/main/kotlin/de/afarber/openmapview/example01pan
    • Example02Zoom/src/main/kotlin/de/afarber/openmapview/example02zoom
    • Example03Markers/src/main/kotlin/de/afarber/openmapview/example03markers
    • Example04Polylines/src/main/kotlin/de/afarber/openmapview/example04polylines
    • Example06Clicks/src/main/kotlin/de/afarber/openmapview/example06clicks
    • Example07DraggableMarkers/src/main/kotlin/de/afarber/openmapview/example07draggablemarkers
    • Example08Circles/src/main/kotlin/de/afarber/openmapview/example08circles
    • Example09Overlays/src/main/kotlin/de/afarber/openmapview/example09overlays
    • Example11MapTypes/src/main/kotlin/de/afarber/openmapview/example11maptypes
  • openmapview/src/main/kotlin/de/afarber/openmapview

10 files changed

+31
-95
lines changed

examples/Example01Pan/src/main/kotlin/de/afarber/openmapview/example01pan/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example01pan
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import androidx.activity.ComponentActivity
1312
import androidx.activity.compose.setContent
@@ -18,7 +17,6 @@ import androidx.compose.runtime.Composable
1817
import androidx.compose.ui.Modifier
1918
import androidx.compose.ui.platform.LocalContext
2019
import androidx.compose.ui.viewinterop.AndroidView
21-
import androidx.core.net.toUri
2220
import de.afarber.openmapview.LatLng
2321
import de.afarber.openmapview.OpenMapView
2422

@@ -51,15 +49,6 @@ fun MapViewScreen() {
5149

5250
setCenter(LatLng(51.4661, 7.2491)) // Bochum, Germany
5351
setZoom(14.0f)
54-
55-
// Set attribution click listener to open OSM copyright page
56-
setOnAttributionClickListener {
57-
val intent = Intent(
58-
Intent.ACTION_VIEW,
59-
"https://www.openstreetmap.org/copyright".toUri(),
60-
)
61-
context.startActivity(intent)
62-
}
6352
}
6453
},
6554
modifier = Modifier.fillMaxSize(),

examples/Example02Zoom/src/main/kotlin/de/afarber/openmapview/example02zoom/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example02zoom
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import androidx.activity.ComponentActivity
1312
import androidx.activity.compose.setContent
@@ -27,7 +26,6 @@ import androidx.compose.ui.Modifier
2726
import androidx.compose.ui.platform.LocalContext
2827
import androidx.compose.ui.unit.dp
2928
import androidx.compose.ui.viewinterop.AndroidView
30-
import androidx.core.net.toUri
3129
import de.afarber.openmapview.LatLng
3230
import de.afarber.openmapview.OpenMapView
3331
import kotlin.math.roundToInt
@@ -73,15 +71,6 @@ fun MapViewScreen() {
7371
setOnCameraMoveListener {
7472
zoomLevel = getZoom()
7573
}
76-
77-
// Set attribution click listener to open OSM copyright page
78-
setOnAttributionClickListener {
79-
val intent = Intent(
80-
Intent.ACTION_VIEW,
81-
"https://www.openstreetmap.org/copyright".toUri(),
82-
)
83-
context.startActivity(intent)
84-
}
8574
}
8675
},
8776
modifier = Modifier.fillMaxSize(),

examples/Example03Markers/src/main/kotlin/de/afarber/openmapview/example03markers/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example03markers
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import android.widget.Toast
1312
import androidx.activity.ComponentActivity
@@ -19,7 +18,6 @@ import androidx.compose.runtime.Composable
1918
import androidx.compose.ui.Modifier
2019
import androidx.compose.ui.platform.LocalContext
2120
import androidx.compose.ui.viewinterop.AndroidView
22-
import androidx.core.net.toUri
2321
import de.afarber.openmapview.BitmapDescriptorFactory
2422
import de.afarber.openmapview.LatLng
2523
import de.afarber.openmapview.Marker
@@ -124,15 +122,6 @@ fun MapViewScreen() {
124122
setOnInfoWindowClickListener { marker ->
125123
Toast.makeText(context, "Clicked: ${marker.title}", Toast.LENGTH_SHORT).show()
126124
}
127-
128-
// Set attribution click listener to open OSM copyright page
129-
setOnAttributionClickListener {
130-
val intent = Intent(
131-
Intent.ACTION_VIEW,
132-
"https://www.openstreetmap.org/copyright".toUri(),
133-
)
134-
context.startActivity(intent)
135-
}
136125
}
137126
},
138127
modifier = Modifier.fillMaxSize(),

examples/Example04Polylines/src/main/kotlin/de/afarber/openmapview/example04polylines/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example04polylines
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import android.widget.Toast
1312
import androidx.activity.ComponentActivity
@@ -20,7 +19,6 @@ import androidx.compose.ui.Modifier
2019
import androidx.compose.ui.graphics.Color
2120
import androidx.compose.ui.platform.LocalContext
2221
import androidx.compose.ui.viewinterop.AndroidView
23-
import androidx.core.net.toUri
2422
import de.afarber.openmapview.LatLng
2523
import de.afarber.openmapview.OpenMapView
2624
import de.afarber.openmapview.Polygon
@@ -140,15 +138,6 @@ fun MapViewScreen() {
140138
setOnPolygonClickListener { polygon ->
141139
Toast.makeText(context, "Clicked: ${polygon.tag}", Toast.LENGTH_SHORT).show()
142140
}
143-
144-
// Set attribution click listener to open OSM copyright page
145-
setOnAttributionClickListener {
146-
val intent = Intent(
147-
Intent.ACTION_VIEW,
148-
"https://www.openstreetmap.org/copyright".toUri(),
149-
)
150-
context.startActivity(intent)
151-
}
152141
}
153142
},
154143
modifier = Modifier.fillMaxSize(),

examples/Example06Clicks/src/main/kotlin/de/afarber/openmapview/example06clicks/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example06clicks
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import android.widget.Toast
1312
import androidx.activity.ComponentActivity
@@ -20,7 +19,6 @@ import androidx.compose.runtime.LaunchedEffect
2019
import androidx.compose.ui.Modifier
2120
import androidx.compose.ui.platform.LocalContext
2221
import androidx.compose.ui.viewinterop.AndroidView
23-
import androidx.core.net.toUri
2422
import de.afarber.openmapview.LatLng
2523
import de.afarber.openmapview.OnMapClickListener
2624
import de.afarber.openmapview.OnMapLongClickListener
@@ -88,15 +86,6 @@ fun MapViewScreen() {
8886
).show()
8987
},
9088
)
91-
92-
// Set attribution click listener to open OSM copyright page
93-
setOnAttributionClickListener {
94-
val intent = Intent(
95-
Intent.ACTION_VIEW,
96-
"https://www.openstreetmap.org/copyright".toUri(),
97-
)
98-
context.startActivity(intent)
99-
}
10089
}
10190
},
10291
modifier = Modifier.fillMaxSize(),

examples/Example07DraggableMarkers/src/main/kotlin/de/afarber/openmapview/example07draggablemarkers/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example07draggablemarkers
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import android.widget.Toast
1312
import androidx.activity.ComponentActivity
@@ -34,7 +33,6 @@ import androidx.compose.ui.Modifier
3433
import androidx.compose.ui.platform.LocalContext
3534
import androidx.compose.ui.unit.dp
3635
import androidx.compose.ui.viewinterop.AndroidView
37-
import androidx.core.net.toUri
3836
import de.afarber.openmapview.LatLng
3937
import de.afarber.openmapview.Marker
4038
import de.afarber.openmapview.OnMarkerDragListener
@@ -138,15 +136,6 @@ fun MapViewScreen() {
138136
).show()
139137
true
140138
}
141-
142-
// Set attribution click listener
143-
setOnAttributionClickListener {
144-
val intent = Intent(
145-
Intent.ACTION_VIEW,
146-
"https://www.openstreetmap.org/copyright".toUri(),
147-
)
148-
context.startActivity(intent)
149-
}
150139
}
151140
},
152141
modifier = Modifier.fillMaxSize(),

examples/Example08Circles/src/main/kotlin/de/afarber/openmapview/example08circles/MainActivity.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example08circles
99

10-
import android.content.Intent
1110
import android.os.Bundle
1211
import android.widget.Toast
1312
import androidx.activity.ComponentActivity
@@ -35,7 +34,6 @@ import androidx.compose.ui.graphics.Color
3534
import androidx.compose.ui.platform.LocalContext
3635
import androidx.compose.ui.unit.dp
3736
import androidx.compose.ui.viewinterop.AndroidView
38-
import androidx.core.net.toUri
3937
import de.afarber.openmapview.Circle
4038
import de.afarber.openmapview.CircleOptions
4139
import de.afarber.openmapview.LatLng
@@ -189,15 +187,6 @@ fun MapViewScreen() {
189187
Toast.LENGTH_SHORT,
190188
).show()
191189
}
192-
193-
// Set attribution click listener
194-
setOnAttributionClickListener {
195-
val intent = Intent(
196-
Intent.ACTION_VIEW,
197-
"https://www.openstreetmap.org/copyright".toUri(),
198-
)
199-
context.startActivity(intent)
200-
}
201190
}
202191
},
203192
modifier = Modifier.fillMaxSize(),

examples/Example09Overlays/src/main/kotlin/de/afarber/openmapview/example09overlays/MainActivity.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class MainActivity : ComponentActivity() {
7070
data class OverlayState(
7171
val name: String,
7272
val overlay: TileOverlay,
73+
val attribution: String,
7374
var isVisible: Boolean = false,
7475
var transparency: Float = 0.5f,
7576
)
@@ -91,6 +92,7 @@ fun MapViewScreen() {
9192
zIndex = 1f,
9293
visible = false,
9394
),
95+
"© OpenSeaMap",
9496
),
9597
OverlayState(
9698
"OpenRailwayMap",
@@ -99,6 +101,7 @@ fun MapViewScreen() {
99101
zIndex = 2f,
100102
visible = false,
101103
),
104+
"© OpenRailwayMap",
102105
),
103106
OverlayState(
104107
"Hiking Trails",
@@ -107,6 +110,7 @@ fun MapViewScreen() {
107110
zIndex = 3f,
108111
visible = false,
109112
),
113+
"© Waymarked Trails",
110114
),
111115
OverlayState(
112116
"OpenSnowMap",
@@ -115,6 +119,7 @@ fun MapViewScreen() {
115119
zIndex = 4f,
116120
visible = false,
117121
),
122+
"© OpenSnowMap",
118123
),
119124
),
120125
)
@@ -132,6 +137,19 @@ fun MapViewScreen() {
132137
).show()
133138
}
134139

140+
fun updateAttributions() {
141+
mapView?.let { map ->
142+
val activeAttributions: List<String> = overlays.filter { it.isVisible }.map { it.attribution }
143+
if (activeAttributions.isNotEmpty()) {
144+
val combinedAttribution = "© OpenStreetMap contributors | ${activeAttributions.joinToString(" | ")}"
145+
map.setAttributionText(combinedAttribution)
146+
} else {
147+
// Reset to default when no overlays active
148+
map.setAttributionText("© OpenStreetMap contributors")
149+
}
150+
}
151+
}
152+
135153
fun toggleOverlay(
136154
index: Int,
137155
enabled: Boolean,
@@ -154,6 +172,7 @@ fun MapViewScreen() {
154172
}
155173

156174
overlays = updated
175+
updateAttributions()
157176
}
158177
}
159178

@@ -218,6 +237,7 @@ fun MapViewScreen() {
218237
mapView?.clearTileOverlays()
219238
overlays = overlays.map { state -> state.copy(isVisible = false) }
220239
transparency = 0.5f
240+
updateAttributions()
221241
Toast.makeText(context, "All overlays cleared", Toast.LENGTH_SHORT).show()
222242
},
223243
modifier = Modifier.padding(16.dp),
@@ -258,6 +278,7 @@ fun MapViewScreen() {
258278
mapView?.clearTileOverlays()
259279
overlays = overlays.map { state -> state.copy(isVisible = false) }
260280
transparency = 0.5f
281+
updateAttributions()
261282
Toast.makeText(context, "All overlays cleared", Toast.LENGTH_SHORT).show()
262283
},
263284
modifier = Modifier.padding(16.dp),

examples/Example11MapTypes/src/main/kotlin/de/afarber/openmapview/example11maptypes/MainActivity.kt

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package de.afarber.openmapview.example11maptypes
99

10-
import android.content.Intent
1110
import android.content.res.Configuration
1211
import android.os.Bundle
1312
import androidx.activity.ComponentActivity
@@ -36,7 +35,6 @@ import androidx.compose.ui.text.font.FontWeight
3635
import androidx.compose.ui.unit.dp
3736
import androidx.compose.ui.unit.sp
3837
import androidx.compose.ui.viewinterop.AndroidView
39-
import androidx.core.net.toUri
4038
import de.afarber.openmapview.LatLng
4139
import de.afarber.openmapview.MapType
4240
import de.afarber.openmapview.OpenMapView
@@ -76,14 +74,6 @@ fun MapViewScreen() {
7674
setCenter(LatLng(46.8182, 8.2275))
7775
setZoom(12.0f)
7876
mapView = this
79-
setOnAttributionClickListener {
80-
val intent =
81-
Intent(
82-
Intent.ACTION_VIEW,
83-
getAttributionUrl().toUri(),
84-
)
85-
context.startActivity(intent)
86-
}
8777
}
8878
},
8979
modifier = Modifier.weight(0.67f),
@@ -112,14 +102,6 @@ fun MapViewScreen() {
112102
setCenter(LatLng(46.8182, 8.2275))
113103
setZoom(12.0f)
114104
mapView = this
115-
setOnAttributionClickListener {
116-
val intent =
117-
Intent(
118-
Intent.ACTION_VIEW,
119-
getAttributionUrl().toUri(),
120-
)
121-
context.startActivity(intent)
122-
}
123105
}
124106
},
125107
modifier = Modifier.weight(0.67f),

openmapview/src/main/kotlin/de/afarber/openmapview/OpenMapView.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,16 @@ class OpenMapView
14741474
*/
14751475
fun getAttributionUrl(): String = attributionOverlay.getAttributionUrl()
14761476

1477+
/**
1478+
* Sets custom attribution text to be displayed.
1479+
*
1480+
* @param text The attribution text to display
1481+
*/
1482+
fun setAttributionText(text: String) {
1483+
attributionOverlay.setAttributionText(text)
1484+
invalidate()
1485+
}
1486+
14771487
override fun onResume(owner: LifecycleOwner) {
14781488
controller.onResume()
14791489
}

0 commit comments

Comments
 (0)