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

More avatar refactorings

This commit is contained in:
Steffo 2024-01-30 04:53:58 +01:00
parent 58b0901408
commit 5a2d3faa75
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
14 changed files with 65 additions and 47 deletions

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar
package eu.steffo.twom.composables.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
package eu.steffo.twom.composables.avatar.components
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable

View file

@ -1,9 +1,10 @@
package eu.steffo.twom.composables.avatar
package eu.steffo.twom.composables.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
@Composable
@Preview(name = "Regular", widthDp = 40, heightDp = 40)

View file

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

View file

@ -1,8 +1,9 @@
package eu.steffo.twom.composables.avatar
package eu.steffo.twom.composables.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
@Composable
@Preview(name = "Regular", widthDp = 40, heightDp = 40)

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar
package eu.steffo.twom.composables.avatar.effects
import android.util.Log
import androidx.compose.runtime.Composable

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar
package eu.steffo.twom.composables.avatar.effects
import android.graphics.Bitmap
import android.util.Log
@ -48,9 +48,9 @@ fun bitmapFromMatrixFile(url: String? = null): Bitmap? {
}
Log.i(TAG, "Downloading file at: $url")
lateinit var avatarFile: File
lateinit var file: File
try {
avatarFile = session.fileService().downloadFile(
file = session.fileService().downloadFile(
fileName = url.md5(),
url = url,
mimeType = null,
@ -67,9 +67,9 @@ fun bitmapFromMatrixFile(url: String? = null): Bitmap? {
return@Fetch
}
Log.d(TAG, "File for $url is: $avatarFile")
Log.d(TAG, "File for $url is: $file")
bitmap = BitmapUtilities.getCorrectedBitmap(resolver, avatarFile.toUri())
bitmap = BitmapUtilities.getCorrectedBitmap(resolver, file.toUri())
}
return bitmap

View file

@ -1,4 +1,4 @@
package eu.steffo.twom.composables.avatar
package eu.steffo.twom.composables.avatar.picker
import android.graphics.Bitmap
import androidx.activity.compose.rememberLauncherForActivityResult
@ -9,7 +9,6 @@ import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import eu.steffo.twom.utils.BitmapUtilities
@ -19,12 +18,10 @@ import eu.steffo.twom.utils.BitmapUtilities
@Preview(name = "Regular", widthDp = 40, heightDp = 40)
@Preview(name = "Double font scale", widthDp = 40, heightDp = 40, fontScale = 2f)
@Preview(name = "Quadruple font scale", widthDp = 40, heightDp = 40, fontScale = 4f)
fun AvatarPicker(
fun AvatarPickerWrapbox(
modifier: Modifier = Modifier,
fallbackText: String = "?",
value: Bitmap? = null,
onPick: (bitmap: Bitmap?) -> Unit = {},
alpha: Float = 1.0f,
contents: @Composable () -> Unit = {},
) {
val context = LocalContext.current
val resolver = context.contentResolver
@ -32,9 +29,7 @@ fun AvatarPicker(
val launcher =
rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()) ImageSelect@{
it ?: return@ImageSelect
val correctedBitmap = BitmapUtilities.getCorrectedBitmap(resolver, it)
onPick(correctedBitmap)
}
@ -45,10 +40,6 @@ fun AvatarPicker(
onLongClick = { onPick(null) },
)
) {
AvatarImage(
bitmap = value?.asImageBitmap(),
fallbackText = fallbackText,
alpha = alpha,
)
contents()
}
}

View file

@ -22,6 +22,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
@ -30,7 +31,9 @@ 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.AvatarPicker
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
@ -46,22 +49,39 @@ fun ConfigureRoomForm(
// TODO: How to load the original avatar from the URL?
var avatarBitmap by remember { mutableStateOf<Bitmap?>(null) }
val fallbackText = if (name.isEmpty()) {
null
} else {
name[0].toString()
}
val context = LocalContext.current
val activity = context as Activity
Column(modifier) {
Row(Modifier.basePadding()) {
val avatarContentDescription = stringResource(R.string.create_avatar_label)
AvatarPicker(
AvatarPickerWrapbox(
modifier = Modifier
.size(60.dp)
.clip(MaterialTheme.shapes.medium)
.semantics {
this.contentDescription = avatarContentDescription
},
value = avatarBitmap,
onPick = { avatarBitmap = it },
)
) {
if (avatarBitmap == null) {
AvatarURL(
url = initialConfiguration?.avatarUri?.toString(),
fallbackText = fallbackText,
)
} else {
AvatarImage(
bitmap = avatarBitmap?.asImageBitmap(),
fallbackText = fallbackText,
)
}
}
TextField(
modifier = Modifier
.height(60.dp)

View file

@ -3,29 +3,34 @@ package eu.steffo.twom.composables.configureroom
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 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.utils.TwoMGlobals
@Composable
@Preview
fun ConfigureRoomScaffold(
initialConfiguration: ConfigureRoomActivity.Configuration? = null,
) {
val session = TwoMGlobals.matrix.authenticationService().getLastAuthenticatedSession()!!
TwoMTheme {
Scaffold(
topBar = {
ConfigureActivityTopBar(
initialName = initialConfiguration?.name,
)
},
content = {
ConfigureRoomForm(
modifier = Modifier.padding(it),
initialConfiguration = initialConfiguration,
)
}
)
CompositionLocalProvider(LocalSession provides session) {
Scaffold(
topBar = {
ConfigureActivityTopBar(
initialName = initialConfiguration?.name,
)
},
content = {
ConfigureRoomForm(
modifier = Modifier.padding(it),
initialConfiguration = initialConfiguration,
)
}
)
}
}
}

View file

@ -21,7 +21,7 @@ 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.AvatarUserId
import eu.steffo.twom.composables.avatar.components.AvatarUserId
import eu.steffo.twom.composables.matrix.LocalSession
@Composable

View file

@ -25,7 +25,7 @@ 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.AvatarURL
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

View file

@ -25,7 +25,7 @@ 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.AvatarUser
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.utils.RSVPAnswer

View file

@ -24,7 +24,7 @@ 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.AvatarURL
import eu.steffo.twom.composables.avatar.components.AvatarURL
import eu.steffo.twom.composables.errorhandling.ErrorIconButton
import eu.steffo.twom.composables.matrix.LocalSession
import kotlinx.coroutines.launch