Skip to content

Commit fab2639

Browse files
authored
Merge pull request #5469 from element-hq/feature/bma/newSound
Set a notification sound
2 parents 6cc7f6d + c059e40 commit fab2639

File tree

96 files changed

+476
-115
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+476
-115
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3+
<string name="screen_space_announcement_item1">"Se klynger, du har oprettet eller tilmeldt dig"</string>
4+
<string name="screen_space_announcement_item2">"Acceptere eller afvise invitationer til klynger"</string>
5+
<string name="screen_space_announcement_item3">"Finde alle rum, du kan deltage i, i dine klynger"</string>
6+
<string name="screen_space_announcement_item4">"Deltage i offentlige klynger"</string>
7+
<string name="screen_space_announcement_item5">"Forlade de klynger, du har tilsluttet dig"</string>
8+
<string name="screen_space_announcement_notice">"Oprettelse og administration af klynger kommer snart."</string>
9+
<string name="screen_space_announcement_subtitle">"Velkommen til betaversionen af Klynger! Med denne første version kan du:"</string>
10+
<string name="screen_space_announcement_title">"Introduktion til Klynger"</string>
11+
</resources>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3+
<string name="screen_space_announcement_item1">"Von dir erstellte oder beigetretene Spaces anzeigen"</string>
4+
<string name="screen_space_announcement_item2">"Einladungen zu Spaces annehmen oder ablehnen"</string>
5+
<string name="screen_space_announcement_item3">"Chats innerhalb deiner Spaces entdecken, um ihnen beizutreten"</string>
6+
<string name="screen_space_announcement_item4">"Öffentlichen Spaces beitreten"</string>
7+
<string name="screen_space_announcement_item5">"Spaces verlassen, bei denen du Mitglied bist"</string>
8+
<string name="screen_space_announcement_notice">"Das Erstellen und Verwalten von Spaces ist bald verfügbar."</string>
9+
<string name="screen_space_announcement_subtitle">"Willkommen bei der Beta-Version von Spaces! Mit dieser ersten Version kannst du:"</string>
10+
<string name="screen_space_announcement_title">"Einführung in Spaces"</string>
11+
</resources>

features/announcement/impl/src/main/res/values-fr/translations.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
33
<string name="screen_space_announcement_item1">"Voir les espaces que vous avez créés ou rejoints"</string>
44
<string name="screen_space_announcement_item2">"Accepter ou refuser les invitations aux espaces"</string>
5-
<string name="screen_space_announcement_item3">"Découvrez les salons que vous pouvez joindre depuis vos espaces"</string>
5+
<string name="screen_space_announcement_item3">"Découvrir les salons que vous pouvez joindre depuis vos espaces"</string>
66
<string name="screen_space_announcement_item4">"Rejoindre les espaces publics"</string>
7-
<string name="screen_space_announcement_item5">"Quittez les espaces dont vous êtes membre."</string>
7+
<string name="screen_space_announcement_item5">"Quitter les espaces dont vous êtes membre."</string>
88
<string name="screen_space_announcement_notice">"La création et la gestion des espaces seront bientôt disponibles."</string>
99
<string name="screen_space_announcement_subtitle">"Bienvenue dans la version bêta des espaces! Avec cette première version, vous pourrez :"</string>
1010
<string name="screen_space_announcement_title">"Ajout des espaces"</string>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3+
<string name="screen_space_announcement_item1">"Se områder du har opprettet eller blitt med i"</string>
4+
<string name="screen_space_announcement_item2">"Godta eller avslå invitasjoner til områder"</string>
5+
<string name="screen_space_announcement_item3">"Oppdag alle rom du kan bli med i i dine områder"</string>
6+
<string name="screen_space_announcement_item4">"Bli med i offentlige områder"</string>
7+
<string name="screen_space_announcement_item5">"Forlat områder du har blitt med i"</string>
8+
<string name="screen_space_announcement_notice">"Oppretting og administrasjon av områder kommer snart."</string>
9+
<string name="screen_space_announcement_subtitle">"Velkommen til betaversjonen av Områder! Med denne første versjonen kan du:"</string>
10+
<string name="screen_space_announcement_title">"Vi introduserer Områder"</string>
11+
</resources>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3+
<string name="screen_space_announcement_item1">"Vizualizați spațiile pe care le-ați creat sau la care v-ați alăturat"</string>
4+
<string name="screen_space_announcement_item2">"Acceptați sau refuzați invitațiile la spații"</string>
5+
<string name="screen_space_announcement_item3">"Descoperiți toate camerele la care vă puteți alătura în spațiile dumneavoastră."</string>
6+
<string name="screen_space_announcement_item4">"Alăturați-vă spațiilor publice"</string>
7+
<string name="screen_space_announcement_item5">"Părăsiți spațiile la care v-ați alăturat."</string>
8+
<string name="screen_space_announcement_notice">"Crearea și gestionarea spațiilor vor fi disponibile în curând."</string>
9+
<string name="screen_space_announcement_subtitle">"Bun venit la versiunea beta a Spațiilor! Cu această primă versiune puteți:"</string>
10+
<string name="screen_space_announcement_title">"Vă prezentăm Spații"</string>
11+
</resources>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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.home.impl.components
9+
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.res.stringResource
13+
import io.element.android.features.home.impl.R
14+
import io.element.android.libraries.designsystem.components.Announcement
15+
import io.element.android.libraries.designsystem.components.AnnouncementType
16+
import io.element.android.libraries.designsystem.preview.ElementPreview
17+
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
18+
import io.element.android.libraries.ui.strings.CommonStrings
19+
20+
@Composable
21+
internal fun NewNotificationSoundBanner(
22+
onDismissClick: () -> Unit,
23+
modifier: Modifier = Modifier,
24+
) {
25+
Announcement(
26+
modifier = modifier.roomListBannerPadding(),
27+
title = stringResource(R.string.banner_new_sound_title),
28+
description = stringResource(R.string.banner_new_sound_message),
29+
type = AnnouncementType.Actionable(
30+
actionText = stringResource(CommonStrings.action_ok),
31+
onActionClick = onDismissClick,
32+
onDismissClick = onDismissClick,
33+
),
34+
)
35+
}
36+
37+
@PreviewsDayNight
38+
@Composable
39+
internal fun NewNotificationSoundBannerPreview() = ElementPreview {
40+
NewNotificationSoundBanner(
41+
onDismissClick = {},
42+
)
43+
}

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,12 @@ private fun RoomsViewList(
251251
item {
252252
BatteryOptimizationBanner(state = state.batteryOptimizationState)
253253
}
254+
} else if (state.showNewNotificationSoundBanner) {
255+
item {
256+
NewNotificationSoundBanner(
257+
onDismissClick = { updatedEventSink(RoomListEvents.DismissNewNotificationSoundBanner) },
258+
)
259+
}
254260
}
255261
}
256262

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContentStateProvider.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,22 @@ open class RoomListContentStateProvider : PreviewParameterProvider<RoomListConte
2626
aSkeletonContentState(),
2727
anEmptyContentState(),
2828
anEmptyContentState(securityBannerState = SecurityBannerState.SetUpRecovery),
29+
aRoomsContentState(
30+
showNewNotificationSoundBanner = true,
31+
),
2932
)
3033
}
3134

3235
internal fun aRoomsContentState(
3336
securityBannerState: SecurityBannerState = SecurityBannerState.None,
37+
showNewNotificationSoundBanner: Boolean = false,
3438
summaries: ImmutableList<RoomListRoomSummary> = aRoomListRoomSummaryList(),
3539
fullScreenIntentPermissionsState: FullScreenIntentPermissionsState = aFullScreenIntentPermissionsState(),
3640
batteryOptimizationState: BatteryOptimizationState = aBatteryOptimizationState(),
3741
seenRoomInvites: Set<RoomId> = emptySet(),
3842
) = RoomListContentState.Rooms(
3943
securityBannerState = securityBannerState,
44+
showNewNotificationSoundBanner = showNewNotificationSoundBanner,
4045
fullScreenIntentPermissionsState = fullScreenIntentPermissionsState,
4146
batteryOptimizationState = batteryOptimizationState,
4247
summaries = summaries,

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListEvents.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ sealed interface RoomListEvents {
1414
data class UpdateVisibleRange(val range: IntRange) : RoomListEvents
1515
data object DismissRequestVerificationPrompt : RoomListEvents
1616
data object DismissBanner : RoomListEvents
17+
data object DismissNewNotificationSoundBanner : RoomListEvents
1718
data object ToggleSearchResults : RoomListEvents
1819
data class ShowContextMenu(val roomSummary: RoomListRoomSummary) : RoomListEvents
1920

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class RoomListPresenter(
9898
}
9999

100100
var securityBannerDismissed by rememberSaveable { mutableStateOf(false) }
101+
val showNewNotificationSoundBanner by appPreferencesStore.showNewNotificationSoundBanner().collectAsState(false)
101102

102103
// Avatar indicator
103104
val hideInvitesAvatar by client.rememberHideInvitesAvatar()
@@ -112,6 +113,9 @@ class RoomListPresenter(
112113
}
113114
RoomListEvents.DismissRequestVerificationPrompt -> securityBannerDismissed = true
114115
RoomListEvents.DismissBanner -> securityBannerDismissed = true
116+
RoomListEvents.DismissNewNotificationSoundBanner -> coroutineScope.launch {
117+
appPreferencesStore.setShowNewNotificationSoundBanner(false)
118+
}
115119
RoomListEvents.ToggleSearchResults -> searchState.eventSink(RoomListSearchEvents.ToggleSearchVisibility)
116120
is RoomListEvents.ShowContextMenu -> {
117121
coroutineScope.showContextMenu(event, contextMenu)
@@ -141,7 +145,10 @@ class RoomListPresenter(
141145
}
142146
}
143147

144-
val contentState = roomListContentState(securityBannerDismissed)
148+
val contentState = roomListContentState(
149+
securityBannerDismissed,
150+
showNewNotificationSoundBanner,
151+
)
145152

146153
val canReportRoom by produceState(false) { value = client.canReportRoom() }
147154

@@ -197,6 +204,7 @@ class RoomListPresenter(
197204
@Composable
198205
private fun roomListContentState(
199206
securityBannerDismissed: Boolean,
207+
showNewNotificationSoundBanner: Boolean,
200208
): RoomListContentState {
201209
val roomSummaries by produceState(initialValue = AsyncData.Loading()) {
202210
roomListDataSource.allRooms.collect { value = AsyncData.Success(it) }
@@ -215,11 +223,14 @@ class RoomListPresenter(
215223
val seenRoomInvites by remember { seenInvitesStore.seenRoomIds() }.collectAsState(emptySet())
216224
val securityBannerState by rememberSecurityBannerState(securityBannerDismissed)
217225
return when {
218-
showEmpty -> RoomListContentState.Empty(securityBannerState = securityBannerState)
226+
showEmpty -> RoomListContentState.Empty(
227+
securityBannerState = securityBannerState,
228+
)
219229
showSkeleton -> RoomListContentState.Skeleton(count = 16)
220230
else -> {
221231
RoomListContentState.Rooms(
222232
securityBannerState = securityBannerState,
233+
showNewNotificationSoundBanner = showNewNotificationSoundBanner,
223234
fullScreenIntentPermissionsState = fullScreenIntentPermissionsPresenter.present(),
224235
batteryOptimizationState = batteryOptimizationPresenter.present(),
225236
summaries = roomSummaries.dataOrNull().orEmpty().toPersistentList(),

0 commit comments

Comments
 (0)