diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..da18ceb
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index e84242b..ded4726 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -61,6 +61,7 @@ dependencies {
implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.5")
implementation("androidx.compose.material3:material3:1.1.2")
+ implementation("androidx.compose.material:material-icons-extended") // TODO: Remove stuff with ProGuard?
implementation("org.matrix.android:matrix-android-sdk2:1.5.30")
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
diff --git a/app/src/main/java/eu/steffo/twom/room/MemberListItem.kt b/app/src/main/java/eu/steffo/twom/room/MemberListItem.kt
new file mode 100644
index 0000000..a039f68
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/MemberListItem.kt
@@ -0,0 +1,121 @@
+package eu.steffo.twom.room
+
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.material3.ListItem
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import eu.steffo.twom.R
+import eu.steffo.twom.matrix.LocalSession
+import eu.steffo.twom.matrix.avatar.AvatarFromURL
+import eu.steffo.twom.theme.colorRoleLater
+import eu.steffo.twom.theme.colorRoleMaybe
+import eu.steffo.twom.theme.colorRoleNoway
+import eu.steffo.twom.theme.colorRoleSure
+import eu.steffo.twom.theme.iconRoleLater
+import eu.steffo.twom.theme.iconRoleMaybe
+import eu.steffo.twom.theme.iconRoleNoway
+import eu.steffo.twom.theme.iconRoleSure
+import org.matrix.android.sdk.api.session.getUser
+
+// TODO: Check this with brain on
+
+@Composable
+fun MemberListItem(
+ modifier: Modifier = Modifier,
+ memberId: String,
+ onClickMember: (memberId: String) -> Unit = {},
+ rsvpAnswer: RSVPAnswer? = null,
+ rsvpComment: String = "",
+) {
+ val session = LocalSession.current
+
+ val user = session?.getUser(memberId)
+
+ // TODO: These are going to get cached many times...
+ val crSure = colorRoleSure()
+ val crLater = colorRoleLater()
+ val crMaybe = colorRoleMaybe()
+ val crNoway = colorRoleNoway()
+
+ ListItem(
+ modifier = Modifier.clickable {
+ onClickMember(memberId)
+ },
+ headlineContent = {
+ Text(user?.displayName ?: stringResource(R.string.user_unresolved_name))
+ },
+ leadingContent = {
+ Box(
+ Modifier
+ .padding(end = 10.dp)
+ .size(40.dp)
+ .clip(MaterialTheme.shapes.extraLarge)
+ ) {
+ AvatarFromURL(
+ url = user?.avatarUrl,
+ )
+ }
+ },
+ trailingContent = {
+ when (rsvpAnswer) {
+ RSVPAnswer.SURE -> {
+ Icon(
+ imageVector = iconRoleSure,
+ contentDescription = stringResource(R.string.room_rsvp_sure_label),
+ tint = crSure.value,
+ )
+ }
+
+ RSVPAnswer.LATER -> {
+ Icon(
+ imageVector = iconRoleLater,
+ contentDescription = stringResource(R.string.room_rsvp_later_label),
+ tint = crLater.value,
+ )
+ }
+
+ RSVPAnswer.MAYBE -> {
+ Icon(
+ imageVector = iconRoleMaybe,
+ contentDescription = stringResource(R.string.room_rsvp_maybe_label),
+ tint = crMaybe.value,
+ )
+ }
+
+ RSVPAnswer.NOWAY -> {
+ Icon(
+ imageVector = iconRoleNoway,
+ contentDescription = stringResource(R.string.room_rsvp_later_label),
+ tint = crNoway.value,
+ )
+ }
+
+ null -> {}
+ }
+ },
+ supportingContent = {
+ if (rsvpComment != "") {
+ Text(
+ text = rsvpComment,
+ color = when (rsvpAnswer) {
+ RSVPAnswer.SURE -> crSure.value
+ RSVPAnswer.LATER -> crLater.value
+ RSVPAnswer.MAYBE -> crMaybe.value
+ RSVPAnswer.NOWAY -> crNoway.value
+ null -> Color.Unspecified
+ }
+ )
+ }
+ },
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/steffo/twom/room/RSVPAnswer.kt b/app/src/main/java/eu/steffo/twom/room/RSVPAnswer.kt
new file mode 100644
index 0000000..7cb3f2d
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RSVPAnswer.kt
@@ -0,0 +1,8 @@
+package eu.steffo.twom.room
+
+enum class RSVPAnswer {
+ SURE,
+ LATER,
+ MAYBE,
+ NOWAY,
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityChip.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityChip.kt
new file mode 100644
index 0000000..e912301
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityChip.kt
@@ -0,0 +1,49 @@
+package eu.steffo.twom.room
+
+import androidx.compose.material3.ElevatedFilterChip
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.FilterChipDefaults
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import eu.steffo.twom.theme.StaticColorRole
+import eu.steffo.twom.theme.TwoMPadding
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun RoomActivityChip(
+ modifier: Modifier = Modifier,
+ selected: Boolean = false,
+ onClick: () -> Unit = {},
+ text: String,
+ imageVector: ImageVector,
+ colorRole: StaticColorRole,
+) {
+ ElevatedFilterChip(
+ modifier = TwoMPadding.chips,
+ selected = selected,
+ onClick = onClick,
+ leadingIcon = {
+ Icon(
+ imageVector = imageVector,
+ contentDescription = null,
+ )
+ },
+ label = {
+ Text(
+ text = text,
+ style = MaterialTheme.typography.labelLarge,
+ )
+ },
+ colors = FilterChipDefaults.elevatedFilterChipColors(
+ iconColor = colorRole.value,
+ labelColor = colorRole.value,
+ selectedContainerColor = colorRole.valueContainer,
+ selectedLeadingIconColor = colorRole.onValueContainer,
+ selectedLabelColor = colorRole.onValueContainer,
+ ),
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityChipLater.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipLater.kt
new file mode 100644
index 0000000..599a760
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipLater.kt
@@ -0,0 +1,25 @@
+package eu.steffo.twom.room
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import eu.steffo.twom.R
+import eu.steffo.twom.theme.colorRoleLater
+import eu.steffo.twom.theme.iconRoleLater
+
+@Composable
+@Preview
+fun RoomActivityChipLater(
+ modifier: Modifier = Modifier,
+ selected: Boolean = false,
+ onClick: () -> Unit = {},
+) {
+ RoomActivityChip(
+ selected = selected,
+ onClick = onClick,
+ imageVector = iconRoleLater,
+ text = stringResource(R.string.room_rsvp_later_label),
+ colorRole = colorRoleLater(),
+ )
+}
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityChipMaybe.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipMaybe.kt
new file mode 100644
index 0000000..50c648f
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipMaybe.kt
@@ -0,0 +1,26 @@
+package eu.steffo.twom.room
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import eu.steffo.twom.R
+import eu.steffo.twom.theme.colorRoleMaybe
+import eu.steffo.twom.theme.iconRoleMaybe
+
+@Composable
+@Preview
+fun RoomActivityChipMaybe(
+ modifier: Modifier = Modifier,
+ selected: Boolean = false,
+ onClick: () -> Unit = {},
+) {
+ // TODO: Pick a better color
+ RoomActivityChip(
+ selected = selected,
+ onClick = onClick,
+ imageVector = iconRoleMaybe,
+ text = stringResource(R.string.room_rsvp_maybe_label),
+ colorRole = colorRoleMaybe(),
+ )
+}
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityChipNoway.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipNoway.kt
new file mode 100644
index 0000000..31339a0
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipNoway.kt
@@ -0,0 +1,25 @@
+package eu.steffo.twom.room
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import eu.steffo.twom.R
+import eu.steffo.twom.theme.colorRoleNoway
+import eu.steffo.twom.theme.iconRoleNoway
+
+@Composable
+@Preview
+fun RoomActivityChipNoway(
+ modifier: Modifier = Modifier,
+ selected: Boolean = false,
+ onClick: () -> Unit = {},
+) {
+ RoomActivityChip(
+ selected = selected,
+ onClick = onClick,
+ imageVector = iconRoleNoway,
+ text = stringResource(R.string.room_rsvp_noway_label),
+ colorRole = colorRoleNoway(),
+ )
+}
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityChipSelector.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipSelector.kt
new file mode 100644
index 0000000..7bc1b2c
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipSelector.kt
@@ -0,0 +1,79 @@
+package eu.steffo.twom.room
+
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import eu.steffo.twom.theme.TwoMPadding
+
+@Composable
+@Preview
+fun RoomActivityChipSelector(
+ modifier: Modifier = Modifier,
+ value: RSVPAnswer? = null,
+ onChange: (answer: RSVPAnswer?) -> Unit = {},
+) {
+ Box(
+ modifier = modifier
+ .horizontalScroll(rememberScrollState())
+ ) {
+ Row(
+ modifier = Modifier
+ .padding(start = 8.dp, end = 8.dp)
+ ) {
+ RoomActivityChipSure(
+ modifier = TwoMPadding.chips,
+ selected = (value == RSVPAnswer.SURE),
+ onClick = {
+ onChange(
+ when (value) {
+ RSVPAnswer.SURE -> null
+ else -> RSVPAnswer.SURE
+ }
+ )
+ }
+ )
+ RoomActivityChipLater(
+ modifier = TwoMPadding.chips,
+ selected = (value == RSVPAnswer.LATER),
+ onClick = {
+ onChange(
+ when (value) {
+ RSVPAnswer.LATER -> null
+ else -> RSVPAnswer.LATER
+ }
+ )
+ }
+ )
+ RoomActivityChipMaybe(
+ modifier = TwoMPadding.chips,
+ selected = (value == RSVPAnswer.MAYBE),
+ onClick = {
+ onChange(
+ when (value) {
+ RSVPAnswer.MAYBE -> null
+ else -> RSVPAnswer.MAYBE
+ }
+ )
+ }
+ )
+ RoomActivityChipNoway(
+ modifier = TwoMPadding.chips,
+ selected = (value == RSVPAnswer.NOWAY),
+ onClick = {
+ onChange(
+ when (value) {
+ RSVPAnswer.NOWAY -> null
+ else -> RSVPAnswer.NOWAY
+ }
+ )
+ }
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityChipSure.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipSure.kt
new file mode 100644
index 0000000..a1cc316
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityChipSure.kt
@@ -0,0 +1,26 @@
+package eu.steffo.twom.room
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import eu.steffo.twom.R
+import eu.steffo.twom.theme.colorRoleSure
+import eu.steffo.twom.theme.iconRoleSure
+
+
+@Composable
+@Preview
+fun RoomActivityChipSure(
+ modifier: Modifier = Modifier,
+ selected: Boolean = false,
+ onClick: () -> Unit = {},
+) {
+ RoomActivityChip(
+ selected = selected,
+ onClick = onClick,
+ imageVector = iconRoleSure,
+ text = stringResource(R.string.room_rsvp_sure_label),
+ colorRole = colorRoleSure(),
+ )
+}
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityContent.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityContent.kt
index ffac140..25638ec 100644
--- a/app/src/main/java/eu/steffo/twom/room/RoomActivityContent.kt
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityContent.kt
@@ -2,11 +2,25 @@ package eu.steffo.twom.room
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import eu.steffo.twom.R
+import eu.steffo.twom.matrix.LocalSession
import eu.steffo.twom.theme.TwoMPadding
+
@Composable
fun RoomActivityContent(
modifier: Modifier = Modifier,
@@ -15,11 +29,74 @@ fun RoomActivityContent(
val roomSummary = LocalRoom.current?.getOrNull()
val isError = (!isLoading && roomSummary == null)
+ var rsvpAnswer by rememberSaveable { mutableStateOf(null) }
+ var rsvpComment by rememberSaveable { mutableStateOf("") }
+
Column(modifier) {
- Row(TwoMPadding.base) {
- if (roomSummary != null) {
+ if (roomSummary != null) {
+ Row(TwoMPadding.base) {
+ Text(
+ text = stringResource(R.string.room_topic_title),
+ style = MaterialTheme.typography.titleMedium
+ )
+ }
+ Row(TwoMPadding.base) {
Text(roomSummary.topic)
}
+
+ Row(TwoMPadding.base) {
+ Text(
+ text = stringResource(R.string.room_rsvp_title),
+ style = MaterialTheme.typography.titleMedium
+ )
+ }
+
+ RoomActivityChipSelector(
+ value = rsvpAnswer,
+ onChange = { rsvpAnswer = it }
+ )
+
+ if (rsvpAnswer != null) {
+ Row(Modifier.padding(start = 10.dp, end = 10.dp, bottom = 10.dp)) {
+ TextField(
+ modifier = Modifier.fillMaxWidth(),
+ singleLine = true,
+ value = rsvpComment,
+ onValueChange = { rsvpComment = it },
+ placeholder = {
+ Text(LocalContext.current.getString(R.string.room_rsvp_comment_placeholder))
+ },
+ )
+ }
+ }
+
+ Row(TwoMPadding.base) {
+ Text(
+ text = stringResource(R.string.room_invitees_title),
+ style = MaterialTheme.typography.titleMedium
+ )
+ }
+
+ // TODO: Risky assertion?
+ Column(TwoMPadding.base) {
+ MemberListItem(
+ memberId = LocalSession.current!!.myUserId,
+ rsvpAnswer = rsvpAnswer,
+ rsvpComment = if (rsvpAnswer != null) {
+ rsvpComment
+ } else {
+ ""
+ },
+ )
+
+ roomSummary.otherMemberIds.forEach {
+ MemberListItem(
+ memberId = it,
+ rsvpAnswer = null,
+ rsvpComment = "",
+ )
+ }
+ }
}
}
}
diff --git a/app/src/main/java/eu/steffo/twom/room/RoomActivityTopBar.kt b/app/src/main/java/eu/steffo/twom/room/RoomActivityTopBar.kt
index d6be7d6..8e4acc5 100644
--- a/app/src/main/java/eu/steffo/twom/room/RoomActivityTopBar.kt
+++ b/app/src/main/java/eu/steffo/twom/room/RoomActivityTopBar.kt
@@ -7,6 +7,7 @@ import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
@@ -38,7 +39,10 @@ fun RoomActivityTopBar(
},
title = {
if (roomSummary != null) {
- Text(roomSummary.displayName)
+ Text(
+ text = roomSummary.displayName,
+ style = MaterialTheme.typography.titleLarge,
+ )
}
},
actions = {
diff --git a/app/src/main/java/eu/steffo/twom/theme/StaticColorRole.kt b/app/src/main/java/eu/steffo/twom/theme/StaticColorRole.kt
new file mode 100644
index 0000000..852b915
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/StaticColorRole.kt
@@ -0,0 +1,10 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.ui.graphics.Color
+
+data class StaticColorRole(
+ val value: Color,
+ val onValue: Color,
+ val valueContainer: Color,
+ val onValueContainer: Color,
+)
diff --git a/app/src/main/java/eu/steffo/twom/theme/TwoMPadding.kt b/app/src/main/java/eu/steffo/twom/theme/TwoMPadding.kt
index 03f4694..0fb55cb 100644
--- a/app/src/main/java/eu/steffo/twom/theme/TwoMPadding.kt
+++ b/app/src/main/java/eu/steffo/twom/theme/TwoMPadding.kt
@@ -7,4 +7,5 @@ import androidx.compose.ui.unit.dp
object TwoMPadding {
val base = Modifier.padding(all = 10.dp)
+ val chips = Modifier.padding(start = 2.5.dp, end = 2.5.dp)
}
diff --git a/app/src/main/java/eu/steffo/twom/theme/colorRoleLater.kt b/app/src/main/java/eu/steffo/twom/theme/colorRoleLater.kt
new file mode 100644
index 0000000..07f88a2
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/colorRoleLater.kt
@@ -0,0 +1,29 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import com.google.android.material.color.MaterialColors
+
+
+@Composable
+fun colorRoleLater(): StaticColorRole {
+ val ctx = LocalContext.current
+
+ return when (isSystemInDarkTheme()) {
+ false -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x00658B)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFFFFF)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xC4E7FF)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x001E2C)),
+ )
+
+ true -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x7DD0FF)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x00344A)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x004C69)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xC4E7FF)),
+ )
+ }
+}
diff --git a/app/src/main/java/eu/steffo/twom/theme/colorRoleMaybe.kt b/app/src/main/java/eu/steffo/twom/theme/colorRoleMaybe.kt
new file mode 100644
index 0000000..47d8f45
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/colorRoleMaybe.kt
@@ -0,0 +1,29 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import com.google.android.material.color.MaterialColors
+
+
+@Composable
+fun colorRoleMaybe(): StaticColorRole {
+ val ctx = LocalContext.current
+
+ return when (isSystemInDarkTheme()) {
+ false -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x765B00)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFFFFF)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFDF94)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x241A00)),
+ )
+
+ true -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xEDC148)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x3E2E00)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x594400)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFDF94)),
+ )
+ }
+}
diff --git a/app/src/main/java/eu/steffo/twom/theme/colorRoleNoway.kt b/app/src/main/java/eu/steffo/twom/theme/colorRoleNoway.kt
new file mode 100644
index 0000000..cd72ef4
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/colorRoleNoway.kt
@@ -0,0 +1,29 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import com.google.android.material.color.MaterialColors
+
+
+@Composable
+fun colorRoleNoway(): StaticColorRole {
+ val ctx = LocalContext.current
+
+ return when (isSystemInDarkTheme()) {
+ false -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xAB3520)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFFFFF)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFDAD3)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x3F0400)),
+ )
+
+ true -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFB4A5)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x650A00)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x891D0A)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFDAD3)),
+ )
+ }
+}
diff --git a/app/src/main/java/eu/steffo/twom/theme/colorRoleSure.kt b/app/src/main/java/eu/steffo/twom/theme/colorRoleSure.kt
new file mode 100644
index 0000000..2e51ccb
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/colorRoleSure.kt
@@ -0,0 +1,28 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import com.google.android.material.color.MaterialColors
+
+@Composable
+fun colorRoleSure(): StaticColorRole {
+ val ctx = LocalContext.current
+
+ return when (isSystemInDarkTheme()) {
+ false -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x006E2C)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0xFFFFFF)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x7FFC95)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x002108)),
+ )
+
+ true -> StaticColorRole(
+ value = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x62DF7C)),
+ onValue = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x003913)),
+ valueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x00531F)),
+ onValueContainer = Color(MaterialColors.harmonizeWithPrimary(ctx, 0x7FFC95)),
+ )
+ }
+}
diff --git a/app/src/main/java/eu/steffo/twom/theme/iconRoleLater.kt b/app/src/main/java/eu/steffo/twom/theme/iconRoleLater.kt
new file mode 100644
index 0000000..69f887d
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/iconRoleLater.kt
@@ -0,0 +1,6 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Schedule
+
+val iconRoleLater = Icons.Outlined.Schedule
diff --git a/app/src/main/java/eu/steffo/twom/theme/iconRoleMaybe.kt b/app/src/main/java/eu/steffo/twom/theme/iconRoleMaybe.kt
new file mode 100644
index 0000000..105ddb8
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/iconRoleMaybe.kt
@@ -0,0 +1,6 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.PauseCircle
+
+val iconRoleMaybe = Icons.Outlined.PauseCircle
diff --git a/app/src/main/java/eu/steffo/twom/theme/iconRoleNoway.kt b/app/src/main/java/eu/steffo/twom/theme/iconRoleNoway.kt
new file mode 100644
index 0000000..6ebdb33
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/iconRoleNoway.kt
@@ -0,0 +1,6 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.RemoveCircleOutline
+
+val iconRoleNoway = Icons.Outlined.RemoveCircleOutline
diff --git a/app/src/main/java/eu/steffo/twom/theme/iconRoleSure.kt b/app/src/main/java/eu/steffo/twom/theme/iconRoleSure.kt
new file mode 100644
index 0000000..1098723
--- /dev/null
+++ b/app/src/main/java/eu/steffo/twom/theme/iconRoleSure.kt
@@ -0,0 +1,6 @@
+package eu.steffo.twom.theme
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.CheckCircle
+
+val iconRoleSure = Icons.Outlined.CheckCircle
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9fe6a52..af007d5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -36,4 +36,17 @@
Error
The entered username is not a valid Matrix ID.
Failed to detect well-known data for the specified Matrix homeserver. The server might not exist, be offline, or not be supporting well-known lookups.
+ Invitees
+ Your reply
+ Sure!
+ I\'ll be late...
+ Maybe?
+ Nope.
+ About this party
+ [unknown user]
+ Will be there
+ Will arrive late
+ Will maybe partecipate
+ Won\'t be there
+ Leave a comment...
\ No newline at end of file