diff --git a/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/bridges/androidinterfaces/DeviceConfiguration.kt b/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/bridges/androidinterfaces/DeviceConfiguration.kt index a5b3cd2d3f9554419300cf65878412ad3ff15e1a..a1db95b4df98bab0127b0a42b24c1d7f53a2f792 100644 --- a/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/bridges/androidinterfaces/DeviceConfiguration.kt +++ b/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/bridges/androidinterfaces/DeviceConfiguration.kt @@ -22,5 +22,6 @@ interface DeviceConfiguration { val device: String val androidVersion: String suspend fun getLang(): String + suspend fun isConnectedToMurenaIO(): Boolean suspend fun getMurenaWorkspaceGroups(): List } diff --git a/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEosNotifications.kt b/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEosNotifications.kt index d5672aee0abbde8bc38c22846aa9fc960eaa1c03..a53067c8bd91428859745b3d4a7a22d47d7ea078 100644 --- a/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEosNotifications.kt +++ b/notificationsreceiver-domain/src/main/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEosNotifications.kt @@ -36,6 +36,7 @@ class RegisterToEosNotifications @Inject constructor( companion object { const val EOS_BROADCAST_TOPIC_PREFIX = "eOS" private const val ALL_DEVICES_TOPIC_BASE = "all" + private const val MURENA_IO_TOPIC_BASE = "Murena_io" private const val DEFAULT_LANG = "en" private val SUPPORTED_LANGUAGES = setOf("de", "en", "es", "fr", "it") } @@ -79,6 +80,10 @@ class RegisterToEosNotifications @Inject constructor( .takeIf { it in SUPPORTED_LANGUAGES } ?: DEFAULT_LANG, ) + if (deviceConfiguration.isConnectedToMurenaIO()) { + topics.add(MURENA_IO_TOPIC_BASE) + } + deviceConfiguration.getMurenaWorkspaceGroups().forEach { topics.add(it) } diff --git a/notificationsreceiver-domain/src/test/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEOSBroadcastProcedureTest.kt b/notificationsreceiver-domain/src/test/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEOSBroadcastProcedureTest.kt index 4fb38663061eb759f68742b09ffc56f5037b7314..a4557e37e2af0c6b189c61bee24769a6dffe38da 100644 --- a/notificationsreceiver-domain/src/test/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEOSBroadcastProcedureTest.kt +++ b/notificationsreceiver-domain/src/test/java/foundation/e/notificationsreceiver/domain/procedures/RegisterToEOSBroadcastProcedureTest.kt @@ -54,6 +54,7 @@ class RegisterToEOSBroadcastProcedureTest { every { deviceConfiguration.androidVersion } returns "13" every { deviceConfiguration.device } returns "FP3" coEvery { deviceConfiguration.getMurenaWorkspaceGroups() } returns emptyList() + coEvery { deviceConfiguration.isConnectedToMurenaIO() } returns false coEvery { deviceConfiguration.getLang() } returns "en" @@ -213,6 +214,33 @@ class RegisterToEOSBroadcastProcedureTest { } } + @Test + fun register_should_collect_murena_io() = runTest(testScheduler) { + coEvery { subscriptionRepository.getSubscriptions() } returns emptyList() + coEvery { deviceConfiguration.isConnectedToMurenaIO() } returns true + + // When + useCase.updateRegistration() + + // Then + listOf( + "eOS-all-en", + "eOS-FP3-en", + "eOS-2_9-en", + "eOS-FP3-2_9-en", + "eOS-Murena_io-en", + ).forEach { topic -> + coVerify { + subscriptionRepository.createSubscription( + withArg { + assertEquals(baseUrlFixture, it.baseUrl) + assertEquals(topic, it.topic) + }, + ) + } + } + } + @Test fun register_should_collect_workspace_groups() = runTest(testScheduler) { coEvery { subscriptionRepository.getSubscriptions() } returns emptyList() diff --git a/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/androidinterfaces/DeviceConfigurationImpl.kt b/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/androidinterfaces/DeviceConfigurationImpl.kt index 12a2f2a2e598fce6e050ab5bf4e11304d5cc3558..d177a1692a4661eebd16421d6049cdd29efd76cb 100644 --- a/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/androidinterfaces/DeviceConfigurationImpl.kt +++ b/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/androidinterfaces/DeviceConfigurationImpl.kt @@ -22,8 +22,11 @@ import android.content.Context import android.os.Build import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.notificationsreceiver.domain.bridges.androidinterfaces.DeviceConfiguration +import foundation.e.notificationsreceiver.domain.utils.e import foundation.e.notificationsreceiver.domain.utils.w import foundation.e.userinfoservice.lib.UserInfoProvider +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import javax.inject.Inject import javax.inject.Singleton @@ -40,8 +43,25 @@ class DeviceConfigurationImpl @Inject constructor( return runCatching { appContext.resources.configuration.locales.get(0).language }.getOrNull() ?: "en" } - override suspend fun getMurenaWorkspaceGroups(): List { - return UserInfoProvider.fetch(appContext).groups + override suspend fun isConnectedToMurenaIO(): Boolean = withContext(Dispatchers.IO) { + try { + UserInfoProvider.fetch(appContext).let { + it.id.isNotBlank() || it.email.isNotBlank() + } + } catch(e: IllegalStateException) { + e("Can't fetch UserInfo", e) + false + } + } + + + override suspend fun getMurenaWorkspaceGroups(): List = withContext(Dispatchers.IO) { + try { + UserInfoProvider.fetch(appContext).groups + } catch(e: IllegalStateException) { + e("Can't fetch UserInfo", e) + emptyList() + } } private fun getVersionThroughReflection(): String? {