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 @@ ...@@ -25,12 +25,12 @@
package de.chaosdorf.meteroid.ui.navigation package de.chaosdorf.meteroid.ui.navigation
import androidx.compose.foundation.background 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.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape 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.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
...@@ -38,9 +38,12 @@ import androidx.compose.runtime.Composable ...@@ -38,9 +38,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow 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.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import de.chaosdorf.meteroid.model.Server import de.chaosdorf.meteroid.model.Server
import de.chaosdorf.meteroid.model.User import de.chaosdorf.meteroid.model.User
...@@ -58,9 +61,16 @@ fun MeteroidTopBar( ...@@ -58,9 +61,16 @@ fun MeteroidTopBar(
) )
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = { onNavigate(Routes.Users.Root) }) { AsyncImage(
Icon(Icons.AutoMirrored.Default.ArrowBack, contentDescription = "Back") 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 = { actions = {
account?.second?.let { user -> account?.second?.let { user ->
...@@ -84,6 +94,8 @@ fun MeteroidTopBar( ...@@ -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 @@ ...@@ -24,17 +24,18 @@
package de.chaosdorf.meteroid.ui.users 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.clickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
...@@ -42,8 +43,12 @@ import androidx.compose.runtime.Composable ...@@ -42,8 +43,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow 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 androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import de.chaosdorf.mete.UserId import de.chaosdorf.mete.UserId
import de.chaosdorf.meteroid.sync.SyncHandler import de.chaosdorf.meteroid.sync.SyncHandler
...@@ -68,11 +73,20 @@ fun UserListScreen( ...@@ -68,11 +73,20 @@ fun UserListScreen(
) )
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = { onBack() }) { AsyncImage(
Icon(Icons.AutoMirrored.Default.ArrowBack, contentDescription = "Back") 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 -> ) { paddingValues ->
......
...@@ -34,6 +34,8 @@ import de.chaosdorf.mete.UserId ...@@ -34,6 +34,8 @@ import de.chaosdorf.mete.UserId
import de.chaosdorf.mete.v1.UserModelV1 import de.chaosdorf.mete.v1.UserModelV1
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.datetime.Instant import kotlinx.datetime.Instant
import java.security.MessageDigest
import java.util.Locale
@Entity( @Entity(
primaryKeys = ["serverId", "userId"], primaryKeys = ["serverId", "userId"],
...@@ -67,6 +69,15 @@ data class User( ...@@ -67,6 +69,15 @@ data class User(
value.updatedAt 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 @Dao
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment