1import kotlinx.coroutines.delay
2import kotlinx.coroutines.runBlocking
3import kotlinx.coroutines.GlobalScope
4import kotlinx.coroutines.launch
7 * ZoneManager usage example for Kotlin
8 * Demonstrates working with zone detection, event handling, and zone management
10class ZoneManagerExample {
11 private var sdk: NavigineSdk? = null
12 private var locationManager: LocationManager? = null
13 private var navigationManager: NavigationManager? = null
14 private var zoneManager: ZoneManager? = null
15 private var zoneListener: ZoneListener? = null
23 * Initialize SDK and get managers
25 private fun initializeSdk() {
27 // [kotlin_NavigineSdk_getInstance]
29 sdk = NavigineSdk.getInstance()
30 // [kotlin_NavigineSdk_getInstance]
32 // [kotlin_NavigineSdk_setUserHash]
34 sdk?.setUserHash("USER-HASH-HERE")
35 // [kotlin_NavigineSdk_setUserHash]
37 // [kotlin_NavigineSdk_setServer]
38 // Set server URL (optional)
39 sdk?.setServer("https://custom.navigine.com")
40 // [kotlin_NavigineSdk_setServer]
42 // [kotlin_NavigineSdk_getLocationManager]
43 // Get LocationManager for working with locations
44 locationManager = sdk?.getLocationManager()
45 // [kotlin_NavigineSdk_getLocationManager]
47 // [kotlin_NavigineSdk_getNavigationManager]
48 // Get NavigationManager for working with navigation
49 navigationManager = sdk?.getNavigationManager(locationManager)
50 // [kotlin_NavigineSdk_getNavigationManager]
52 // [kotlin_NavigineSdk_getZoneManager]
53 // Get ZoneManager for working with zones
54 zoneManager = sdk?.getZoneManager(locationManager, navigationManager)
55 // [kotlin_NavigineSdk_getZoneManager]
57 if (locationManager != null && navigationManager != null && zoneManager != null) {
58 println("LocationManager, NavigationManager and ZoneManager successfully initialized")
60 } catch (e: Exception) {
61 System.err.println("Error initializing SDK: ${e.message}")
68 private fun setupZoneListener() {
69 zoneListener = object : ZoneListener() {
70 // [kotlin_ZoneListener_onZoneEvent]
71 override fun onZoneEvent(zoneEvent: ZoneEvent) {
72 println("Zone event detected")
73 demonstrateZoneEventUsage(zoneEvent)
75 // [kotlin_ZoneListener_onZoneEvent]
80 * Demonstrate ZoneManager methods
82 fun demonstrateZoneManagerMethods() {
83 val manager = zoneManager ?: run {
84 System.err.println("ZoneManager not initialized")
88 val listener = zoneListener ?: return
90 // [kotlin_ZoneManager_addZoneListener]
92 manager.addZoneListener(listener)
93 println("Added zone listener")
94 // [kotlin_ZoneManager_addZoneListener]
96 // Simulate some time passing for zone events
100 // [kotlin_ZoneManager_removeZoneListener]
101 // Remove zone listener
102 manager.removeZoneListener(listener)
103 println("Removed zone listener")
104 // [kotlin_ZoneManager_removeZoneListener]
109 * Demonstrate ZoneEvent usage
111 fun demonstrateZoneEventUsage(zoneEvent: ZoneEvent) {
112 if (zoneEvent == null) {
113 System.err.println("ZoneEvent is null")
117 // [kotlin_ZoneEvent_getType]
119 val type = zoneEvent.type
120 println("Zone event type: $type")
121 // [kotlin_ZoneEvent_getType]
123 // [kotlin_ZoneEvent_getLocationId]
125 val locationId = zoneEvent.locationId
126 println("Zone location ID: $locationId")
127 // [kotlin_ZoneEvent_getLocationId]
129 // [kotlin_ZoneEvent_getSublocationId]
130 // Get sublocation ID
131 val sublocationId = zoneEvent.sublocationId
132 println("Zone sublocation ID: $sublocationId")
133 // [kotlin_ZoneEvent_getSublocationId]
135 // [kotlin_ZoneEvent_getId]
137 val id = zoneEvent.id
138 println("Zone ID: $id")
139 // [kotlin_ZoneEvent_getId]
141 // [kotlin_ZoneEvent_getName]
143 val name = zoneEvent.name
144 println("Zone name: $name")
145 // [kotlin_ZoneEvent_getName]
147 // [kotlin_ZoneEvent_getAlias]
149 val alias = zoneEvent.alias
150 println("Zone alias: $alias")
151 // [kotlin_ZoneEvent_getAlias]
153 // [kotlin_ZoneEvent_constructor]
154 // Create new zone event
155 val newZoneEvent = ZoneEvent(
163 println("Created new zone event: ${newZoneEvent.name} (${newZoneEvent.alias})")
164 // [kotlin_ZoneEvent_constructor]
168 * Demonstrate ZoneEventType enum values
170 fun demonstrateZoneEventTypes() {
171 // [kotlin_ZoneEventType_values]
172 // Get all zone event type values
173 val types = ZoneEventType.values()
174 println("Available zone event types:")
175 types.forEach { type ->
178 // [kotlin_ZoneEventType_values]
182 * Demonstrate advanced zone management features
184 suspend fun demonstrateAdvancedZoneFeatures() {
185 println("=== Advanced Zone Features ===")
187 val manager = zoneManager ?: return
189 // Add multiple listeners
190 val listener1 = object : ZoneListener() {
191 override fun onZoneEvent(event: ZoneEvent) {
192 println("Listener 1: Zone event - ${event.name}")
196 val listener2 = object : ZoneListener() {
197 override fun onZoneEvent(event: ZoneEvent) {
198 println("Listener 2: Zone event - ${event.name}")
202 // [kotlin_ZoneManager_addZoneListener_2]
203 // Add first zone listener
204 manager.addZoneListener(listener1)
205 println("Added first zone listener")
206 // [kotlin_ZoneManager_addZoneListener_2]
210 // [kotlin_ZoneManager_addZoneListener_3]
211 // Add second zone listener
212 manager.addZoneListener(listener2)
213 println("Added second zone listener")
214 // [kotlin_ZoneManager_addZoneListener_3]
216 // Wait for zone events
220 // [kotlin_ZoneManager_removeZoneListener_1]
221 // Remove first zone listener
222 manager.removeZoneListener(listener1)
223 println("Removed first zone listener")
224 // [kotlin_ZoneManager_removeZoneListener_1]
228 // [kotlin_ZoneManager_removeZoneListener_2]
229 // Remove second zone listener
230 manager.removeZoneListener(listener2)
231 println("Removed second zone listener")
232 // [kotlin_ZoneManager_removeZoneListener_2]
236 * Demonstrate zone event simulation
238 fun demonstrateZoneEventSimulation() {
239 println("=== Zone Event Simulation ===")
241 // Create different types of zone events
242 val simulatedEvents = listOf(
243 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 100, "Entrance Zone", "entrance"),
244 ZoneEvent(ZoneEventType.EXIT, 12345, 1, 100, "Entrance Zone", "entrance"),
245 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 101, "Meeting Room", "meeting_room"),
246 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 102, "Cafeteria", "cafeteria"),
247 ZoneEvent(ZoneEventType.EXIT, 12345, 1, 101, "Meeting Room", "meeting_room"),
250 // Simulate zone events
251 simulatedEvents.forEachIndexed { index, event ->
253 delay((index + 1) * 1000L)
254 println("Simulated zone event: ${event.type} - ${event.name} (${event.alias})")
255 demonstrateZoneEventUsage(event)
261 * Demonstrate zone listener management
263 fun demonstrateZoneListenerManagement() {
264 println("=== Zone Listener Management ===")
266 val manager = zoneManager ?: return
268 // Create a test listener
269 val testListener = object : ZoneListener() {
270 override fun onZoneEvent(event: ZoneEvent) {
271 println("Test listener received event: ${event.name}")
276 manager.addZoneListener(testListener)
277 println("Added test zone listener")
279 // Simulate some time passing
284 manager.removeZoneListener(testListener)
285 println("Removed test zone listener")
293 val manager = zoneManager
294 val listener = zoneListener
295 if (manager != null && listener != null) {
296 // [kotlin_ZoneManager_removeZoneListener_3]
297 // Remove zone listener
298 manager.removeZoneListener(listener)
299 // [kotlin_ZoneManager_removeZoneListener_3]
304 * Main demonstration method
306 suspend fun runExample() {
307 println("=== ZoneManager Example ===")
309 demonstrateZoneManagerMethods()
310 demonstrateZoneEventTypes()
311 demonstrateZoneListenerManagement()
312 demonstrateAdvancedZoneFeatures()
313 demonstrateZoneEventSimulation()
315 // Wait a bit for zone events
319 println("=== Example completed ===")
324 * Function to run the example
326fun main() = runBlocking {
327 val example = ZoneManagerExample()