fix(lint): observe locale via LocalConfiguration in composables

Replace Locale.getDefault() with LocalConfiguration.current.locales[0]
inside the participant role rendering composables to satisfy the
NonObservableLocale lint check, ensuring the UI recomposes when the
system locale changes.

https://claude.ai/code/session_01AikVWBbPuWhqCDDFCwbeA2
This commit is contained in:
Claude
2026-04-25 16:46:26 +00:00
parent 58784d0124
commit b0508e1ec7
3 changed files with 12 additions and 6 deletions
@@ -40,6 +40,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -82,7 +83,6 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.util.Locale
@Composable @Composable
@Preview @Preview
@@ -272,6 +272,8 @@ fun RenderLiveActivityEventInner(
} }
} }
val locale = LocalConfiguration.current.locales.get(0)
participantUsers.forEach { participantUsers.forEach {
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
@@ -288,7 +290,7 @@ fun RenderLiveActivityEventInner(
Text( Text(
text = text =
it.replaceFirstChar { it.replaceFirstChar {
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() if (it.isLowerCase()) it.titlecase(locale) else it.toString()
}, },
color = MaterialTheme.colorScheme.placeholderText, color = MaterialTheme.colorScheme.placeholderText,
maxLines = 1, maxLines = 1,
@@ -39,6 +39,7 @@ import androidx.compose.ui.Alignment
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.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -67,7 +68,6 @@ import com.vitorpamplona.quartz.nip53LiveActivities.streaming.tags.ParticipantTa
import com.vitorpamplona.quartz.nip53LiveActivities.streaming.tags.StatusTag import com.vitorpamplona.quartz.nip53LiveActivities.streaming.tags.StatusTag
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import java.util.Locale
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.tags.StatusTag as MeetingSpaceStatusTag import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.tags.StatusTag as MeetingSpaceStatusTag
@Composable @Composable
@@ -250,6 +250,8 @@ private fun RenderParticipants(
} }
} }
val locale = LocalConfiguration.current.locales.get(0)
participantUsers.forEach { participantUsers.forEach {
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
@@ -266,7 +268,7 @@ private fun RenderParticipants(
Text( Text(
text = text =
it.replaceFirstChar { it.replaceFirstChar {
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() if (it.isLowerCase()) it.titlecase(locale) else it.toString()
}, },
color = MaterialTheme.colorScheme.placeholderText, color = MaterialTheme.colorScheme.placeholderText,
maxLines = 1, maxLines = 1,
@@ -37,6 +37,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
@@ -69,7 +70,6 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.Locale
@Composable @Composable
fun LongLiveActivityChannelHeader( fun LongLiveActivityChannelHeader(
@@ -145,6 +145,8 @@ fun LongLiveActivityChannelHeader(
} }
} }
val locale = LocalConfiguration.current.locales.get(0)
participantUsers.forEach { participantUsers.forEach {
Row( Row(
lineModifier.clickable { nav.nav(routeFor(it.second)) }, lineModifier.clickable { nav.nav(routeFor(it.second)) },
@@ -154,7 +156,7 @@ fun LongLiveActivityChannelHeader(
Text( Text(
text = text =
it1.replaceFirstChar { it1.replaceFirstChar {
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() if (it.isLowerCase()) it.titlecase(locale) else it.toString()
}, },
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis,