|
|
|
@ -21,10 +21,14 @@ import androidx.compose.foundation.layout.Column
@@ -21,10 +21,14 @@ import androidx.compose.foundation.layout.Column
|
|
|
|
|
import androidx.compose.foundation.layout.consumeWindowInsets |
|
|
|
|
import androidx.compose.foundation.layout.fillMaxWidth |
|
|
|
|
import androidx.compose.foundation.layout.padding |
|
|
|
|
import androidx.compose.foundation.text.ClickableText |
|
|
|
|
import androidx.compose.material3.ExperimentalMaterial3Api |
|
|
|
|
import androidx.compose.material3.MaterialTheme |
|
|
|
|
import androidx.compose.runtime.Composable |
|
|
|
|
import androidx.compose.ui.Modifier |
|
|
|
|
import androidx.compose.ui.graphics.Color |
|
|
|
|
import androidx.compose.ui.res.stringResource |
|
|
|
|
import androidx.compose.ui.text.style.TextAlign |
|
|
|
|
import androidx.compose.ui.tooling.preview.PreviewParameter |
|
|
|
|
import androidx.compose.ui.unit.dp |
|
|
|
|
import io.element.android.features.roomdetails.impl.R |
|
|
|
@ -34,9 +38,9 @@ import io.element.android.libraries.designsystem.components.ProgressDialog
@@ -34,9 +38,9 @@ import io.element.android.libraries.designsystem.components.ProgressDialog
|
|
|
|
|
import io.element.android.libraries.designsystem.components.button.BackButton |
|
|
|
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory |
|
|
|
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch |
|
|
|
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceText |
|
|
|
|
import io.element.android.libraries.designsystem.preview.ElementPreview |
|
|
|
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight |
|
|
|
|
import io.element.android.libraries.designsystem.text.buildAnnotatedStringWithStyledPart |
|
|
|
|
import io.element.android.libraries.designsystem.theme.aliasScreenTitle |
|
|
|
|
import io.element.android.libraries.designsystem.theme.components.Scaffold |
|
|
|
|
import io.element.android.libraries.designsystem.theme.components.Text |
|
|
|
@ -49,6 +53,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@@ -49,6 +53,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
|
|
|
|
|
fun RoomNotificationSettingsView( |
|
|
|
|
state: RoomNotificationSettingsState, |
|
|
|
|
modifier: Modifier = Modifier, |
|
|
|
|
onShowGlobalNotifications: () -> Unit = {}, |
|
|
|
|
onBackPressed: () -> Unit = {}, |
|
|
|
|
) { |
|
|
|
|
Scaffold( |
|
|
|
@ -66,40 +71,62 @@ fun RoomNotificationSettingsView(
@@ -66,40 +71,62 @@ fun RoomNotificationSettingsView(
|
|
|
|
|
.consumeWindowInsets(padding), |
|
|
|
|
verticalArrangement = Arrangement.spacedBy(16.dp), |
|
|
|
|
) { |
|
|
|
|
val subtitle = when (state.defaultRoomNotificationMode) { |
|
|
|
|
RoomNotificationMode.ALL_MESSAGES -> stringResource(id = R.string.screen_room_notification_settings_mode_all_messages) |
|
|
|
|
RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY -> stringResource(id = R.string.screen_room_notification_settings_mode_mentions_and_keywords) |
|
|
|
|
RoomNotificationMode.MUTE -> stringResource(id = CommonStrings.common_mute) |
|
|
|
|
null -> "" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val roomNotificationSettings = state.roomNotificationSettings.dataOrNull() |
|
|
|
|
|
|
|
|
|
PreferenceCategory(title = stringResource(id = R.string.screen_room_notification_settings_custom_settings_title)) { |
|
|
|
|
PreferenceSwitch( |
|
|
|
|
isChecked = state.displayIsDefault.orTrue(), |
|
|
|
|
onCheckedChange = { |
|
|
|
|
state.eventSink(RoomNotificationSettingsEvents.SetNotificationMode(it)) |
|
|
|
|
}, |
|
|
|
|
title = "Match default setting", |
|
|
|
|
subtitle = subtitle, |
|
|
|
|
enabled = roomNotificationSettings != null |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
PreferenceText( |
|
|
|
|
title = stringResource(id = R.string.screen_room_notification_settings_allow_custom), |
|
|
|
|
subtitle = stringResource(id = R.string.screen_room_notification_settings_allow_custom_footnote), |
|
|
|
|
enabled = !state.displayIsDefault.orTrue(), |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if (roomNotificationSettings != null && state.displayNotificationMode != null) { |
|
|
|
|
PreferenceSwitch( |
|
|
|
|
isChecked = !state.displayIsDefault.orTrue(), |
|
|
|
|
onCheckedChange = { |
|
|
|
|
state.eventSink(RoomNotificationSettingsEvents.SetNotificationMode(!it)) |
|
|
|
|
}, |
|
|
|
|
title = stringResource(id = R.string.screen_room_notification_settings_allow_custom), |
|
|
|
|
subtitle = stringResource(id = R.string.screen_room_notification_settings_allow_custom_footnote), |
|
|
|
|
enabled = roomNotificationSettings != null |
|
|
|
|
) |
|
|
|
|
if (state.displayIsDefault.orTrue()) { |
|
|
|
|
PreferenceCategory(title = stringResource(id = R.string.screen_room_notification_settings_default_setting_title)) { |
|
|
|
|
val text = buildAnnotatedStringWithStyledPart( |
|
|
|
|
R.string.screen_room_notification_settings_default_setting_footnote, |
|
|
|
|
R.string.screen_room_notification_settings_default_setting_footnote_content_link, |
|
|
|
|
color = Color.Unspecified, |
|
|
|
|
underline = false, |
|
|
|
|
bold = true, |
|
|
|
|
) |
|
|
|
|
ClickableText( |
|
|
|
|
text = text, |
|
|
|
|
onClick = { |
|
|
|
|
onShowGlobalNotifications() |
|
|
|
|
}, |
|
|
|
|
modifier = Modifier |
|
|
|
|
.padding(start = 16.dp, bottom = 16.dp, end = 16.dp), |
|
|
|
|
style = ElementTheme.typography.fontBodyMdRegular |
|
|
|
|
.copy( |
|
|
|
|
color = MaterialTheme.colorScheme.secondary, |
|
|
|
|
textAlign = TextAlign.Center, |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
if(state.defaultRoomNotificationMode != null){ |
|
|
|
|
val defaultModeTitle = when (state.defaultRoomNotificationMode) { |
|
|
|
|
RoomNotificationMode.ALL_MESSAGES -> stringResource(id = R.string.screen_room_notification_settings_mode_all_messages) |
|
|
|
|
RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY -> { |
|
|
|
|
stringResource(id = R.string.screen_room_notification_settings_mode_mentions_and_keywords) |
|
|
|
|
} |
|
|
|
|
RoomNotificationMode.MUTE -> stringResource(id = CommonStrings.common_mute) |
|
|
|
|
} |
|
|
|
|
RoomNotificationSettingsOption( |
|
|
|
|
roomNotificationSettingsItem = RoomNotificationSettingsItem(state.defaultRoomNotificationMode, defaultModeTitle), |
|
|
|
|
isSelected = true, |
|
|
|
|
onOptionSelected = { }, |
|
|
|
|
enabled = true |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
PreferenceCategory(title = stringResource(id = R.string.screen_room_notification_settings_custom_settings_title)) { |
|
|
|
|
RoomNotificationSettingsOptions( |
|
|
|
|
selected = state.displayNotificationMode, |
|
|
|
|
enabled = !state.displayIsDefault.orTrue(), |
|
|
|
|
onOptionSelected = { |
|
|
|
|
state.eventSink(RoomNotificationSettingsEvents.RoomNotificationModeChanged(it.mode)) |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
},) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|