Skip to content

Commit 4a7428b

Browse files
github-actions[bot]klokantechsysadminsasaprodribaba
authored
RD-1381: Add centerOnIpPoint method to the map - Kotlin (#92)
Co-authored-by: klokantechsysadmin <[email protected]> Co-authored-by: sasaprodribaba <[email protected]>
1 parent 1521010 commit 4a7428b

File tree

6 files changed

+62
-0
lines changed

6 files changed

+62
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* Copyright (c) 2025, MapTiler
3+
* All rights reserved.
4+
* SPDX-License-Identifier: BSD 3-Clause
5+
*/
6+
7+
package com.maptiler.maptilersdk.commands.navigation
8+
9+
import com.maptiler.maptilersdk.bridge.MTBridge
10+
import com.maptiler.maptilersdk.bridge.MTCommand
11+
12+
internal class CenterOnIpPoint : MTCommand {
13+
override val isPrimitiveReturnType: Boolean = false
14+
15+
override fun toJS(): String = "${MTBridge.MAP_OBJECT}.centerOnIpPoint();"
16+
}

MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewController.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,11 @@ class MTMapViewController(
350350
*/
351351
override fun fitToIpBounds() = navigableWorker.fitToIpBounds()
352352

353+
/**
354+
* Centers the map on the coarse location inferred from the device's public IP address.
355+
*/
356+
override fun centerOnIpPoint() = navigableWorker.centerOnIpPoint()
357+
353358
/**
354359
* Returns the map's current bearing.
355360
*/

MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/workers/navigable/MTNavigable.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ interface MTNavigable {
7878
*/
7979
fun fitToIpBounds()
8080

81+
/**
82+
* Centers the map on the visitor's location inferred from their public IP address.
83+
*/
84+
fun centerOnIpPoint()
85+
8186
/**
8287
* Returns the map's current bearing.
8388
*/

MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/workers/navigable/NavigableWorker.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.maptiler.maptilersdk.bridge.MTBridgeReturnType.DoubleValue
1212
import com.maptiler.maptilersdk.bridge.MTBridgeReturnType.Null
1313
import com.maptiler.maptilersdk.bridge.MTBridgeReturnType.StringValue
1414
import com.maptiler.maptilersdk.commands.navigation.AreTilesLoaded
15+
import com.maptiler.maptilersdk.commands.navigation.CenterOnIpPoint
1516
import com.maptiler.maptilersdk.commands.navigation.EaseTo
1617
import com.maptiler.maptilersdk.commands.navigation.FitBounds
1718
import com.maptiler.maptilersdk.commands.navigation.FitToIpBounds
@@ -50,6 +51,7 @@ import com.maptiler.maptilersdk.map.options.MTPaddingOptions
5051
import com.maptiler.maptilersdk.map.types.MTBounds
5152
import com.maptiler.maptilersdk.map.types.MTPoint
5253
import kotlinx.coroutines.CoroutineScope
54+
import kotlinx.coroutines.CoroutineStart
5355
import kotlinx.coroutines.launch
5456
import kotlinx.serialization.decodeFromString
5557

@@ -131,6 +133,14 @@ internal class NavigableWorker(
131133
}
132134
}
133135

136+
override fun centerOnIpPoint() {
137+
scope.launch(start = CoroutineStart.UNDISPATCHED) {
138+
bridge.execute(
139+
CenterOnIpPoint(),
140+
)
141+
}
142+
}
143+
134144
override suspend fun getMaxBounds(): MTBounds? {
135145
val returnTypeValue =
136146
bridge.execute(

MapTilerSDK/src/test/java/com/maptiler/maptilersdk/WorkerAndStyleTests.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.maptiler.maptilersdk.bridge.MTBridgeReturnType
1111
import com.maptiler.maptilersdk.bridge.MTCommand
1212
import com.maptiler.maptilersdk.bridge.MTCommandExecutable
1313
import com.maptiler.maptilersdk.commands.navigation.AreTilesLoaded
14+
import com.maptiler.maptilersdk.commands.navigation.CenterOnIpPoint
1415
import com.maptiler.maptilersdk.commands.navigation.GetBearing
1516
import com.maptiler.maptilersdk.commands.navigation.GetCenterClampedToGround
1617
import com.maptiler.maptilersdk.commands.navigation.GetCenterElevation
@@ -48,6 +49,23 @@ class WorkerAndStyleTests {
4849
assertTrue(usedGetBearing)
4950
}
5051

52+
@Test fun navigableWorker_centerOnIpPoint_UsesCenterOnIpPointCommand() =
53+
runBlocking {
54+
var usedCenterOnIpPoint = false
55+
val exec =
56+
object : MTCommandExecutable {
57+
override suspend fun execute(command: MTCommand): MTBridgeReturnType {
58+
if (command is CenterOnIpPoint) usedCenterOnIpPoint = true
59+
return MTBridgeReturnType.Null
60+
}
61+
}
62+
63+
val bridge = MTBridge(exec)
64+
val worker = NavigableWorker(bridge, this)
65+
worker.centerOnIpPoint()
66+
assertTrue(usedCenterOnIpPoint)
67+
}
68+
5169
@Test fun navigableWorker_getCenterClampedToGround_ParsesPrimitiveReturnTypes() =
5270
runBlocking {
5371
val executedCommands = mutableListOf<MTCommand>()

MapTilerSDK/src/test/java/com/maptiler/maptilersdk/commands/navigation/BoundsCommandsTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ class BoundsCommandsTest {
4848
assertTrue(!command.isPrimitiveReturnType)
4949
}
5050

51+
@Test
52+
fun `centerOnIpPoint emits expected invocation`() {
53+
val command = CenterOnIpPoint()
54+
55+
assertEquals("map.centerOnIpPoint();", command.toJS())
56+
assertTrue(!command.isPrimitiveReturnType)
57+
}
58+
5159
@Test
5260
fun `getBounds uses primitive return`() {
5361
val command = GetBounds()

0 commit comments

Comments
 (0)