fix: block title-leaking actions on locked conversations

Locked chats could leak their real title through sidebar search,
"Generate Title", and "Duplicate" — all three now blocked.
This commit is contained in:
Bruno Deanoz 2026-06-23 20:23:51 +02:00
parent 7aefd7ba70
commit d69e2bcf68

View file

@ -218,7 +218,10 @@ fun KaizenSidebar(
// ── Conversation list ──
val filteredConversations = remember(conversations, searchQuery) {
if (searchQuery.isBlank()) conversations
else conversations.filter { it.title.contains(searchQuery, ignoreCase = true) }
else conversations.filter {
if (it.locked) false
else it.title.contains(searchQuery, ignoreCase = true)
}
}
Box(Modifier.weight(1f).fillMaxWidth()) {
@ -512,11 +515,13 @@ private fun HistoryItemRow(
if (!item.locked) {
MenuRow(KaizenIcons.Pencil, stringResource(R.string.sidebar_rename), cs.onBackground) { showMenu = false; onRename() }
}
if (!item.titleGenerated) {
if (!item.titleGenerated && !item.locked) {
MenuRow(KaizenIcons.Sparkles, stringResource(R.string.sidebar_generate_title), cs.onBackground) { showMenu = false; onGenerateTitle() }
}
MenuRow(KaizenIcons.Pin, stringResource(if (item.pinned) R.string.sidebar_unpin else R.string.sidebar_pin), cs.onBackground) { showMenu = false; onTogglePin() }
if (!item.locked) {
MenuRow(KaizenIcons.Copy, stringResource(R.string.sidebar_duplicate), cs.onBackground) { showMenu = false; onDuplicate() }
}
MenuRow(
if (item.locked) KaizenIcons.LockOpen else KaizenIcons.Lock,
stringResource(if (item.locked) R.string.sidebar_unlock else R.string.sidebar_lock),