Skip to content
Snippets Groups Projects
Unverified Commit 6b05e670 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

wip: avatars V0

parent 21a9bafd
No related branches found
No related tags found
No related merge requests found
......@@ -25,12 +25,12 @@
package de.chaosdorf.meteroid.ui.navigation
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
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
......@@ -38,9 +38,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import de.chaosdorf.meteroid.model.Server
import de.chaosdorf.meteroid.model.User
......@@ -58,9 +61,16 @@ fun MeteroidTopBar(
)
},
navigationIcon = {
IconButton(onClick = { onNavigate(Routes.Users.Root) }) {
Icon(Icons.AutoMirrored.Default.ArrowBack, contentDescription = "Back")
}
AsyncImage(
account?.second?.gravatarUrl(),
contentDescription = "User List",
contentScale = ContentScale.Crop,
modifier = Modifier
.size(48.dp)
.clip(CircleShape)
.border(1.dp, Color.White, CircleShape)
.background(MaterialTheme.colorScheme.primaryContainer)
)
},
actions = {
account?.second?.let { user ->
......@@ -84,6 +94,8 @@ fun MeteroidTopBar(
)
}
},
modifier = Modifier.shadow(4.dp)
modifier = Modifier
.shadow(4.dp)
.clickable { onNavigate(Routes.Users.Root) }
)
}
......@@ -24,17 +24,18 @@
package de.chaosdorf.meteroid.ui.users
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
......@@ -42,8 +43,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import de.chaosdorf.mete.UserId
import de.chaosdorf.meteroid.sync.SyncHandler
......@@ -68,11 +73,20 @@ fun UserListScreen(
)
},
navigationIcon = {
IconButton(onClick = { onBack() }) {
Icon(Icons.AutoMirrored.Default.ArrowBack, contentDescription = "Back")
}
AsyncImage(
server?.first?.logoUrl,
contentDescription = "User List",
contentScale = ContentScale.Crop,
modifier = Modifier
.size(48.dp)
.clip(CircleShape)
.border(1.dp, Color.White, CircleShape)
.background(MaterialTheme.colorScheme.primaryContainer)
)
},
modifier = Modifier.shadow(4.dp)
modifier = Modifier
.shadow(4.dp)
.clickable { onBack() }
)
}
) { paddingValues ->
......
......@@ -34,6 +34,8 @@ import de.chaosdorf.mete.UserId
import de.chaosdorf.mete.v1.UserModelV1
import kotlinx.coroutines.flow.Flow
import kotlinx.datetime.Instant
import java.security.MessageDigest
import java.util.Locale
@Entity(
primaryKeys = ["serverId", "userId"],
......@@ -67,6 +69,15 @@ data class User(
value.updatedAt
)
}
@OptIn(ExperimentalStdlibApi::class)
fun gravatarUrl(): String {
val normalised: String = email.lowercase(Locale.ROOT)
val binaryData: ByteArray = normalised.toByteArray(Charsets.UTF_8)
val binaryHash: ByteArray = MessageDigest.getInstance("MD5").digest(binaryData)
val hash: String = binaryHash.toHexString()
return "https://www.gravatar.com/avatar/$hash?d=404"
}
}
@Dao
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment