diff --git a/app/src/main/java/chat/revolt/components/chat/specialembeds/SpecialEmbedSwitch.kt b/app/src/main/java/chat/revolt/components/chat/specialembeds/SpecialEmbedSwitch.kt
index 20320b14..6ba57915 100644
--- a/app/src/main/java/chat/revolt/components/chat/specialembeds/SpecialEmbedSwitch.kt
+++ b/app/src/main/java/chat/revolt/components/chat/specialembeds/SpecialEmbedSwitch.kt
@@ -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 -> {}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt
index 19a9f4d5..b0a30184 100644
--- a/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt
+++ b/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt
@@ -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
+ )
+ )
+ }
+ )
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cce70f1e..2e0b8f16 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -615,6 +615,10 @@
Long press to reply
Swipe to reply
Double tap to reply
+ Interactive Embeds
+ 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.
+ YouTube
+ Apple Music
Feedback
Join the Revolt server to give feedback or suggestions and report bugs.