1
Fork 0
mirror of https://github.com/Steffo99/twom.git synced 2024-11-21 15:44:26 +00:00

Refactor again and cleanup avatar stuff

This commit is contained in:
Steffo 2024-02-01 18:32:31 +01:00
parent d660c52b91
commit c56c0124e8
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
76 changed files with 376 additions and 337 deletions

View file

@ -31,7 +31,7 @@
</provider>
<activity
android:name=".activities.MainActivity"
android:name=".main.activities.MainActivity"
android:exported="true"
android:theme="@style/Theme.TwoM">
<intent-filter>
@ -41,15 +41,15 @@
</activity>
<activity
android:name=".activities.LoginActivity"
android:name=".login.activities.LoginActivity"
android:theme="@style/Theme.TwoM" />
<activity
android:name=".activities.ViewRoomActivity"
android:name=".viewroom.activities.ViewRoomActivity"
android:theme="@style/Theme.TwoM" />
<activity
android:name=".activities.ConfigureRoomActivity"
android:name=".configureroom.activities.ConfigureRoomActivity"
android:theme="@style/Theme.TwoM" />
<activity

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar.components
package eu.steffo.twom.avatar.components
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar.components
package eu.steffo.twom.avatar.components
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable

View file

@ -1,10 +1,10 @@
package eu.steffo.twom.composables.avatar.components
package eu.steffo.twom.avatar.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.composables.avatar.effects.bitmapFromMatrixFile
import eu.steffo.twom.avatar.effects.bitmapFromMatrixUrl
@Composable
@Preview(name = "Regular", widthDp = 40, heightDp = 40)
@ -19,7 +19,7 @@ fun AvatarURL(
) {
AvatarImage(
modifier = modifier,
bitmap = bitmapFromMatrixFile(url)?.asImageBitmap(),
bitmap = bitmapFromMatrixUrl(url)?.asImageBitmap(),
fallbackText = fallbackText,
contentDescription = contentDescription,
alpha = alpha,

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar.components
package eu.steffo.twom.avatar.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier

View file

@ -1,9 +1,9 @@
package eu.steffo.twom.composables.avatar.components
package eu.steffo.twom.avatar.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.composables.avatar.effects.avatarUrlFromUserId
import eu.steffo.twom.avatar.effects.avatarUrlFromUserId
@Composable
@Preview(name = "Regular", widthDp = 40, heightDp = 40)

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar.effects
package eu.steffo.twom.avatar.effects
import android.util.Log
import androidx.compose.runtime.Composable
@ -7,7 +7,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.matrix.complocals.LocalSession
import kotlinx.coroutines.CancellationException
private const val TAG = "avatarUrlFromUserId"

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar.effects
package eu.steffo.twom.avatar.effects
import android.graphics.Bitmap
import android.util.Log
@ -8,10 +8,8 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.core.net.toUri
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.utils.BitmapUtilities
import eu.steffo.twom.avatar.utils.getSqOrBitmapFromUri
import eu.steffo.twom.matrix.complocals.LocalSession
import kotlinx.coroutines.CancellationException
import org.matrix.android.sdk.api.util.md5
import java.io.File
@ -19,9 +17,8 @@ import java.io.File
private const val TAG = "bitmapFromMatrixFile"
@Composable
fun bitmapFromMatrixFile(url: String? = null): Bitmap? {
fun bitmapFromMatrixUrl(url: String? = null): Bitmap? {
val session = LocalSession.current
val resolver = LocalContext.current.contentResolver
var bitmap by remember { mutableStateOf<Bitmap?>(null) }
@ -68,8 +65,7 @@ fun bitmapFromMatrixFile(url: String? = null): Bitmap? {
}
Log.d(TAG, "File for $url is: $file")
bitmap = BitmapUtilities.getCorrectedBitmap(resolver, file.toUri())
bitmap = getSqOrBitmapFromUri(file)
}
return bitmap

View file

@ -0,0 +1,15 @@
package eu.steffo.twom.avatar.utils
import android.graphics.Bitmap
import java.io.File
fun getSqOrBitmapFromUri(file: File): Bitmap {
file.inputStream().use { is1 ->
file.inputStream().use { is2 ->
return getSqOrBitmapFromStreams(
inputStream1 = is1,
inputStream2 = is2,
)
}
}
}

View file

@ -0,0 +1,19 @@
package eu.steffo.twom.avatar.utils
import android.graphics.Bitmap
import readExifOrientation
import java.io.InputStream
fun getSqOrBitmapFromStreams(inputStream1: InputStream, inputStream2: InputStream): Bitmap {
var orientation: Int
inputStream1.use {
orientation = it.readExifOrientation()
}
lateinit var bitmap: Bitmap
inputStream2.use {
bitmap = it.readRawBitmap()
}
return bitmap.squareAndOrient(orientation)
}

View file

@ -0,0 +1,18 @@
package eu.steffo.twom.avatar.utils
import android.content.ContentResolver
import android.graphics.Bitmap
import android.net.Uri
fun getSqOrBitmapFromUri(contentResolver: ContentResolver, uri: Uri): Bitmap? {
contentResolver.openInputStream(uri).use { is1 ->
is1 ?: return null
contentResolver.openInputStream(uri).use { is2 ->
is2 ?: return null
return getSqOrBitmapFromStreams(
inputStream1 = is1,
inputStream2 = is2,
)
}
}
}

View file

@ -0,0 +1,6 @@
import androidx.exifinterface.media.ExifInterface
import java.io.InputStream
fun InputStream.readExifOrientation(): Int {
return ExifInterface(this).getAttributeInt(ExifInterface.TAG_ORIENTATION, 1)
}

View file

@ -0,0 +1,9 @@
package eu.steffo.twom.avatar.utils
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import java.io.InputStream
fun InputStream.readRawBitmap(): Bitmap {
return BitmapFactory.decodeStream(this)
}

View file

@ -0,0 +1,80 @@
package eu.steffo.twom.avatar.utils
import android.graphics.Bitmap
import android.graphics.Matrix
import androidx.exifinterface.media.ExifInterface
fun Bitmap.squareAndOrient(
orientation: Int = ExifInterface.ORIENTATION_NORMAL
): Bitmap {
// Determine the starting points and the size to crop the image to a 1:1 square
val xStart: Int
val yStart: Int
val size: Int
if (this.width > this.height) {
yStart = 0
xStart = (this.width - this.height) / 2
size = this.height
} else {
xStart = 0
yStart = (this.height - this.width) / 2
size = this.width
}
// Create a transformation matrix to rotate the bitmap based on the orientation
val transformationMatrix = Matrix()
when (orientation) {
ExifInterface.ORIENTATION_FLIP_HORIZONTAL -> {
transformationMatrix.postScale(-1f, 1f)
}
ExifInterface.ORIENTATION_ROTATE_180 -> {
transformationMatrix.postRotate(180f)
}
ExifInterface.ORIENTATION_FLIP_VERTICAL -> {
transformationMatrix.postScale(1f, -1f)
}
ExifInterface.ORIENTATION_TRANSPOSE -> {
// Untested.
transformationMatrix.setValues(FloatArray(16) {
if (it == 0 || it == 6 || it == 9 || it == 15) {
1f
} else {
0f
}
})
}
ExifInterface.ORIENTATION_ROTATE_90 -> {
transformationMatrix.postRotate(90f)
}
ExifInterface.ORIENTATION_TRANSVERSE -> {
// Untested.
transformationMatrix.setValues(FloatArray(16) {
if (it == 3 || it == 5 || it == 10 || it == 12) {
1f
} else {
0f
}
})
}
ExifInterface.ORIENTATION_ROTATE_270 -> {
transformationMatrix.postRotate(270f)
}
}
return Bitmap.createBitmap(
this,
xStart,
yStart,
size,
size,
transformationMatrix,
true
)
}

View file

@ -0,0 +1,13 @@
package eu.steffo.twom.avatar.utils
import android.graphics.Bitmap
import java.io.File
fun Bitmap.toCachedFile(id: String): File {
val file = File.createTempFile("bitmap_$id", ".jpg")
file.outputStream().use {
this.compress(Bitmap.CompressFormat.JPEG, 85, it)
it.flush()
}
return file
}

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar.picker
package eu.steffo.twom.avatarpicker.components
import android.graphics.Bitmap
import androidx.activity.compose.rememberLauncherForActivityResult
@ -11,7 +11,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.utils.BitmapUtilities
import eu.steffo.twom.avatar.utils.getSqOrBitmapFromUri
@OptIn(ExperimentalFoundationApi::class)
@Composable
@ -29,8 +29,8 @@ fun AvatarPickerWrapbox(
val launcher =
rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()) ImageSelect@{
it ?: return@ImageSelect
val correctedBitmap = BitmapUtilities.getCorrectedBitmap(resolver, it)
onPick(correctedBitmap)
val bitmap = getSqOrBitmapFromUri(resolver, it)
onPick(bitmap)
}
Box(

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.activities
package eu.steffo.twom.configureroom.activities
import android.content.Context
import android.content.Intent
@ -7,7 +7,7 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContract
import eu.steffo.twom.composables.configureroom.ConfigureRoomScaffold
import eu.steffo.twom.configureroom.components.ConfigureRoomScaffold
class ConfigureRoomActivity : ComponentActivity() {

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.configureroom
package eu.steffo.twom.configureroom.components
import android.app.Activity
import android.graphics.Bitmap
@ -30,19 +30,18 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import eu.steffo.twom.R
import eu.steffo.twom.activities.ConfigureRoomActivity
import eu.steffo.twom.composables.avatar.components.AvatarImage
import eu.steffo.twom.composables.avatar.components.AvatarURL
import eu.steffo.twom.composables.avatar.picker.AvatarPickerWrapbox
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.utils.BitmapUtilities
import eu.steffo.twom.avatar.components.AvatarImage
import eu.steffo.twom.avatar.components.AvatarURL
import eu.steffo.twom.avatar.utils.toCachedFile
import eu.steffo.twom.avatarpicker.components.AvatarPickerWrapbox
import eu.steffo.twom.configureroom.activities.ConfigureRoomActivity
import eu.steffo.twom.theme.utils.basePadding
@Composable
@Preview(showBackground = true)
fun ConfigureRoomForm(
modifier: Modifier = Modifier,
initialConfiguration: ConfigureRoomActivity.Configuration? = null,
onSubmit: (ConfigureRoomActivity.Configuration) -> Unit = {},
) {
var name by rememberSaveable { mutableStateOf(initialConfiguration?.name ?: "") }
var description by rememberSaveable { mutableStateOf(initialConfiguration?.description ?: "") }
@ -118,7 +117,7 @@ fun ConfigureRoomForm(
description = description,
avatarUri = if (avatarBitmap != null) {
Uri.fromFile(
BitmapUtilities.bitmapToCache("createAvatar", avatarBitmap!!)
avatarBitmap!!.toCachedFile("avatar")
)
} else {
null

View file

@ -1,20 +1,20 @@
package eu.steffo.twom.composables.configureroom
package eu.steffo.twom.configureroom.components
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import eu.steffo.twom.activities.ConfigureRoomActivity
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.theme.TwoMTheme
import eu.steffo.twom.utils.TwoMGlobals
import eu.steffo.twom.configureroom.activities.ConfigureRoomActivity
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.matrix.utils.TwoMMatrix
import eu.steffo.twom.theme.components.TwoMTheme
@Composable
fun ConfigureRoomScaffold(
initialConfiguration: ConfigureRoomActivity.Configuration? = null,
) {
val session = TwoMGlobals.matrix.authenticationService().getLastAuthenticatedSession()!!
val session = TwoMMatrix.matrix.authenticationService().getLastAuthenticatedSession()!!
TwoMTheme {
CompositionLocalProvider(LocalSession provides session) {

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.configureroom
package eu.steffo.twom.configureroom.components
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
@ -8,7 +8,7 @@ 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.composables.navigation.BackIconButton
import eu.steffo.twom.navigation.components.BackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.errorhandling
package eu.steffo.twom.errorhandling.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Warning

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.errorhandling
package eu.steffo.twom.errorhandling.components
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.errorhandling
package eu.steffo.twom.errorhandling.components
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.errorhandling
package eu.steffo.twom.errorhandling.utils
import android.util.Log
import androidx.annotation.StringRes
@ -6,6 +6,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.errorhandling.components.ErrorText
import kotlinx.coroutines.CancellationException
private const val TAG = "LocalizableError"

View file

@ -1,11 +1,11 @@
package eu.steffo.twom.activities
package eu.steffo.twom.login.activities
import android.content.Context
import android.content.Intent
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContract
import eu.steffo.twom.composables.login.components.LoginScaffold
import eu.steffo.twom.login.components.LoginScaffold
class LoginActivity : ComponentActivity() {

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.login.components
package eu.steffo.twom.login.components
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@ -19,12 +19,11 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.Display
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.fields.PasswordField
import eu.steffo.twom.composables.login.effects.LoginStep
import eu.steffo.twom.composables.login.effects.manageLogin
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.utils.Display
import eu.steffo.twom.login.effects.LoginStep
import eu.steffo.twom.login.effects.manageLogin
import eu.steffo.twom.theme.utils.basePadding
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.Session

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.login.components
package eu.steffo.twom.login.components
import android.app.Activity
import android.content.Intent
@ -9,7 +9,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.composables.theme.TwoMTheme
import eu.steffo.twom.theme.components.TwoMTheme
import org.matrix.android.sdk.api.session.Session

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.login.components
package eu.steffo.twom.login.components
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.R
import eu.steffo.twom.composables.navigation.BackIconButton
import eu.steffo.twom.navigation.components.BackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.fields
package eu.steffo.twom.login.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.RemoveRedEye

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.login.effects
package eu.steffo.twom.login.effects
import android.util.Log
import androidx.compose.runtime.Composable
@ -7,9 +7,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.LocalizableError
import eu.steffo.twom.composables.errorhandling.capture
import eu.steffo.twom.utils.TwoMGlobals
import eu.steffo.twom.errorhandling.utils.LocalizableError
import eu.steffo.twom.errorhandling.utils.capture
import eu.steffo.twom.matrix.utils.TwoMMatrix
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
import org.matrix.android.sdk.api.auth.wellknown.WellknownResult
import org.matrix.android.sdk.api.session.Session
@ -43,7 +43,7 @@ fun manageLogin(): LoginManager {
Log.d(TAG, "Resetting authentication service...")
step = LoginStep.RESET
val auth = TwoMGlobals.matrix.authenticationService()
val auth = TwoMMatrix.matrix.authenticationService()
error.capture(R.string.login_error_wellknown_generic) {
auth.reset()
} ?: return null

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.activities
package eu.steffo.twom.main.activities
import android.os.Bundle
import android.util.Log
@ -6,8 +6,8 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.core.net.toFile
import androidx.lifecycle.lifecycleScope
import eu.steffo.twom.composables.main.MainScaffold
import eu.steffo.twom.utils.TwoMGlobals
import eu.steffo.twom.main.components.MainScaffold
import eu.steffo.twom.matrix.utils.TwoMMatrix
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
@ -21,7 +21,7 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
TwoMGlobals.ensureMatrix(applicationContext)
TwoMMatrix.ensureMatrix(applicationContext)
fetchLastSession()
openSession()
@ -36,7 +36,7 @@ class MainActivity : ComponentActivity() {
private fun fetchLastSession() {
Log.d("Main", "Fetching the last successfully authenticated session...")
session = TwoMGlobals.matrix.authenticationService().getLastAuthenticatedSession()
session = TwoMMatrix.matrix.authenticationService().getLastAuthenticatedSession()
}
private fun openSession() {
@ -113,7 +113,7 @@ class MainActivity : ComponentActivity() {
createRoomParams.name = name
createRoomParams.topic = description
createRoomParams.preset = CreateRoomPreset.PRESET_PRIVATE_CHAT
createRoomParams.roomType = TwoMGlobals.ROOM_TYPE
createRoomParams.roomType = TwoMMatrix.ROOM_TYPE
createRoomParams.initialStates = mutableListOf(
CreateRoomStateEvent(
type = "m.room.power_levels",

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.launch
@ -20,9 +20,9 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.R
import eu.steffo.twom.activities.LoginActivity
import eu.steffo.twom.composables.avatar.components.AvatarUserId
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.avatar.components.AvatarUserId
import eu.steffo.twom.login.activities.LoginActivity
import eu.steffo.twom.matrix.complocals.LocalSession
@Composable
@Preview(showBackground = true)

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.launch
@ -12,7 +12,7 @@ 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.activities.ConfigureRoomActivity
import eu.steffo.twom.configureroom.activities.ConfigureRoomActivity
@Composable
@Preview

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
@ -8,10 +8,10 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.utils.TwoMGlobals
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.matrix.utils.TwoMMatrix
import eu.steffo.twom.theme.utils.basePadding
import org.matrix.android.sdk.api.session.room.model.Membership
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
@ -30,7 +30,7 @@ fun MainContentLoggedIn(
val roomSummaries by session.roomService().getRoomSummariesLive(
roomSummaryQueryParams {
this.memberships = listOf(Membership.JOIN, Membership.INVITE)
this.includeType = listOf(TwoMGlobals.ROOM_TYPE)
this.includeType = listOf(TwoMMatrix.ROOM_TYPE)
}
).observeAsState()

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@ -8,13 +8,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.R
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.theme.utils.basePadding
@Composable
@Preview(showBackground = true)
fun MainContentNotLoggedIn(
modifier: Modifier = Modifier,
onClickLogin: () -> Unit = {},
) {
Column(modifier) {
Row(Modifier.basePadding()) {

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
@ -6,9 +6,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.activities.ConfigureRoomActivity
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.theme.TwoMTheme
import eu.steffo.twom.configureroom.activities.ConfigureRoomActivity
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.theme.components.TwoMTheme
import org.matrix.android.sdk.api.session.Session
@Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.main
package eu.steffo.twom.main.components
import android.util.Log
import androidx.activity.compose.rememberLauncherForActivityResult
@ -24,11 +24,11 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import eu.steffo.twom.R
import eu.steffo.twom.activities.ViewRoomActivity
import eu.steffo.twom.composables.avatar.components.AvatarURL
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.errorhandling.LocalizableError
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.avatar.components.AvatarURL
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.utils.LocalizableError
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.viewroom.activities.ViewRoomActivity
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.room.model.Membership
import org.matrix.android.sdk.api.session.room.model.RoomSummary

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.matrix
package eu.steffo.twom.matrix.complocals
import androidx.compose.runtime.staticCompositionLocalOf
import org.matrix.android.sdk.api.session.Session

View file

@ -1,15 +1,14 @@
package eu.steffo.twom.utils
package eu.steffo.twom.matrix.utils
import android.content.Context
import android.util.Log
import org.matrix.android.sdk.api.Matrix
import org.matrix.android.sdk.api.MatrixConfiguration
/**
* Object containing the global state of the application.
*/
object TwoMGlobals {
object TwoMMatrix {
/**
* The global [Matrix] object of the application.
*
@ -44,4 +43,4 @@ object TwoMGlobals {
const val RSVP_STATE_ANSWER_FIELD = "answer"
const val RSVP_STATE_COMMENT_FIELD = "comment"
}
}

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.utils
package eu.steffo.twom.matrix.utils
import android.content.Context
import eu.steffo.twom.R

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.navigation
package eu.steffo.twom.navigation.components
import android.app.Activity
import androidx.compose.material.icons.Icons

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.components
import android.app.Activity
import androidx.compose.foundation.isSystemInDarkTheme

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.ui.graphics.Color

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.ui.graphics.Color

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.ui.graphics.Color

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.ui.graphics.Color

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.ui.graphics.Color

View file

@ -0,0 +1,10 @@
package eu.steffo.twom.theme.utils
import androidx.compose.foundation.layout.padding
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
fun Modifier.basePadding(): Modifier {
return this.padding(all = 10.dp)
}

View file

@ -1,14 +1,9 @@
package eu.steffo.twom.composables.theme
package eu.steffo.twom.theme.utils
import androidx.compose.foundation.layout.padding
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
fun Modifier.basePadding(): Modifier {
return this.padding(all = 10.dp)
}
fun Modifier.chipPadding(): Modifier {
return this.padding(start = 2.5.dp, end = 2.5.dp)
}

View file

@ -1,130 +0,0 @@
package eu.steffo.twom.utils
import android.content.ContentResolver
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
import android.net.Uri
import androidx.exifinterface.media.ExifInterface
import java.io.File
class BitmapUtilities {
companion object {
fun getOrientation(contentResolver: ContentResolver, uri: Uri): Int? {
contentResolver.openInputStream(uri).use {
if (it == null) {
return null
} else {
return ExifInterface(it).getAttributeInt(ExifInterface.TAG_ORIENTATION, 1)
}
}
}
fun getRawBitmap(contentResolver: ContentResolver, uri: Uri): Bitmap? {
contentResolver.openInputStream(uri).use {
if (it == null) {
return null
} else {
return BitmapFactory.decodeStream(it)
}
}
}
fun squareAndOrient(
bitmap: Bitmap,
orientation: Int = ExifInterface.ORIENTATION_NORMAL
): Bitmap {
// Determine the starting points and the size to crop the image to a 1:1 square
val xStart: Int
val yStart: Int
val size: Int
if (bitmap.width > bitmap.height) {
yStart = 0
xStart = (bitmap.width - bitmap.height) / 2
size = bitmap.height
} else {
xStart = 0
yStart = (bitmap.height - bitmap.width) / 2
size = bitmap.width
}
// Create a transformation matrix to rotate the bitmap based on the orientation
val transformationMatrix = Matrix()
when (orientation) {
ExifInterface.ORIENTATION_FLIP_HORIZONTAL -> {
transformationMatrix.postScale(-1f, 1f)
}
ExifInterface.ORIENTATION_ROTATE_180 -> {
transformationMatrix.postRotate(180f)
}
ExifInterface.ORIENTATION_FLIP_VERTICAL -> {
transformationMatrix.postScale(1f, -1f)
}
ExifInterface.ORIENTATION_TRANSPOSE -> {
// Untested.
transformationMatrix.setValues(FloatArray(16) {
if (it == 0 || it == 6 || it == 9 || it == 15) {
1f
} else {
0f
}
})
}
ExifInterface.ORIENTATION_ROTATE_90 -> {
transformationMatrix.postRotate(90f)
}
ExifInterface.ORIENTATION_TRANSVERSE -> {
// Untested.
transformationMatrix.setValues(FloatArray(16) {
if (it == 3 || it == 5 || it == 10 || it == 12) {
1f
} else {
0f
}
})
}
ExifInterface.ORIENTATION_ROTATE_270 -> {
transformationMatrix.postRotate(270f)
}
}
return Bitmap.createBitmap(
bitmap,
xStart,
yStart,
size,
size,
transformationMatrix,
true
)
}
fun getCorrectedBitmap(resolver: ContentResolver, uri: Uri): Bitmap? {
val rawBitmap = getRawBitmap(resolver, uri) ?: return null
val orientation = getOrientation(resolver, uri) ?: return null
return squareAndOrient(rawBitmap, orientation)
}
fun bitmapToCache(id: String, bitmap: Bitmap): File {
val file = File.createTempFile("bitmap_$id", ".jpg")
file.outputStream().use {
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, it)
it.flush()
}
return file
}
fun bitmapFromCache(file: File): Bitmap {
file.inputStream().use {
return BitmapFactory.decodeStream(it)
}
}
}
}

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.activities
package eu.steffo.twom.viewroom.activities
import android.content.Context
import android.content.Intent
@ -7,8 +7,8 @@ import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContract
import eu.steffo.twom.composables.viewroom.ViewRoomScaffold
import eu.steffo.twom.utils.TwoMGlobals
import eu.steffo.twom.matrix.utils.TwoMMatrix
import eu.steffo.twom.viewroom.components.ViewRoomScaffold
import org.matrix.android.sdk.api.session.Session
class ViewRoomActivity : ComponentActivity() {
@ -31,7 +31,7 @@ class ViewRoomActivity : ComponentActivity() {
private fun fetchLastSession() {
Log.d("Main", "Fetching the last successfully authenticated session...")
// FIXME: If this is null, it means that something launched this while no session was authenticated...
session = TwoMGlobals.matrix.authenticationService().getLastAuthenticatedSession()!!
session = TwoMMatrix.matrix.authenticationService().getLastAuthenticatedSession()!!
}
override fun onCreate(savedInstanceState: Bundle?) {

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.complocals
import androidx.compose.runtime.staticCompositionLocalOf
import org.matrix.android.sdk.api.session.room.Room

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.complocals
import androidx.compose.runtime.staticCompositionLocalOf
import org.matrix.android.sdk.api.session.room.model.RoomSummary

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Email
@ -16,7 +16,6 @@ import eu.steffo.twom.R
fun InviteFAB(
modifier: Modifier = Modifier,
onClick: () -> Unit = {},
onUserSelected: (userId: String) -> Unit = {},
) {
// TODO: Hide if unprivileged
ExtendedFloatingActionButton(

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
@ -15,7 +15,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import eu.steffo.twom.R
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.theme.utils.basePadding
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import android.util.Log
import androidx.compose.foundation.layout.fillMaxWidth
@ -15,11 +15,12 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.Display
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.errorhandling.LoadingText
import eu.steffo.twom.composables.errorhandling.LocalizableError
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.components.LoadingText
import eu.steffo.twom.errorhandling.utils.Display
import eu.steffo.twom.errorhandling.utils.LocalizableError
import eu.steffo.twom.theme.utils.basePadding
import eu.steffo.twom.viewroom.complocals.LocalRoom
import kotlinx.coroutines.launch
import kotlin.jvm.optionals.getOrNull

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import android.util.Log
import androidx.compose.foundation.ExperimentalFoundationApi
@ -23,11 +23,13 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import eu.steffo.twom.R
import eu.steffo.twom.composables.avatar.components.AvatarUser
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.viewroom.effects.resolveUser
import eu.steffo.twom.utils.RSVPAnswer
import eu.steffo.twom.avatar.components.AvatarUser
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.viewroom.complocals.LocalRoom
import eu.steffo.twom.viewroom.effects.observeRSVP
import eu.steffo.twom.viewroom.effects.resolveUser
import eu.steffo.twom.viewroom.utils.RSVPAnswer
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
import kotlin.jvm.optionals.getOrNull

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilterChip
@ -10,7 +10,7 @@ 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.utils.RSVPAnswer
import eu.steffo.twom.viewroom.utils.RSVPAnswer
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Box
@ -9,8 +9,8 @@ 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.composables.theme.chipPadding
import eu.steffo.twom.utils.RSVPAnswer
import eu.steffo.twom.theme.utils.chipPadding
import eu.steffo.twom.viewroom.utils.RSVPAnswer
@Composable
@Preview

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
@ -7,7 +7,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.utils.RSVPAnswer
import eu.steffo.twom.viewroom.utils.RSVPAnswer
@Composable
@Preview

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@ -10,10 +10,10 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import eu.steffo.twom.composables.errorhandling.LoadingText
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.utils.RSVP
import eu.steffo.twom.utils.RSVPAnswer
import eu.steffo.twom.errorhandling.components.LoadingText
import eu.steffo.twom.theme.utils.basePadding
import eu.steffo.twom.viewroom.utils.RSVP
import eu.steffo.twom.viewroom.utils.RSVPAnswer
@Composable
fun RSVPForm(

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@ -9,7 +9,7 @@ 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.utils.RSVPAnswer
import eu.steffo.twom.viewroom.utils.RSVPAnswer
@Composable
@Preview

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import android.net.Uri
import android.util.Log
@ -23,10 +23,12 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.net.toFile
import eu.steffo.twom.R
import eu.steffo.twom.activities.ConfigureRoomActivity
import eu.steffo.twom.composables.avatar.components.AvatarURL
import eu.steffo.twom.composables.errorhandling.ErrorIconButton
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.avatar.components.AvatarURL
import eu.steffo.twom.configureroom.activities.ConfigureRoomActivity
import eu.steffo.twom.errorhandling.components.ErrorIconButton
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.viewroom.complocals.LocalRoom
import eu.steffo.twom.viewroom.complocals.LocalRoomSummary
import kotlinx.coroutines.launch
import kotlin.jvm.optionals.getOrNull

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@ -9,8 +9,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.matrix.complocals.LocalSession
@Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import android.util.Log
import androidx.compose.foundation.layout.Row
@ -14,12 +14,14 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.Display
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.errorhandling.LoadingText
import eu.steffo.twom.composables.errorhandling.LocalizableError
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.components.LoadingText
import eu.steffo.twom.errorhandling.utils.Display
import eu.steffo.twom.errorhandling.utils.LocalizableError
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.theme.utils.basePadding
import eu.steffo.twom.viewroom.complocals.LocalRoom
import eu.steffo.twom.viewroom.effects.observeRSVP
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.room.model.Membership
import kotlin.jvm.optionals.getOrNull

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.MaterialTheme
@ -9,9 +9,10 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.errorhandling.LoadingText
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.components.LoadingText
import eu.steffo.twom.theme.utils.basePadding
import eu.steffo.twom.viewroom.complocals.LocalRoom
import org.matrix.android.sdk.api.session.room.members.RoomMemberQueryParams
import kotlin.jvm.optionals.getOrNull

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.padding
@ -13,8 +13,10 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.theme.TwoMTheme
import eu.steffo.twom.matrix.complocals.LocalSession
import eu.steffo.twom.theme.components.TwoMTheme
import eu.steffo.twom.viewroom.complocals.LocalRoom
import eu.steffo.twom.viewroom.complocals.LocalRoomSummary
import org.matrix.android.sdk.api.session.Session
import java.util.Optional

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
@ -7,9 +7,10 @@ import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.errorhandling.LoadingText
import eu.steffo.twom.composables.navigation.BackIconButton
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.components.LoadingText
import eu.steffo.twom.navigation.components.BackIconButton
import eu.steffo.twom.viewroom.complocals.LocalRoomSummary
@OptIn(ExperimentalMaterial3Api::class)

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.components
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.MaterialTheme
@ -8,9 +8,10 @@ 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.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.errorhandling.LoadingText
import eu.steffo.twom.composables.theme.basePadding
import eu.steffo.twom.errorhandling.components.ErrorText
import eu.steffo.twom.errorhandling.components.LoadingText
import eu.steffo.twom.theme.utils.basePadding
import eu.steffo.twom.viewroom.complocals.LocalRoomSummary
@Composable
@Preview

View file

@ -1,11 +1,11 @@
package eu.steffo.twom.composables.viewroom
package eu.steffo.twom.viewroom.effects
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import eu.steffo.twom.utils.RSVP
import eu.steffo.twom.utils.RSVPAnswer
import eu.steffo.twom.utils.TwoMGlobals
import eu.steffo.twom.matrix.utils.TwoMMatrix
import eu.steffo.twom.viewroom.utils.RSVP
import eu.steffo.twom.viewroom.utils.RSVPAnswer
import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.room.model.Membership
@ -26,7 +26,7 @@ fun observeRSVP(room: Room, member: RoomMemberSummary): RSVP? {
}
val request by room.stateService().getStateEventLive(
eventType = TwoMGlobals.RSVP_STATE_TYPE,
eventType = TwoMMatrix.RSVP_STATE_TYPE,
stateKey = QueryStringValue.Equals(member.userId),
).observeAsState()
@ -61,7 +61,7 @@ fun observeRSVP(room: Room, member: RoomMemberSummary): RSVP? {
)
}
val commentField = content[TwoMGlobals.RSVP_STATE_COMMENT_FIELD]
val commentField = content[TwoMMatrix.RSVP_STATE_COMMENT_FIELD]
?: return RSVP(
event = event,
answer = RSVPAnswer.UNKNOWN,
@ -75,7 +75,7 @@ fun observeRSVP(room: Room, member: RoomMemberSummary): RSVP? {
comment = "",
)
val answerField = content[TwoMGlobals.RSVP_STATE_ANSWER_FIELD]
val answerField = content[TwoMMatrix.RSVP_STATE_ANSWER_FIELD]
?: return RSVP(
event = event,
answer = RSVPAnswer.NONE,

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.viewroom.effects
package eu.steffo.twom.viewroom.effects
import android.util.Log
import androidx.compose.runtime.Composable
@ -7,7 +7,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.matrix.complocals.LocalSession
import kotlinx.coroutines.CancellationException
import org.matrix.android.sdk.api.session.user.model.User

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.utils
package eu.steffo.twom.viewroom.utils
import org.matrix.android.sdk.api.session.events.model.Event
@ -6,4 +6,4 @@ data class RSVP(
val event: Event?,
val answer: RSVPAnswer,
val comment: String,
)
)

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.utils
package eu.steffo.twom.viewroom.utils
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.BuildCircle
@ -13,12 +13,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.composables.theme.LaterColorRole
import eu.steffo.twom.composables.theme.MaybeColorRole
import eu.steffo.twom.composables.theme.NowayColorRole
import eu.steffo.twom.composables.theme.NullishColorRole
import eu.steffo.twom.composables.theme.StaticColorRole
import eu.steffo.twom.composables.theme.SureColorRole
import eu.steffo.twom.theme.utils.LaterColorRole
import eu.steffo.twom.theme.utils.MaybeColorRole
import eu.steffo.twom.theme.utils.NowayColorRole
import eu.steffo.twom.theme.utils.NullishColorRole
import eu.steffo.twom.theme.utils.StaticColorRole
import eu.steffo.twom.theme.utils.SureColorRole
enum class RSVPAnswer {
// Will be there!
@ -224,4 +224,4 @@ enum class RSVPAnswer {
@Composable
abstract fun toCommentPlaceholder(): String
}
}