From ac461c3e6f700cd4100cc0593ca6894b71e34d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Orzech?= Date: Fri, 20 Mar 2026 00:33:16 +0100 Subject: [PATCH] feat: show "Publishing to" chip in Composer for multi-account users When more than one account is configured, display an informational AssistChip at the top of the Composer showing the active blog name and site icon. Uses SiteMetadataCache for the blog title, falls back to account name. Non-clickable, only shown for disambiguation. --- .../microblog/ui/composer/ComposerScreen.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/app/src/main/java/com/swoosh/microblog/ui/composer/ComposerScreen.kt b/app/src/main/java/com/swoosh/microblog/ui/composer/ComposerScreen.kt index 560cd7b..08963fa 100644 --- a/app/src/main/java/com/swoosh/microblog/ui/composer/ComposerScreen.kt +++ b/app/src/main/java/com/swoosh/microblog/ui/composer/ComposerScreen.kt @@ -42,8 +42,12 @@ import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.ui.platform.LocalContext import coil.compose.AsyncImage +import com.swoosh.microblog.data.AccountManager import com.swoosh.microblog.data.HashtagParser +import com.swoosh.microblog.data.SiteMetadataCache import com.swoosh.microblog.data.model.FeedPost import com.swoosh.microblog.data.model.PostStats import com.swoosh.microblog.ui.animation.SwooshMotion @@ -209,6 +213,39 @@ fun ComposerScreen( .fillMaxSize() .padding(padding) ) { + // "Publishing to" chip when multiple accounts exist + val composerContext = LocalContext.current + val composerAccountManager = remember { AccountManager(composerContext) } + val composerAccounts = remember { composerAccountManager.getAccounts() } + val composerActiveAccount = remember { composerAccountManager.getActiveAccount() } + + if (composerAccounts.size > 1 && composerActiveAccount != null) { + val composerSiteCache = remember { SiteMetadataCache(composerContext) } + val composerSiteData = remember { + composerSiteCache.get(composerActiveAccount.id) + } + val siteName = composerSiteData?.title ?: composerActiveAccount.name + val siteIconUrl = composerSiteData?.icon ?: composerSiteData?.logo + + AssistChip( + onClick = { }, + label = { Text("Publishing to: $siteName") }, + leadingIcon = if (siteIconUrl != null) { + { + AsyncImage( + model = siteIconUrl, + contentDescription = null, + modifier = Modifier + .size(18.dp) + .clip(CircleShape), + contentScale = ContentScale.Crop + ) + } + } else null, + modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp) + ) + } + // Hashtag visual transformation for edit mode text field val hashtagColor = MaterialTheme.colorScheme.primary val hashtagTransformation = remember(hashtagColor) {