mirror of
https://github.com/Steffo99/twom.git
synced 2024-11-21 15:44:26 +00:00
Add a mechanism for accepting invites
This commit is contained in:
parent
23e70fe7ea
commit
b66cb24a7f
3 changed files with 49 additions and 12 deletions
|
@ -29,7 +29,7 @@ fun MainContentLoggedIn(
|
|||
|
||||
val roomSummaries by session.roomService().getRoomSummariesLive(
|
||||
roomSummaryQueryParams {
|
||||
this.memberships = listOf(Membership.JOIN)
|
||||
this.memberships = listOf(Membership.JOIN, Membership.INVITE)
|
||||
this.includeType = listOf(TwoMGlobals.ROOM_TYPE)
|
||||
}
|
||||
).observeAsState()
|
||||
|
|
|
@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.size
|
|||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.ListItem
|
||||
import androidx.compose.material3.LocalContentColor
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
@ -29,6 +30,7 @@ import eu.steffo.twom.composables.errorhandling.ErrorText
|
|||
import eu.steffo.twom.composables.errorhandling.LocalizableError
|
||||
import eu.steffo.twom.composables.matrix.LocalSession
|
||||
import kotlinx.coroutines.launch
|
||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||
|
||||
|
||||
|
@ -52,9 +54,23 @@ fun RoomListItem(
|
|||
var expanded by rememberSaveable { mutableStateOf(false) }
|
||||
val error by remember { mutableStateOf(LocalizableError()) }
|
||||
|
||||
// TODO: Display a running indicator
|
||||
|
||||
val viewRoomActivityLauncher = rememberLauncherForActivityResult(ViewRoomActivity.Contract()) {}
|
||||
|
||||
fun openRoom() {
|
||||
suspend fun openRoom() {
|
||||
if (roomSummary.membership == Membership.INVITE) {
|
||||
Log.i("Main", "Opening invite `$roomId`...")
|
||||
try {
|
||||
session.roomService().joinRoom(roomId, "Opened the invite")
|
||||
} catch (e: Throwable) {
|
||||
Log.e("Main", "Failed to open invite to room `$roomId`: $error")
|
||||
error.set(R.string.main_error_join_generic, e)
|
||||
return
|
||||
}
|
||||
Log.d("Main", "Successfully opened invite to room `$roomId`!")
|
||||
}
|
||||
|
||||
Log.i("Main", "Opening room `$roomId`...")
|
||||
viewRoomActivityLauncher.launch(roomId)
|
||||
}
|
||||
|
@ -71,15 +87,20 @@ fun RoomListItem(
|
|||
Log.d("Main", "Successfully left room `$roomId`!")
|
||||
}
|
||||
|
||||
val alpha = if (roomSummary.membership == Membership.INVITE) 0.4f else 1.0f
|
||||
|
||||
Box {
|
||||
|
||||
ListItem(
|
||||
modifier = Modifier.combinedClickable(
|
||||
onClick = { openRoom() },
|
||||
onClick = { scope.launch { openRoom() } },
|
||||
onLongClick = { expanded = true }
|
||||
),
|
||||
headlineContent = {
|
||||
Text(roomSummary.displayName)
|
||||
Text(
|
||||
text = roomSummary.displayName,
|
||||
color = LocalContentColor.current.copy(alpha)
|
||||
)
|
||||
},
|
||||
leadingContent = {
|
||||
Box(
|
||||
|
@ -90,17 +111,24 @@ fun RoomListItem(
|
|||
AvatarURL(
|
||||
// FIXME: URL can appearently be set before the image is available on the homeserver
|
||||
url = roomSummary.avatarUrl,
|
||||
alpha = alpha,
|
||||
)
|
||||
}
|
||||
},
|
||||
supportingContent = {
|
||||
val count = roomSummary.joinedMembersCount
|
||||
if (count != null) {
|
||||
if (count != 1) {
|
||||
Text(stringResource(R.string.main_partecipants, count))
|
||||
} else {
|
||||
Text(stringResource(R.string.main_partecipant, count))
|
||||
}
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = if (count != 1) {
|
||||
R.string.main_partecipants
|
||||
} else {
|
||||
R.string.main_partecipant
|
||||
},
|
||||
count,
|
||||
),
|
||||
color = LocalContentColor.current.copy(alpha)
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
|
@ -112,7 +140,15 @@ fun RoomListItem(
|
|||
// TODO: Align me to the right
|
||||
DropdownMenuItem(
|
||||
text = {
|
||||
Text(stringResource(id = R.string.main_room_leave_label))
|
||||
Text(
|
||||
stringResource(
|
||||
id = if (roomSummary.membership == Membership.INVITE) {
|
||||
R.string.main_room_reject_label
|
||||
} else {
|
||||
R.string.main_room_leave_label
|
||||
}
|
||||
)
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
expanded = false
|
||||
|
@ -120,6 +156,5 @@ fun RoomListItem(
|
|||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<resources>
|
||||
<string name="app_name">TwoM</string>
|
||||
<string name="room_name_fallback_members_0">Partying with myself</string>
|
||||
<string name="room_name_fallback_members_0">A brand new party</string>
|
||||
<string name="room_name_fallback_members_1">Partying with %1$s</string>
|
||||
<string name="room_name_fallback_members_2">Partying with %1$s and %2$s</string>
|
||||
<string name="room_name_fallback_members_3">Partying with %1$s, %2$s, and %3$s</string>
|
||||
|
@ -87,4 +87,6 @@
|
|||
<string name="edit_title">Editing %1$s</string>
|
||||
<string name="main_partecipants">%1$d partecipants</string>
|
||||
<string name="main_partecipant">%1$d partecipant</string>
|
||||
<string name="main_room_reject_label">Reject invite</string>
|
||||
<string name="main_error_join_generic">Something went wrong while opening the invite: %1$s</string>
|
||||
</resources>
|
Loading…
Reference in a new issue