diff --git a/features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/store/DefaultAnnouncementStore.kt b/features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/store/DefaultAnnouncementStore.kt index a075c331cd..c51fc11f26 100644 --- a/features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/store/DefaultAnnouncementStore.kt +++ b/features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/store/DefaultAnnouncementStore.kt @@ -40,11 +40,11 @@ class DefaultAnnouncementStore( // NOT replay on first launch. // - Fullscreen.Space is disabled // - NewNotificationSound is opted in by AppMigration08 - // - MultiAccount is opted in by AppMigration11 + // - MultiAccount is NeverShown by default, AppMigration11 sets it to Show or Shown. val defaultStatus = when (announcement) { Announcement.Fullscreen.Space -> AnnouncementStatus.Shown Announcement.NewNotificationSound -> AnnouncementStatus.Shown - Announcement.MultiAccount -> AnnouncementStatus.Shown + Announcement.MultiAccount -> AnnouncementStatus.NeverShown } return store.data.map { prefs -> val ordinal = prefs[key] ?: defaultStatus.ordinal diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11.kt index 97bc5d24a4..71fc6a1d52 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11.kt @@ -16,6 +16,7 @@ import io.element.android.libraries.sessionstorage.api.SessionStore /** * Ensure the multi-account announcement is displayed, but only on application upgrade, * and only if the user does not already have several accounts. + * In the other cases, mark the announcement as already shown. */ @ContributesIntoSet(AppScope::class) class AppMigration11( @@ -25,10 +26,8 @@ class AppMigration11( override val order: Int = 11 override suspend fun migrate(isFreshInstall: Boolean) { - if (isFreshInstall) return - - if (sessionStore.getAllSessions().size > 1) { - // The user already uses several accounts, no need to announce the feature + if (isFreshInstall || sessionStore.getAllSessions().size > 1) { + // New users, or users who already have several accounts, do not need to be informed about the feature announcementService.onAnnouncementDismissed(Announcement.MultiAccount) } else { announcementService.showAnnouncement(Announcement.MultiAccount) diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11Test.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11Test.kt index 08bfd5b2ec..b8d45ace46 100644 --- a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11Test.kt +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/migrations/AppMigration11Test.kt @@ -18,14 +18,18 @@ import org.junit.Test class AppMigration11Test { @Test - fun `migration on fresh install should not invoke the AnnouncementService`() = runTest { - val service = FakeAnnouncementService() + fun `migration on fresh install should mark the announcement as dismissed`() = runTest { + val onAnnouncementDismissedResult = lambdaRecorder { } + val service = FakeAnnouncementService( + onAnnouncementDismissedResult = onAnnouncementDismissedResult, + ) val migration = AppMigration11( sessionStore = InMemorySessionStore(initialList = listOf(aSessionData())), announcementService = service, ) - // FakeAnnouncementService lambdas throw by default migration.migrate(isFreshInstall = true) + onAnnouncementDismissedResult.assertions().isCalledOnce() + .with(value(Announcement.MultiAccount)) } @Test