diff --git a/android/app/src/main/java/com/naviapp/registration/usecase/MqttSdkInitUseCase.kt b/android/app/src/main/java/com/naviapp/registration/usecase/MqttSdkInitUseCase.kt index 4cae86ae4f..fd12e31656 100644 --- a/android/app/src/main/java/com/naviapp/registration/usecase/MqttSdkInitUseCase.kt +++ b/android/app/src/main/java/com/naviapp/registration/usecase/MqttSdkInitUseCase.kt @@ -10,14 +10,15 @@ import com.navi.mqtt.model.MqttSdkInitParams import com.naviapp.BuildConfig import com.naviapp.app.NaviApplication import com.naviapp.common.repository.ConfigRepository +import com.naviapp.home.activity.NewDashboardActivity.Companion.PAGE_HOME import com.naviapp.utils.COMMA import com.naviapp.utils.Constants import com.naviapp.utils.MqttMessageProviderImpl -import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch +import javax.inject.Inject class MqttSdkInitUseCase @Inject @@ -56,7 +57,11 @@ constructor( topics = clientIdWithTopics ) ) - MqttManager.subscribe(clientIdWithTopics, mqttMessageProviderImpl) + MqttManager.subscribe( + clientIdWithTopics, + PAGE_HOME, + mqttMessageProviderImpl + ) NaviTrackEvent.trackEvent("mqtt_sdk_init_triggered") } else { NaviTrackEvent.trackEvent("mqtt_config_enabled_false") diff --git a/android/navi-mqtt/src/main/java/com/navi/mqtt/MqttManager.kt b/android/navi-mqtt/src/main/java/com/navi/mqtt/MqttManager.kt index 1edd3ea674..36562eddc8 100644 --- a/android/navi-mqtt/src/main/java/com/navi/mqtt/MqttManager.kt +++ b/android/navi-mqtt/src/main/java/com/navi/mqtt/MqttManager.kt @@ -38,6 +38,8 @@ object MqttManager { private lateinit var courierService: CourierService private val addToQueue = arrayListOf() private val mqttListeners = hashMapOf>() + private val mqttListenersScreen = hashSetOf() + private val mqttSubscribeTopics = hashSetOf() private val analyticsEventTracker by lazy { MqttAnalytics.mqttAnalytics } fun init(context: Context, mqttSdkInitParams: MqttSdkInitParams?) { @@ -102,16 +104,22 @@ object MqttManager { mqttSdkInitParams?.let { params -> mqttConnector.connectMqtt(params) } } - fun subscribe(topic: String, listener: MqttMessageProvider) { + fun subscribe(topic: String, screenName: String, listener: MqttMessageProvider) { var listeners = mqttListeners[topic] if (listeners.isNullOrEmpty()) { listeners = arrayListOf(listener) } else { - listeners.add(listener) + if (mqttListenersScreen.contains(screenName).not()) { + listeners.add(listener) + } } mqttListeners[topic] = listeners + mqttListenersScreen.add(screenName) if (isConnected()) { - subscribeToTopics(topic) + if (mqttSubscribeTopics.contains(topic).not()) { + subscribeToTopics(topic) + mqttSubscribeTopics.add(topic) + } } else { addToQueue.add(topic) } @@ -155,7 +163,10 @@ object MqttManager { private fun subscribePendingTopics() { val pendingTopics = ArrayList(addToQueue) pendingTopics.forEach { - subscribeToTopics(it) + if (mqttSubscribeTopics.contains(it).not()) { + subscribeToTopics(it) + mqttSubscribeTopics.add(it) + } addToQueue.remove(it) } }