Space announcement: iterate on wording.

This commit is contained in:
Benoit Marty
2025-10-03 15:11:55 +02:00
parent 4660fe428d
commit bfcd926bd1
6 changed files with 10 additions and 45 deletions

View File

@@ -13,12 +13,10 @@ import dev.zacsweers.metro.Inject
import io.element.android.features.announcement.impl.store.AnnouncementStore
import io.element.android.features.announcement.impl.store.AnnouncementStore.SpaceAnnouncement
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.meta.BuildMeta
import kotlinx.coroutines.launch
@Inject
class SpaceAnnouncementPresenter(
private val buildMeta: BuildMeta,
private val announcementStore: AnnouncementStore,
) : Presenter<SpaceAnnouncementState> {
@Composable
@@ -34,8 +32,6 @@ class SpaceAnnouncementPresenter(
}
return SpaceAnnouncementState(
applicationName = buildMeta.applicationName,
desktopApplicationName = buildMeta.desktopApplicationName,
eventSink = ::handleEvents
)
}

View File

@@ -8,7 +8,5 @@
package io.element.android.features.announcement.impl.spaces
data class SpaceAnnouncementState(
val applicationName: String,
val desktopApplicationName: String,
val eventSink: (SpaceAnnouncementEvents) -> Unit
)

View File

@@ -17,11 +17,7 @@ open class SpaceAnnouncementStateProvider : PreviewParameterProvider<SpaceAnnoun
}
fun aSpaceAnnouncementState(
applicationName: String = "Element",
desktopApplicationName: String = "Element",
eventSink: (SpaceAnnouncementEvents) -> Unit = {},
) = SpaceAnnouncementState(
applicationName = applicationName,
desktopApplicationName = desktopApplicationName,
eventSink = eventSink,
)

View File

@@ -55,11 +55,10 @@ fun SpaceAnnouncementView(
isScrollable = true,
contentPadding = PaddingValues(top = 24.dp, start = 16.dp, end = 16.dp, bottom = 24.dp),
header = {
SpaceAnnouncementHeader(state = state)
SpaceAnnouncementHeader()
},
content = {
SpaceAnnouncementContent(
state = state,
modifier = Modifier.padding(horizontal = 8.dp),
)
},
@@ -73,17 +72,13 @@ fun SpaceAnnouncementView(
@Composable
private fun SpaceAnnouncementHeader(
state: SpaceAnnouncementState,
modifier: Modifier = Modifier,
) {
IconTitleSubtitleMolecule(
modifier = modifier.padding(top = 16.dp, bottom = 16.dp),
title = stringResource(id = R.string.screen_space_announcement_title),
showBetaLabel = true,
subTitle = stringResource(
id = R.string.screen_space_announcement_subtitle,
state.applicationName
),
subTitle = stringResource(id = R.string.screen_space_announcement_subtitle),
iconStyle = BigIcon.Style.Default(
vectorIcon = CompoundIcons.WorkspaceSolid(),
usePrimaryTint = true,
@@ -93,7 +88,6 @@ private fun SpaceAnnouncementHeader(
@Composable
private fun SpaceAnnouncementContent(
state: SpaceAnnouncementState,
modifier: Modifier = Modifier,
) {
Column(
@@ -103,7 +97,7 @@ private fun SpaceAnnouncementContent(
modifier = Modifier.fillMaxWidth(),
items = persistentListOf(
InfoListItem(
message = stringResource(id = R.string.screen_space_announcement_item1, state.desktopApplicationName),
message = stringResource(id = R.string.screen_space_announcement_item1),
iconVector = CompoundIcons.VisibilityOn(),
),
InfoListItem(
@@ -116,11 +110,11 @@ private fun SpaceAnnouncementContent(
),
InfoListItem(
message = stringResource(id = R.string.screen_space_announcement_item4),
iconVector = CompoundIcons.Leave(),
iconVector = CompoundIcons.Explore(),
),
InfoListItem(
message = stringResource(id = R.string.screen_space_announcement_item5),
iconVector = CompoundIcons.Explore(),
iconVector = CompoundIcons.Leave(),
),
),
textStyle = ElementTheme.typography.fontBodyLgMedium,

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_space_announcement_item1">"View spaces youve created or joined on %1$s desktop"</string>
<string name="screen_space_announcement_item1">"View spaces you\'ve created or joined"</string>
<string name="screen_space_announcement_item2">"Accept or decline invites to spaces"</string>
<string name="screen_space_announcement_item3">"Discover any rooms you can join in your spaces"</string>
<string name="screen_space_announcement_item4">"Leave any spaces youve joined"</string>
<string name="screen_space_announcement_item5">"Join public spaces"</string>
<string name="screen_space_announcement_notice">"More features will be added in the future, such as creating or managing spaces on mobile."</string>
<string name="screen_space_announcement_subtitle">"Welcome to the beta version of Spaces on %1$s mobile! With this first version you can:"</string>
<string name="screen_space_announcement_item4">"Join public spaces"</string>
<string name="screen_space_announcement_item5">"Leave any spaces youve joined"</string>
<string name="screen_space_announcement_notice">"Creating and managing spaces is coming soon."</string>
<string name="screen_space_announcement_subtitle">"Welcome to the beta version of Spaces! With this first version you can:"</string>
<string name="screen_space_announcement_title">"Introducing Spaces"</string>
</resources>

View File

@@ -10,26 +10,12 @@ package io.element.android.features.announcement.impl.spaces
import com.google.common.truth.Truth.assertThat
import io.element.android.features.announcement.impl.store.AnnouncementStore
import io.element.android.features.announcement.impl.store.InMemoryAnnouncementStore
import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.matrix.test.AN_APPLICATION_NAME
import io.element.android.libraries.matrix.test.AN_APPLICATION_NAME_DESKTOP
import io.element.android.libraries.matrix.test.core.aBuildMeta
import io.element.android.tests.testutils.test
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import org.junit.Test
class SpaceAnnouncementPresenterTest {
@Test
fun `present - initial state`() = runTest {
val presenter = createSpaceAnnouncementPresenter()
presenter.test {
val state = awaitItem()
assertThat(state.applicationName).isEqualTo(AN_APPLICATION_NAME)
assertThat(state.desktopApplicationName).isEqualTo(AN_APPLICATION_NAME_DESKTOP)
}
}
@Test
fun `present - when user continues, the store is updated`() = runTest {
val store = InMemoryAnnouncementStore()
@@ -46,12 +32,7 @@ class SpaceAnnouncementPresenterTest {
}
private fun createSpaceAnnouncementPresenter(
buildMeta: BuildMeta = aBuildMeta(
applicationName = AN_APPLICATION_NAME,
desktopApplicationName = AN_APPLICATION_NAME_DESKTOP,
),
announcementStore: AnnouncementStore = InMemoryAnnouncementStore(),
) = SpaceAnnouncementPresenter(
buildMeta = buildMeta,
announcementStore = announcementStore,
)