From 22e34e2aee64627e45f37600f1812eebf67b721b Mon Sep 17 00:00:00 2001 From: jacquarg Date: Mon, 20 Oct 2025 16:51:08 +0200 Subject: [PATCH] feat:3187: register to user's murena workspace topics --- app/build.gradle | 2 +- build.gradle | 4 +-- gradle/libs.versions.toml | 20 ++++++++----- .../androidinterfaces/DeviceConfiguration.kt | 1 + .../procedures/RegisterToEosNotifications.kt | 4 +++ .../RegisterToEOSBroadcastProcedureTest.kt | 29 +++++++++++++++++++ notificationsreceiver/build.gradle.kts | 2 ++ .../src/main/AndroidManifest.xml | 5 ++++ .../DeviceConfigurationImpl.kt | 5 ++++ .../DeviceConfigurationChangedReceiver.kt | 7 ++++- 10 files changed, 68 insertions(+), 11 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2f73584..d329c1f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,7 +150,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.10' // Room (SQLite) - def room_version = "2.6.1" + def room_version = libs.versions.androidx.room.get() implementation "androidx.room:room-runtime:$room_version" ksp "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-ktx:$room_version" diff --git a/build.gradle b/build.gradle index a673523..ff23290 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '2.0.21' + ext.kotlin_version = libs.versions.kotlin.get() repositories { google() mavenCentral() @@ -15,7 +15,7 @@ buildscript { } plugins { - id 'com.google.devtools.ksp' version '2.0.21-1.0.27' + id 'com.google.devtools.ksp' version libs.versions.ksp alias(libs.plugins.spotless) alias(libs.plugins.hilt.android) apply false alias(libs.plugins.detekt) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 539b21e..2ff5ffc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,24 +3,28 @@ app-compileSdk = "35" app-minSdk = "31" androidx-activity-compose = "1.10.1" -androidx-compose-bom = "2025.06.01" -androidx-hilt = "1.2.0" -androidx-lifecycle-runtime-compose = "2.9.2" -androidx-navigation-compose = "2.9.0" +androidx-compose-bom = "2025.09.00" +androidx-hilt = "1.3.0" +androidx-lifecycle-runtime-compose = "2.9.4" +androidx-navigation-compose = "2.9.4" +androidx-room = "2.8.2" eos-elib = "0.0.2-alpha12" eos-telemetry = "1.0.1-release" -kotlin = "2.0.21" +eos-userinfo = "1.1.0" +kotlin = "2.2.0" kotlinx-coroutines = "1.10.2" +kotlinx-serialization-json = "1.9.0" markwon = "4.6.2" markwon-compose = "0.5.7" # Tests junit = "4.13.2" -mockk = "1.13.12" +mockk = "1.14.5" # Build detekt = "1.23.8" -hilt = "2.53.1" +hilt = "2.57.2" +ksp = "2.2.0-2.0.2" ktlint = "1.6.0" spotless = "8.0.0" @@ -42,7 +46,9 @@ dagger-hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler" , v dagger-hilt-core = { group = "com.google.dagger", name = "hilt-core" , version.ref = "hilt"} eos-elib = { group = "foundation.e", name = "elib", version.ref = "eos-elib" } eos-telemetry = {group = "foundation.e.lib", name = "telemetry", version.ref = "eos-telemetry" } +eos-userinfo = { group = "foundation.e.userinfo", name = "userinfo-lib", version.ref = "eos-userinfo" } kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name ="kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } +kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" } markwon = { group = "io.noties.markwon", name = "core", version.ref = "markwon" } markwon-compose = { group = "com.github.jeziellago", name = "compose-markdown", version.ref = "markwon-compose" } markwon-html = {group = "io.noties.markwon", name = "html", version.ref = "markwon" } 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 9161296..a5b3cd2 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,4 +22,5 @@ interface DeviceConfiguration { val device: String val androidVersion: String suspend fun getLang(): String + 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 edf1398..d5672ae 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 @@ -79,6 +79,10 @@ class RegisterToEosNotifications @Inject constructor( .takeIf { it in SUPPORTED_LANGUAGES } ?: DEFAULT_LANG, ) + deviceConfiguration.getMurenaWorkspaceGroups().forEach { + topics.add(it) + } + val baseUrl = subscriptionRepository.getBaseUrl() return topics.map { Topic(baseUrl = baseUrl, topic = "${EOS_BROADCAST_TOPIC_PREFIX}-$it-$lang") } } 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 4012fcb..4fb3866 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 @@ -53,6 +53,7 @@ class RegisterToEOSBroadcastProcedureTest { every { deviceConfiguration.version } returns "2.9-t-20250321478215-official-FP3" every { deviceConfiguration.androidVersion } returns "13" every { deviceConfiguration.device } returns "FP3" + coEvery { deviceConfiguration.getMurenaWorkspaceGroups() } returns emptyList() coEvery { deviceConfiguration.getLang() } returns "en" @@ -211,4 +212,32 @@ class RegisterToEOSBroadcastProcedureTest { } } } + + @Test + fun register_should_collect_workspace_groups() = runTest(testScheduler) { + coEvery { subscriptionRepository.getSubscriptions() } returns emptyList() + coEvery { deviceConfiguration.getMurenaWorkspaceGroups() } returns listOf("Premium", "Recovery") + + // When + useCase.updateRegistration() + + // Then + listOf( + "eOS-all-en", + "eOS-FP3-en", + "eOS-2_9-en", + "eOS-FP3-2_9-en", + "eOS-Premium-en", + "eOS-Recovery-en", + ).forEach { topic -> + coVerify { + subscriptionRepository.createSubscription( + withArg { + assertEquals(baseUrlFixture, it.baseUrl) + assertEquals(topic, it.topic) + }, + ) + } + } + } } diff --git a/notificationsreceiver/build.gradle.kts b/notificationsreceiver/build.gradle.kts index 454e5f8..9d06f6d 100644 --- a/notificationsreceiver/build.gradle.kts +++ b/notificationsreceiver/build.gradle.kts @@ -49,6 +49,8 @@ dependencies { implementation(libs.androidx.ui.tooling.preview) implementation(libs.dagger.hilt.android) ksp(libs.dagger.hilt.compiler) + implementation(libs.eos.userinfo) + implementation(libs.kotlinx.serialization.json) implementation(libs.markwon) implementation(libs.markwon.strikethrough) implementation(libs.markwon.html) diff --git a/notificationsreceiver/src/main/AndroidManifest.xml b/notificationsreceiver/src/main/AndroidManifest.xml index f2a12b5..92d6c1b 100644 --- a/notificationsreceiver/src/main/AndroidManifest.xml +++ b/notificationsreceiver/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ + @@ -27,6 +28,10 @@ android:name="com.android.settings.order" android:value="0" /> + { + return UserInfoProvider.fetch(appContext).groups + } + private fun getVersionThroughReflection(): String? { return getSystemPropertyReflection("ro.lineage.version") ?: getSystemPropertyReflection("ro.version") diff --git a/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/broadcastreceivers/DeviceConfigurationChangedReceiver.kt b/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/broadcastreceivers/DeviceConfigurationChangedReceiver.kt index ed0bbd2..8919563 100644 --- a/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/broadcastreceivers/DeviceConfigurationChangedReceiver.kt +++ b/notificationsreceiver/src/main/java/foundation/e/notificationsreceiver/bridges/broadcastreceivers/DeviceConfigurationChangedReceiver.kt @@ -24,11 +24,15 @@ import dagger.hilt.android.AndroidEntryPoint import foundation.e.notificationsreceiver.bridges.utils.goAsync import foundation.e.notificationsreceiver.domain.procedures.RegisterToEosNotifications import foundation.e.notificationsreceiver.domain.utils.AppBackgroundScope +import foundation.e.notificationsreceiver.domain.utils.d import kotlinx.coroutines.CoroutineScope import javax.inject.Inject @AndroidEntryPoint class DeviceConfigurationChangedReceiver : BroadcastReceiver() { + companion object { + private const val ACTION_USER_INFO_CHANGED = "foundation.e.userinfoservice.action.USER_INFO_CHANGED" + } @Inject lateinit var registerToEosNotifications: RegisterToEosNotifications @AppBackgroundScope @@ -36,7 +40,8 @@ class DeviceConfigurationChangedReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (intent?.action == Intent.ACTION_BOOT_COMPLETED || - intent?.action == Intent.ACTION_LOCALE_CHANGED + intent?.action == Intent.ACTION_LOCALE_CHANGED || + intent?.action == ACTION_USER_INFO_CHANGED ) { goAsync(backgroundScope) { registerToEosNotifications.register() -- GitLab