diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewRelayListView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewRelayListView.kt index c9a03aec3..22fdf2390 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewRelayListView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewRelayListView.kt @@ -1,5 +1,8 @@ package com.vitorpamplona.amethyst.ui.actions +import android.widget.Toast +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -35,10 +38,12 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow @@ -54,6 +59,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.ButtonBorder import com.vitorpamplona.amethyst.ui.theme.Size35dp import com.vitorpamplona.amethyst.ui.theme.placeholderText +import kotlinx.coroutines.launch import java.lang.Math.round @Composable @@ -203,6 +209,7 @@ fun ServerConfigHeader() { } } +@OptIn(ExperimentalFoundationApi::class) @Composable fun ServerConfig( item: RelaySetupInfo, @@ -217,6 +224,8 @@ fun ServerConfig( onDelete: (RelaySetupInfo) -> Unit ) { + val context = LocalContext.current + val scope = rememberCoroutineScope() Column(Modifier.fillMaxWidth()) { Row( verticalAlignment = Alignment.CenterVertically, @@ -252,15 +261,28 @@ fun ServerConfig( Column(Modifier.weight(1f)) { Row(verticalAlignment = Alignment.CenterVertically) { IconButton( - modifier = Modifier.size(30.dp), - onClick = { onToggleFollows(item) } + modifier = Modifier + .size(30.dp), + onClick = { } ) { Icon( painterResource(R.drawable.ic_home), stringResource(R.string.home_feed), modifier = Modifier .padding(end = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onToggleFollows(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.home_feed), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.feedTypes.contains(FeedType.FOLLOWS)) { Color.Green } else { @@ -272,14 +294,26 @@ fun ServerConfig( } IconButton( modifier = Modifier.size(30.dp), - onClick = { onTogglePrivateDMs(item) } + onClick = { } ) { Icon( painterResource(R.drawable.ic_dm), stringResource(R.string.private_message_feed), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onTogglePrivateDMs(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.private_message_feed), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.feedTypes.contains(FeedType.PRIVATE_DMS)) { Color.Green } else { @@ -291,14 +325,26 @@ fun ServerConfig( } IconButton( modifier = Modifier.size(30.dp), - onClick = { onTogglePublicChats(item) } + onClick = { } ) { Icon( imageVector = Icons.Default.Groups, stringResource(R.string.public_chat_feed), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onTogglePublicChats(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.public_chat_feed), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.feedTypes.contains(FeedType.PUBLIC_CHATS)) { Color.Green } else { @@ -310,14 +356,26 @@ fun ServerConfig( } IconButton( modifier = Modifier.size(30.dp), - onClick = { onToggleGlobal(item) } + onClick = { } ) { Icon( imageVector = Icons.Default.Public, stringResource(R.string.global_feed), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onToggleGlobal(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.global_feed), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.feedTypes.contains(FeedType.GLOBAL)) { Color.Green } else { @@ -337,7 +395,19 @@ fun ServerConfig( stringResource(R.string.search_feed), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onToggleSearch(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.search_feed), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.feedTypes.contains(FeedType.SEARCH)) { Color.Green } else { @@ -354,14 +424,26 @@ fun ServerConfig( Row(verticalAlignment = Alignment.CenterVertically) { IconButton( modifier = Modifier.size(30.dp), - onClick = { onToggleDownload(item) } + onClick = { } ) { Icon( imageVector = Icons.Default.Download, - null, + stringResource(R.string.read_from_relay), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onToggleDownload(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.read_from_relay), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.read) { Color.Green } else { @@ -382,14 +464,26 @@ fun ServerConfig( IconButton( modifier = Modifier.size(30.dp), - onClick = { onToggleUpload(item) } + onClick = { } ) { Icon( imageVector = Icons.Default.Upload, - null, + stringResource(R.string.write_to_relay), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { onToggleUpload(item) }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.write_to_relay), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.write) { Color.Green } else { @@ -410,10 +504,22 @@ fun ServerConfig( Icon( imageVector = Icons.Default.SyncProblem, - null, + stringResource(R.string.errors), modifier = Modifier .padding(horizontal = 5.dp) - .size(15.dp), + .size(15.dp) + .combinedClickable( + onClick = { }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.errors), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.errorCount > 0) Color.Yellow else Color.Green ) @@ -427,8 +533,22 @@ fun ServerConfig( Icon( imageVector = Icons.Default.DeleteSweep, - null, - modifier = Modifier.padding(horizontal = 5.dp).size(15.dp), + stringResource(R.string.spam), + modifier = Modifier + .padding(horizontal = 5.dp) + .size(15.dp) + .combinedClickable( + onClick = { }, + onLongClick = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.spam), + Toast.LENGTH_SHORT + ).show() + } + } + ), tint = if (item.spamCount > 0) Color.Yellow else Color.Green ) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6978f4087..3e1c422f3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -423,4 +423,6 @@ Target Amount in Sats Zapraiser at %1$s. %2$s sats to goal + Read from Relay + Write to Relay