diff --git a/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt b/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt --- a/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt +++ b/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt @@ -139,19 +139,17 @@ fun stopMatoRequests(responder: MQTTMatoListener){ var removed = false + + for ((lineTopic,responderList)in respondersMap.entries){ - var done = false - for (el in responderList){ - if (el.get()==null){ - responderList.remove(el) - } else if(el.get() == responder){ - responderList.remove(el) - done = true - } - if (done) - break + val oldSize = responderList.size + + responderList.removeIf { + (it.get()==null) || (it.get()==responder) } - if(done) Log.d(DEBUG_TAG, "Removed one listener for topic $lineTopic, listeners: $responderList") + val diffLength = responderList.size - oldSize + if(diffLength > 0) + Log.d(DEBUG_TAG, "Removed $diffLength listeners for topic $lineTopic, listeners: $responderList") //if (done) break if (responderList.isEmpty()){ //actually unsubscribe @@ -169,14 +167,11 @@ Log.e(DEBUG_TAG, "Tried unsubscribing but there was an error in the client library:\n$e") } } - removed = done || removed + removed = (diffLength>0) || removed } // check responders map, remove lines that have no responders - - for(line in respondersMap.keys){ - if(respondersMap[line]?.isEmpty() == true){ - respondersMap.remove(line) - } + respondersMap.entries.removeIf { + it.value.isEmpty() } Log.d(DEBUG_TAG, "Removed: $removed, respondersMap: $respondersMap") } diff --git a/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt b/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt --- a/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt +++ b/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt @@ -78,15 +78,18 @@ @JvmStatic fun findPointsToPutDirectionMarkers(polyPoints: List, stops: List, distanceIcon: Double): List{ + //output value + val pointsOutput = mutableListOf() val closestIndices = findIndicesClosestPointsForStops(polyPoints, stops) Log.d(DEBUG_TAG, "idcs: $closestIndices") + if(closestIndices.size==0) + return pointsOutput val distancesSec = mutableListOf() var pi = closestIndices[0] val cumulativeDist = mutableListOf() var sum = 0.0 - val pointsOutput = mutableListOf() var nPoints = 0 var distFromLastPoint = 0.0 for(i in 1..