fix(m3): friends options sheet should be dropdown menu

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2024-02-20 23:17:17 +01:00
parent 3a0f221356
commit b746c1d47e
1 changed files with 27 additions and 51 deletions

View File

@ -10,14 +10,14 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@ -25,7 +25,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import chat.revolt.R
@ -35,62 +34,16 @@ import chat.revolt.callbacks.Action
import chat.revolt.callbacks.ActionChannel
import chat.revolt.components.chat.MemberListItem
import chat.revolt.components.generic.CountableListHeader
import chat.revolt.components.generic.SheetClickable
import chat.revolt.internals.extensions.zero
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@Composable
fun FriendsOptionsSheet(onDenyAll: () -> Unit) {
SheetClickable(
icon = { modifier ->
Icon(
modifier = modifier,
painter = painterResource(R.drawable.ic_account_cancel_24dp),
contentDescription = null
)
},
label = { style ->
Text(
text = stringResource(R.string.friends_deny_all_incoming),
style = style
)
},
onClick = { onDenyAll() }
)
}
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable
fun FriendsScreen(useDrawer: Boolean, onDrawerClicked: () -> Unit) {
var optionsSheetShown by remember { mutableStateOf(false) }
var overflowMenuShown by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()
if (optionsSheetShown) {
val sheetState = rememberModalBottomSheetState()
ModalBottomSheet(
onDismissRequest = {
optionsSheetShown = false
},
sheetState = sheetState
) {
FriendsOptionsSheet(
onDenyAll = {
scope.launch {
sheetState.hide()
}
with(Dispatchers.IO) {
scope.launch {
FriendRequests.getIncoming()
.forEach { it.id?.let { id -> unfriendUser(id) } }
}
}
}
)
}
}
Scaffold(
topBar = {
TopAppBar(
@ -115,13 +68,36 @@ fun FriendsScreen(useDrawer: Boolean, onDrawerClicked: () -> Unit) {
},
actions = {
IconButton(onClick = {
optionsSheetShown = true
overflowMenuShown = true
}) {
Icon(
imageVector = Icons.Default.MoreVert,
contentDescription = stringResource(R.string.menu)
)
}
DropdownMenu(
expanded = overflowMenuShown,
onDismissRequest = {
overflowMenuShown = false
}
) {
DropdownMenuItem(
text = {
Text(stringResource(R.string.friends_deny_all_incoming))
},
onClick = {
scope.launch {
overflowMenuShown = false
}
with(Dispatchers.IO) {
scope.launch {
FriendRequests.getIncoming()
.forEach { it.id?.let { id -> unfriendUser(id) } }
}
}
}
)
}
},
windowInsets = WindowInsets.zero
)