Skip to content

Commit 86c0a37

Browse files
committed
Remove string duplication
1 parent 8f281ff commit 86c0a37

File tree

5 files changed

+43
-14
lines changed

5 files changed

+43
-14
lines changed

libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CreateDmConfirmationBottomSheet.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import androidx.compose.ui.Alignment
1919
import androidx.compose.ui.Modifier
2020
import androidx.compose.ui.res.stringResource
2121
import androidx.compose.ui.text.style.TextAlign
22+
import androidx.compose.ui.tooling.preview.PreviewParameter
2223
import androidx.compose.ui.unit.dp
2324
import io.element.android.compound.theme.ElementTheme
2425
import io.element.android.compound.tokens.generated.CompoundIcons
@@ -71,8 +72,7 @@ fun CreateDmConfirmationBottomSheet(
7172
)
7273
Spacer(modifier = Modifier.height(8.dp))
7374
Text(
74-
// TODO Check if finally we do not want to remove string duplication
75-
text = stringResource(R.string.screen_bottom_sheet_create_dm_message_no_displayname, matrixUser.getFullName()),
75+
text = stringResource(R.string.screen_bottom_sheet_create_dm_message, matrixUser.getFullName()),
7676
style = ElementTheme.typography.fontBodyMdRegular,
7777
color = ElementTheme.colors.textSecondary,
7878
textAlign = TextAlign.Center,
@@ -97,9 +97,9 @@ fun CreateDmConfirmationBottomSheet(
9797

9898
@PreviewsDayNight
9999
@Composable
100-
internal fun CreateDmConfirmationBottomSheetPreview() = ElementPreview {
100+
internal fun CreateDmConfirmationBottomSheetPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreview {
101101
CreateDmConfirmationBottomSheet(
102-
matrixUser = aMatrixUser(),
102+
matrixUser = matrixUser,
103103
onSendInvite = {},
104104
onDismiss = {},
105105
)

libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt

+10-4
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77

88
package io.element.android.libraries.matrix.ui.model
99

10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.res.stringResource
1012
import io.element.android.libraries.designsystem.components.avatar.AvatarData
1113
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
1214
import io.element.android.libraries.matrix.api.user.MatrixUser
15+
import io.element.android.libraries.ui.strings.CommonStrings
1316

1417
fun MatrixUser.getAvatarData(size: AvatarSize) = AvatarData(
1518
id = userId.value,
@@ -22,10 +25,13 @@ fun MatrixUser.getBestName(): String {
2225
return displayName?.takeIf { it.isNotEmpty() } ?: userId.value
2326
}
2427

28+
@Composable
2529
fun MatrixUser.getFullName(): String {
26-
return if (displayName.isNullOrBlank()) {
27-
userId.value
28-
} else {
29-
"$displayName ($userId)"
30+
return displayName.let { name ->
31+
if (name.isNullOrBlank()) {
32+
userId.value
33+
} else {
34+
stringResource(CommonStrings.common_name_and_id, name, userId.value)
35+
}
3036
}
3137
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
33
<string name="screen_bottom_sheet_create_dm_confirmation_button_title">"Send invite"</string>
4-
<string name="screen_bottom_sheet_create_dm_message">"Would you like to start a chat with %1$s (%2$s)?"</string>
5-
<string name="screen_bottom_sheet_create_dm_message_no_displayname">"Would you like to start a chat with %1$s?"</string>
4+
<string name="screen_bottom_sheet_create_dm_message">"Would you like to start a chat with %1$s?"</string>
65
<string name="screen_bottom_sheet_create_dm_title">"Send invite?"</string>
76
<string name="screen_invites_invited_you">"%1$s (%2$s) invited you"</string>
87
</resources>

libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensionsTest.kt

+27-4
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,27 @@
77

88
package io.element.android.libraries.matrix.ui.model
99

10+
import androidx.test.ext.junit.runners.AndroidJUnit4
11+
import app.cash.molecule.RecompositionMode
12+
import app.cash.molecule.moleculeFlow
13+
import app.cash.turbine.test
1014
import com.google.common.truth.Truth.assertThat
1115
import io.element.android.libraries.designsystem.components.avatar.AvatarData
1216
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
1317
import io.element.android.libraries.matrix.api.user.MatrixUser
1418
import io.element.android.libraries.matrix.test.A_USER_ID
19+
import io.element.android.tests.testutils.WarmUpRule
20+
import io.element.android.tests.testutils.withConfigurationAndContext
21+
import kotlinx.coroutines.test.runTest
22+
import org.junit.Rule
1523
import org.junit.Test
24+
import org.junit.runner.RunWith
1625

26+
@RunWith(AndroidJUnit4::class)
1727
class MatrixUserExtensionsTest {
28+
@get:Rule
29+
val warmUpRule = WarmUpRule()
30+
1831
@Test
1932
fun `getAvatarData should return the expected value`() {
2033
val matrixUser = MatrixUser(
@@ -59,20 +72,30 @@ class MatrixUserExtensionsTest {
5972
}
6073

6174
@Test
62-
fun `getFullName should return the display name is available and the userId`() {
75+
fun `getFullName should return the display name is available and the userId`() = runTest {
6376
val matrixUser = MatrixUser(
6477
userId = A_USER_ID,
6578
displayName = "displayName",
6679
)
67-
assertThat(matrixUser.getFullName()).isEqualTo("displayName (@alice:server.org)")
80+
moleculeFlow(RecompositionMode.Immediate) {
81+
withConfigurationAndContext {
82+
matrixUser.getFullName()
83+
}
84+
}.test {
85+
assertThat(awaitItem()).isEqualTo("displayName (@alice:server.org)")
86+
}
6887
}
6988

7089
@Test
71-
fun `getBestName should return only the id when name is not available`() {
90+
fun `getBestName should return only the id when name is not available`() = runTest {
7291
val matrixUser = MatrixUser(
7392
userId = A_USER_ID,
7493
displayName = null,
7594
)
76-
assertThat(matrixUser.getFullName()).isEqualTo(A_USER_ID.value)
95+
moleculeFlow(RecompositionMode.Immediate) {
96+
matrixUser.getFullName()
97+
}.test {
98+
assertThat(awaitItem()).isEqualTo(A_USER_ID.value)
99+
}
77100
}
78101
}

libraries/ui-strings/src/main/res/values/localazy.xml

+1
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ Reason: %1$s."</string>
193193
<string name="common_message_removed">"Message removed"</string>
194194
<string name="common_modern">"Modern"</string>
195195
<string name="common_mute">"Mute"</string>
196+
<string name="common_name_and_id">"%1$s (%2$s)"</string>
196197
<string name="common_no_results">"No results"</string>
197198
<string name="common_no_room_name">"No room name"</string>
198199
<string name="common_offline">"Offline"</string>

0 commit comments

Comments
 (0)