Skip to content

Commit e31cc9b

Browse files
committed
Extract AnnouncementStatus to its own file.
1 parent 6b59c82 commit e31cc9b

File tree

10 files changed

+45
-32
lines changed

10 files changed

+45
-32
lines changed

features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/AnnouncementPresenter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.compose.runtime.getValue
1313
import androidx.compose.runtime.remember
1414
import dev.zacsweers.metro.Inject
1515
import io.element.android.features.announcement.api.Announcement
16+
import io.element.android.features.announcement.impl.store.AnnouncementStatus
1617
import io.element.android.features.announcement.impl.store.AnnouncementStore
1718
import io.element.android.libraries.architecture.Presenter
1819
import kotlinx.coroutines.flow.map
@@ -25,7 +26,7 @@ class AnnouncementPresenter(
2526
override fun present(): AnnouncementState {
2627
val showSpaceAnnouncement by remember {
2728
announcementStore.announcementStatusFlow(Announcement.Space).map {
28-
it == AnnouncementStore.AnnouncementStatus.Show
29+
it == AnnouncementStatus.Show
2930
}
3031
}.collectAsState(false)
3132
return AnnouncementState(

features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/DefaultAnnouncementService.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import io.element.android.features.announcement.api.Announcement
2121
import io.element.android.features.announcement.api.AnnouncementService
2222
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
2323
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementView
24+
import io.element.android.features.announcement.impl.store.AnnouncementStatus
2425
import io.element.android.features.announcement.impl.store.AnnouncementStore
2526
import io.element.android.libraries.architecture.Presenter
2627
import kotlinx.coroutines.flow.Flow
@@ -38,13 +39,13 @@ class DefaultAnnouncementService(
3839
when (announcement) {
3940
Announcement.Space -> showSpaceAnnouncement()
4041
Announcement.NewNotificationSound -> {
41-
announcementStore.setAnnouncementStatus(Announcement.NewNotificationSound, AnnouncementStore.AnnouncementStatus.Show)
42+
announcementStore.setAnnouncementStatus(Announcement.NewNotificationSound, AnnouncementStatus.Show)
4243
}
4344
}
4445
}
4546

4647
override suspend fun onAnnouncementDismissed(announcement: Announcement) {
47-
announcementStore.setAnnouncementStatus(announcement, AnnouncementStore.AnnouncementStatus.Shown)
48+
announcementStore.setAnnouncementStatus(announcement, AnnouncementStatus.Shown)
4849
}
4950

5051
override fun announcementsToShowFlow(): Flow<List<Announcement>> {
@@ -53,10 +54,10 @@ class DefaultAnnouncementService(
5354
announcementStore.announcementStatusFlow(Announcement.NewNotificationSound),
5455
) { spaceAnnouncementStatus, newNotificationSoundStatus ->
5556
buildList {
56-
if (spaceAnnouncementStatus == AnnouncementStore.AnnouncementStatus.Show) {
57+
if (spaceAnnouncementStatus == AnnouncementStatus.Show) {
5758
add(Announcement.Space)
5859
}
59-
if (newNotificationSoundStatus == AnnouncementStore.AnnouncementStatus.Show) {
60+
if (newNotificationSoundStatus == AnnouncementStatus.Show) {
6061
add(Announcement.NewNotificationSound)
6162
}
6263
}
@@ -65,8 +66,8 @@ class DefaultAnnouncementService(
6566

6667
private suspend fun showSpaceAnnouncement() {
6768
val currentValue = announcementStore.announcementStatusFlow(Announcement.Space).first()
68-
if (currentValue == AnnouncementStore.AnnouncementStatus.NeverShown) {
69-
announcementStore.setAnnouncementStatus(Announcement.Space, AnnouncementStore.AnnouncementStatus.Show)
69+
if (currentValue == AnnouncementStatus.NeverShown) {
70+
announcementStore.setAnnouncementStatus(Announcement.Space, AnnouncementStatus.Show)
7071
}
7172
}
7273

features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/spaces/SpaceAnnouncementPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import androidx.compose.runtime.Composable
1111
import androidx.compose.runtime.rememberCoroutineScope
1212
import dev.zacsweers.metro.Inject
1313
import io.element.android.features.announcement.api.Announcement
14+
import io.element.android.features.announcement.impl.store.AnnouncementStatus
1415
import io.element.android.features.announcement.impl.store.AnnouncementStore
15-
import io.element.android.features.announcement.impl.store.AnnouncementStore.AnnouncementStatus
1616
import io.element.android.libraries.architecture.Presenter
1717
import kotlinx.coroutines.launch
1818

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.announcement.impl.store
9+
10+
enum class AnnouncementStatus {
11+
NeverShown,
12+
Show,
13+
Shown,
14+
}

features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/store/AnnouncementStore.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,4 @@ interface AnnouncementStore {
2121
): Flow<AnnouncementStatus>
2222

2323
suspend fun reset()
24-
25-
enum class AnnouncementStatus {
26-
NeverShown,
27-
Show,
28-
Shown,
29-
}
3024
}

features/announcement/impl/src/main/kotlin/io/element/android/features/announcement/impl/store/DefaultAnnouncementStore.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,23 @@ class DefaultAnnouncementStore(
2727
) : AnnouncementStore {
2828
private val store = preferenceDataStoreFactory.create("elementx_announcement")
2929

30-
override suspend fun setAnnouncementStatus(announcement: Announcement, status: AnnouncementStore.AnnouncementStatus) {
30+
override suspend fun setAnnouncementStatus(announcement: Announcement, status: AnnouncementStatus) {
3131
val key = announcement.toKey()
3232
store.edit { prefs ->
3333
prefs[key] = status.ordinal
3434
}
3535
}
3636

37-
override fun announcementStatusFlow(announcement: Announcement): Flow<AnnouncementStore.AnnouncementStatus> {
37+
override fun announcementStatusFlow(announcement: Announcement): Flow<AnnouncementStatus> {
3838
val key = announcement.toKey()
3939
// For NewNotificationSound, a migration will set it to Show on application upgrade (see AppMigration08)
4040
val defaultStatus = when (announcement) {
41-
Announcement.Space -> AnnouncementStore.AnnouncementStatus.NeverShown
42-
Announcement.NewNotificationSound -> AnnouncementStore.AnnouncementStatus.Shown
41+
Announcement.Space -> AnnouncementStatus.NeverShown
42+
Announcement.NewNotificationSound -> AnnouncementStatus.Shown
4343
}
4444
return store.data.map { prefs ->
4545
val ordinal = prefs[key] ?: defaultStatus.ordinal
46-
AnnouncementStore.AnnouncementStatus.entries.getOrElse(ordinal) { defaultStatus }
46+
AnnouncementStatus.entries.getOrElse(ordinal) { defaultStatus }
4747
}
4848
}
4949

features/announcement/impl/src/test/kotlin/io/element/android/features/announcement/impl/AnnouncementPresenterTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.features.announcement.impl
99

1010
import com.google.common.truth.Truth.assertThat
1111
import io.element.android.features.announcement.api.Announcement
12+
import io.element.android.features.announcement.impl.store.AnnouncementStatus
1213
import io.element.android.features.announcement.impl.store.AnnouncementStore
1314
import io.element.android.features.announcement.impl.store.InMemoryAnnouncementStore
1415
import io.element.android.tests.testutils.test
@@ -34,10 +35,10 @@ class AnnouncementPresenterTest {
3435
presenter.test {
3536
val state = awaitItem()
3637
assertThat(state.showSpaceAnnouncement).isFalse()
37-
store.setAnnouncementStatus(Announcement.Space, AnnouncementStore.AnnouncementStatus.Show)
38+
store.setAnnouncementStatus(Announcement.Space, AnnouncementStatus.Show)
3839
val updatedState = awaitItem()
3940
assertThat(updatedState.showSpaceAnnouncement).isTrue()
40-
store.setAnnouncementStatus(Announcement.Space, AnnouncementStore.AnnouncementStatus.Shown)
41+
store.setAnnouncementStatus(Announcement.Space, AnnouncementStatus.Shown)
4142
val finalState = awaitItem()
4243
assertThat(finalState.showSpaceAnnouncement).isFalse()
4344
}

features/announcement/impl/src/test/kotlin/io/element/android/features/announcement/impl/DefaultAnnouncementServiceTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.google.common.truth.Truth.assertThat
1111
import io.element.android.features.announcement.api.Announcement
1212
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
1313
import io.element.android.features.announcement.impl.spaces.aSpaceAnnouncementState
14+
import io.element.android.features.announcement.impl.store.AnnouncementStatus
1415
import io.element.android.features.announcement.impl.store.AnnouncementStore
1516
import io.element.android.features.announcement.impl.store.InMemoryAnnouncementStore
1617
import io.element.android.libraries.architecture.Presenter
@@ -25,14 +26,14 @@ class DefaultAnnouncementServiceTest {
2526
val sut = createDefaultAnnouncementService(
2627
announcementStore = announcementStore,
2728
)
28-
assertThat(announcementStore.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStore.AnnouncementStatus.NeverShown)
29+
assertThat(announcementStore.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStatus.NeverShown)
2930
sut.showAnnouncement(Announcement.Space)
30-
assertThat(announcementStore.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStore.AnnouncementStatus.Show)
31+
assertThat(announcementStore.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStatus.Show)
3132
// Simulate user close the announcement
3233
sut.onAnnouncementDismissed(Announcement.Space)
3334
// Entering again the space tab should not change the value
3435
sut.showAnnouncement(Announcement.Space)
35-
assertThat(announcementStore.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStore.AnnouncementStatus.Shown)
36+
assertThat(announcementStore.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStatus.Shown)
3637
}
3738

3839
private fun createDefaultAnnouncementService(

features/announcement/impl/src/test/kotlin/io/element/android/features/announcement/impl/spaces/SpaceAnnouncementPresenterTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.features.announcement.impl.spaces
99

1010
import com.google.common.truth.Truth.assertThat
1111
import io.element.android.features.announcement.api.Announcement
12+
import io.element.android.features.announcement.impl.store.AnnouncementStatus
1213
import io.element.android.features.announcement.impl.store.AnnouncementStore
1314
import io.element.android.features.announcement.impl.store.InMemoryAnnouncementStore
1415
import io.element.android.tests.testutils.test
@@ -24,10 +25,10 @@ class SpaceAnnouncementPresenterTest {
2425
announcementStore = store,
2526
)
2627
presenter.test {
27-
assertThat(store.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStore.AnnouncementStatus.NeverShown)
28+
assertThat(store.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStatus.NeverShown)
2829
val state = awaitItem()
2930
state.eventSink(SpaceAnnouncementEvents.Continue)
30-
assertThat(store.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStore.AnnouncementStatus.Shown)
31+
assertThat(store.announcementStatusFlow(Announcement.Space).first()).isEqualTo(AnnouncementStatus.Shown)
3132
}
3233
}
3334
}

features/announcement/impl/src/test/kotlin/io/element/android/features/announcement/impl/store/InMemoryAnnouncementStore.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,23 @@ import kotlinx.coroutines.flow.MutableStateFlow
1313
import kotlinx.coroutines.flow.asStateFlow
1414

1515
class InMemoryAnnouncementStore(
16-
initialSpaceAnnouncementStatus: AnnouncementStore.AnnouncementStatus = AnnouncementStore.AnnouncementStatus.NeverShown,
17-
initialNewNotificationSoundAnnouncementStatus: AnnouncementStore.AnnouncementStatus = AnnouncementStore.AnnouncementStatus.NeverShown,
16+
initialSpaceAnnouncementStatus: AnnouncementStatus = AnnouncementStatus.NeverShown,
17+
initialNewNotificationSoundAnnouncementStatus: AnnouncementStatus = AnnouncementStatus.NeverShown,
1818
) : AnnouncementStore {
1919
private val spaceAnnouncement = MutableStateFlow(initialSpaceAnnouncementStatus)
2020
private val newNotificationSoundAnnouncement = MutableStateFlow(initialNewNotificationSoundAnnouncementStatus)
2121

22-
override suspend fun setAnnouncementStatus(announcement: Announcement, status: AnnouncementStore.AnnouncementStatus) {
22+
override suspend fun setAnnouncementStatus(announcement: Announcement, status: AnnouncementStatus) {
2323
announcement.toMutableStateFlow().value = status
2424
}
2525

26-
override fun announcementStatusFlow(announcement: Announcement): Flow<AnnouncementStore.AnnouncementStatus> {
26+
override fun announcementStatusFlow(announcement: Announcement): Flow<AnnouncementStatus> {
2727
return announcement.toMutableStateFlow().asStateFlow()
2828
}
2929

3030
override suspend fun reset() {
31-
spaceAnnouncement.value = AnnouncementStore.AnnouncementStatus.NeverShown
32-
newNotificationSoundAnnouncement.value = AnnouncementStore.AnnouncementStatus.NeverShown
31+
spaceAnnouncement.value = AnnouncementStatus.NeverShown
32+
newNotificationSoundAnnouncement.value = AnnouncementStatus.NeverShown
3333
}
3434

3535
private fun Announcement.toMutableStateFlow() = when (this) {

0 commit comments

Comments
 (0)