Space announcement: iterate on wording.
This commit is contained in:
parent
4660fe428d
commit
bfcd926bd1
6 changed files with 10 additions and 45 deletions
|
|
@ -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
|
||||||
import io.element.android.features.announcement.impl.store.AnnouncementStore.SpaceAnnouncement
|
import io.element.android.features.announcement.impl.store.AnnouncementStore.SpaceAnnouncement
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.core.meta.BuildMeta
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
class SpaceAnnouncementPresenter(
|
class SpaceAnnouncementPresenter(
|
||||||
private val buildMeta: BuildMeta,
|
|
||||||
private val announcementStore: AnnouncementStore,
|
private val announcementStore: AnnouncementStore,
|
||||||
) : Presenter<SpaceAnnouncementState> {
|
) : Presenter<SpaceAnnouncementState> {
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -34,8 +32,6 @@ class SpaceAnnouncementPresenter(
|
||||||
}
|
}
|
||||||
|
|
||||||
return SpaceAnnouncementState(
|
return SpaceAnnouncementState(
|
||||||
applicationName = buildMeta.applicationName,
|
|
||||||
desktopApplicationName = buildMeta.desktopApplicationName,
|
|
||||||
eventSink = ::handleEvents
|
eventSink = ::handleEvents
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,5 @@
|
||||||
package io.element.android.features.announcement.impl.spaces
|
package io.element.android.features.announcement.impl.spaces
|
||||||
|
|
||||||
data class SpaceAnnouncementState(
|
data class SpaceAnnouncementState(
|
||||||
val applicationName: String,
|
|
||||||
val desktopApplicationName: String,
|
|
||||||
val eventSink: (SpaceAnnouncementEvents) -> Unit
|
val eventSink: (SpaceAnnouncementEvents) -> Unit
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,7 @@ open class SpaceAnnouncementStateProvider : PreviewParameterProvider<SpaceAnnoun
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aSpaceAnnouncementState(
|
fun aSpaceAnnouncementState(
|
||||||
applicationName: String = "Element",
|
|
||||||
desktopApplicationName: String = "Element",
|
|
||||||
eventSink: (SpaceAnnouncementEvents) -> Unit = {},
|
eventSink: (SpaceAnnouncementEvents) -> Unit = {},
|
||||||
) = SpaceAnnouncementState(
|
) = SpaceAnnouncementState(
|
||||||
applicationName = applicationName,
|
|
||||||
desktopApplicationName = desktopApplicationName,
|
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -55,11 +55,10 @@ fun SpaceAnnouncementView(
|
||||||
isScrollable = true,
|
isScrollable = true,
|
||||||
contentPadding = PaddingValues(top = 24.dp, start = 16.dp, end = 16.dp, bottom = 24.dp),
|
contentPadding = PaddingValues(top = 24.dp, start = 16.dp, end = 16.dp, bottom = 24.dp),
|
||||||
header = {
|
header = {
|
||||||
SpaceAnnouncementHeader(state = state)
|
SpaceAnnouncementHeader()
|
||||||
},
|
},
|
||||||
content = {
|
content = {
|
||||||
SpaceAnnouncementContent(
|
SpaceAnnouncementContent(
|
||||||
state = state,
|
|
||||||
modifier = Modifier.padding(horizontal = 8.dp),
|
modifier = Modifier.padding(horizontal = 8.dp),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
@ -73,17 +72,13 @@ fun SpaceAnnouncementView(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SpaceAnnouncementHeader(
|
private fun SpaceAnnouncementHeader(
|
||||||
state: SpaceAnnouncementState,
|
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
IconTitleSubtitleMolecule(
|
IconTitleSubtitleMolecule(
|
||||||
modifier = modifier.padding(top = 16.dp, bottom = 16.dp),
|
modifier = modifier.padding(top = 16.dp, bottom = 16.dp),
|
||||||
title = stringResource(id = R.string.screen_space_announcement_title),
|
title = stringResource(id = R.string.screen_space_announcement_title),
|
||||||
showBetaLabel = true,
|
showBetaLabel = true,
|
||||||
subTitle = stringResource(
|
subTitle = stringResource(id = R.string.screen_space_announcement_subtitle),
|
||||||
id = R.string.screen_space_announcement_subtitle,
|
|
||||||
state.applicationName
|
|
||||||
),
|
|
||||||
iconStyle = BigIcon.Style.Default(
|
iconStyle = BigIcon.Style.Default(
|
||||||
vectorIcon = CompoundIcons.WorkspaceSolid(),
|
vectorIcon = CompoundIcons.WorkspaceSolid(),
|
||||||
usePrimaryTint = true,
|
usePrimaryTint = true,
|
||||||
|
|
@ -93,7 +88,6 @@ private fun SpaceAnnouncementHeader(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SpaceAnnouncementContent(
|
private fun SpaceAnnouncementContent(
|
||||||
state: SpaceAnnouncementState,
|
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
|
|
@ -103,7 +97,7 @@ private fun SpaceAnnouncementContent(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
items = persistentListOf(
|
items = persistentListOf(
|
||||||
InfoListItem(
|
InfoListItem(
|
||||||
message = stringResource(id = R.string.screen_space_announcement_item1, state.desktopApplicationName),
|
message = stringResource(id = R.string.screen_space_announcement_item1),
|
||||||
iconVector = CompoundIcons.VisibilityOn(),
|
iconVector = CompoundIcons.VisibilityOn(),
|
||||||
),
|
),
|
||||||
InfoListItem(
|
InfoListItem(
|
||||||
|
|
@ -116,11 +110,11 @@ private fun SpaceAnnouncementContent(
|
||||||
),
|
),
|
||||||
InfoListItem(
|
InfoListItem(
|
||||||
message = stringResource(id = R.string.screen_space_announcement_item4),
|
message = stringResource(id = R.string.screen_space_announcement_item4),
|
||||||
iconVector = CompoundIcons.Leave(),
|
iconVector = CompoundIcons.Explore(),
|
||||||
),
|
),
|
||||||
InfoListItem(
|
InfoListItem(
|
||||||
message = stringResource(id = R.string.screen_space_announcement_item5),
|
message = stringResource(id = R.string.screen_space_announcement_item5),
|
||||||
iconVector = CompoundIcons.Explore(),
|
iconVector = CompoundIcons.Leave(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
textStyle = ElementTheme.typography.fontBodyLgMedium,
|
textStyle = ElementTheme.typography.fontBodyLgMedium,
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
<string name="screen_space_announcement_item1">"View spaces you’ve 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_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_item3">"Discover any rooms you can join in your spaces"</string>
|
||||||
<string name="screen_space_announcement_item4">"Leave any spaces you’ve joined"</string>
|
<string name="screen_space_announcement_item4">"Join public spaces"</string>
|
||||||
<string name="screen_space_announcement_item5">"Join public spaces"</string>
|
<string name="screen_space_announcement_item5">"Leave any spaces you’ve joined"</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_notice">"Creating and managing spaces is coming soon."</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_subtitle">"Welcome to the beta version of Spaces! With this first version you can:"</string>
|
||||||
<string name="screen_space_announcement_title">"Introducing Spaces"</string>
|
<string name="screen_space_announcement_title">"Introducing Spaces"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -10,26 +10,12 @@ package io.element.android.features.announcement.impl.spaces
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
||||||
import io.element.android.features.announcement.impl.store.InMemoryAnnouncementStore
|
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 io.element.android.tests.testutils.test
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class SpaceAnnouncementPresenterTest {
|
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
|
@Test
|
||||||
fun `present - when user continues, the store is updated`() = runTest {
|
fun `present - when user continues, the store is updated`() = runTest {
|
||||||
val store = InMemoryAnnouncementStore()
|
val store = InMemoryAnnouncementStore()
|
||||||
|
|
@ -46,12 +32,7 @@ class SpaceAnnouncementPresenterTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createSpaceAnnouncementPresenter(
|
private fun createSpaceAnnouncementPresenter(
|
||||||
buildMeta: BuildMeta = aBuildMeta(
|
|
||||||
applicationName = AN_APPLICATION_NAME,
|
|
||||||
desktopApplicationName = AN_APPLICATION_NAME_DESKTOP,
|
|
||||||
),
|
|
||||||
announcementStore: AnnouncementStore = InMemoryAnnouncementStore(),
|
announcementStore: AnnouncementStore = InMemoryAnnouncementStore(),
|
||||||
) = SpaceAnnouncementPresenter(
|
) = SpaceAnnouncementPresenter(
|
||||||
buildMeta = buildMeta,
|
|
||||||
announcementStore = announcementStore,
|
announcementStore = announcementStore,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue