feat: special embeds control UI

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2024-10-04 19:19:51 +02:00
parent e4406b2966
commit 48e20d5464
3 changed files with 80 additions and 3 deletions

View File

@ -3,12 +3,21 @@ package chat.revolt.components.chat.specialembeds
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import chat.revolt.api.schemas.Special
import chat.revolt.api.settings.LoadedSettings
@Composable
fun SpecialEmbedSwitch(special: Special, modifier: Modifier = Modifier) {
when (special.type) {
"YouTube" -> YoutubeEmbedSwitch(special, modifier)
"AppleMusic" -> AppleMusicEmbed(special, modifier)
when {
(special.type == "YouTube") && LoadedSettings.specialEmbedSettings.embedYouTube -> YoutubeEmbedSwitch(
special,
modifier
)
(special.type == "AppleMusic") && LoadedSettings.specialEmbedSettings.embedAppleMusic -> AppleMusicEmbed(
special,
modifier
)
else -> {}
}
}

View File

@ -1,5 +1,6 @@
package chat.revolt.screens.settings
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.imePadding
@ -13,7 +14,9 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.ListItem
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
@ -21,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
@ -28,6 +32,7 @@ import androidx.navigation.NavController
import chat.revolt.R
import chat.revolt.api.settings.LoadedSettings
import chat.revolt.api.settings.MessageReplyStyle
import chat.revolt.api.settings.SpecialEmbedSettings
import chat.revolt.api.settings.SyncedSettings
import chat.revolt.components.generic.ListHeader
import chat.revolt.components.generic.RadioItem
@ -40,6 +45,13 @@ class ChatSettingsScreenViewModel : ViewModel() {
LoadedSettings.messageReplyStyle = next
}
}
fun updateSpecialEmbedSettings(next: SpecialEmbedSettings) {
viewModelScope.launch {
SyncedSettings.updateAndroid(SyncedSettings.android.copy(specialEmbedSettings = next))
LoadedSettings.specialEmbedSettings = next
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@ -106,6 +118,58 @@ fun ChatSettingsScreen(
label = { Text(text = stringResource(R.string.settings_chat_quick_reply_double_tap)) }
)
}
ListHeader {
Text(
text = stringResource(R.string.settings_chat_interactive_embeds)
)
}
Text(
stringResource(R.string.settings_chat_interactive_embeds_description),
modifier = Modifier
.padding(vertical = 8.dp, horizontal = 16.dp),
)
Column {
ListItem(
headlineContent = {
Text(stringResource(R.string.settings_chat_interactive_embeds_youtube))
},
trailingContent = {
Switch(
checked = LoadedSettings.specialEmbedSettings.embedYouTube,
onCheckedChange = null
)
},
modifier = Modifier.clickable {
viewModel.updateSpecialEmbedSettings(
LoadedSettings.specialEmbedSettings.copy(
embedYouTube = !LoadedSettings.specialEmbedSettings.embedYouTube
)
)
}
)
ListItem(
headlineContent = {
Text(stringResource(R.string.settings_chat_interactive_embeds_apple_music))
},
trailingContent = {
Switch(
checked = LoadedSettings.specialEmbedSettings.embedAppleMusic,
onCheckedChange = null
)
},
modifier = Modifier.clickable {
viewModel.updateSpecialEmbedSettings(
LoadedSettings.specialEmbedSettings.copy(
embedAppleMusic = !LoadedSettings.specialEmbedSettings.embedAppleMusic
)
)
}
)
}
}
}
}

View File

@ -615,6 +615,10 @@
<string name="settings_chat_quick_reply_none">Long press to reply</string>
<string name="settings_chat_quick_reply_swipe_from_end">Swipe to reply</string>
<string name="settings_chat_quick_reply_double_tap">Double tap to reply</string>
<string name="settings_chat_interactive_embeds">Interactive Embeds</string>
<string name="settings_chat_interactive_embeds_description">Interactive Embeds allow you to interact with some types of links directly inside chat. For example, you can play YouTube videos or preview albums from Apple Music.</string>
<string name="settings_chat_interactive_embeds_youtube">YouTube</string>
<string name="settings_chat_interactive_embeds_apple_music">Apple Music</string>
<string name="settings_feedback">Feedback</string>
<string name="settings_feedback_description">Join the Revolt server to give feedback or suggestions and report bugs.</string>