feat: enhance RequestsSection layout and add full-screen avatar viewer in ProfileScreen

This commit is contained in:
2026-02-13 13:39:00 +05:00
parent 899d79c9fd
commit e17b03c1c5
6 changed files with 660 additions and 234 deletions

View File

@@ -77,20 +77,28 @@ fun BoxScope.BlurredAvatarBackground(
val avatars by avatarRepository?.getAvatars(publicKey, allDecode = false)?.collectAsState()
?: remember { mutableStateOf(emptyList()) }
var originalBitmap by remember(avatars) { mutableStateOf<Bitmap?>(null) }
var blurredBitmap by remember(avatars) { mutableStateOf<Bitmap?>(null) }
// Stable key based on content, not list reference — prevents bitmap reset during recomposition
val avatarKey = remember(avatars) {
avatars.firstOrNull()?.timestamp ?: 0L
}
LaunchedEffect(avatars) {
if (avatars.isNotEmpty()) {
originalBitmap = withContext(Dispatchers.IO) {
AvatarFileManager.base64ToBitmap(avatars.first().base64Data)
// Don't reset bitmap to null when key changes — keep showing old blur until new one is ready
var originalBitmap by remember { mutableStateOf<Bitmap?>(null) }
var blurredBitmap by remember { mutableStateOf<Bitmap?>(null) }
LaunchedEffect(avatarKey) {
val currentAvatars = avatars
if (currentAvatars.isNotEmpty()) {
val newOriginal = withContext(Dispatchers.IO) {
AvatarFileManager.base64ToBitmap(currentAvatars.first().base64Data)
}
originalBitmap?.let { bitmap ->
if (newOriginal != null) {
originalBitmap = newOriginal
blurredBitmap = withContext(Dispatchers.Default) {
val scaledBitmap = Bitmap.createScaledBitmap(
bitmap,
bitmap.width / 4,
bitmap.height / 4,
newOriginal,
newOriginal.width / 4,
newOriginal.height / 4,
true
)
var result = scaledBitmap