diff --git a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt index f8820e91..a3bff9e0 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt @@ -40,6 +40,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -83,6 +84,18 @@ private val HeaderTextSize = 17.sp /** Minimum tap target for every interactive element in the header. */ private val HeaderTapTarget = 44.dp +internal enum class HeaderCrowdingMode { + Full, + HideJoinedChannelCount, + IconOnlyLocationChannel, +} + +internal fun headerCrowdingMode(availableWidth: Dp): HeaderCrowdingMode = when { + availableWidth < 360.dp -> HeaderCrowdingMode.IconOnlyLocationChannel + availableWidth < 400.dp -> HeaderCrowdingMode.HideJoinedChannelCount + else -> HeaderCrowdingMode.Full +} + /** Corner radius for the header's tappable label+icon clusters. */ private val HeaderClusterShape = RoundedCornerShape(8.dp) @@ -518,6 +531,7 @@ fun NicknameEditor( } ), modifier = Modifier + .weight(1f) .widthIn(max = 150.dp) .horizontalScroll(scrollState) ) @@ -533,7 +547,8 @@ fun PeerCounter( selectedLocationChannel: com.bitchat.android.geohash.ChannelID?, geohashPeople: List, onClick: () -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + showJoinedChannelCount: Boolean = true ) { val palette = LocalBitchatPalette.current val colorScheme = MaterialTheme.colorScheme @@ -590,7 +605,7 @@ fun PeerCounter( fontWeight = FontWeight.Medium ) - if (joinedChannels.isNotEmpty()) { + if (showJoinedChannelCount && joinedChannels.isNotEmpty()) { AnimatedCount( count = joinedChannels.size, prefix = stringResource(R.string.channel_count_prefix), @@ -690,22 +705,17 @@ private fun MainHeader( val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() val geohashPeople by viewModel.geohashPeople.collectAsStateWithLifecycle() - Row( - modifier = Modifier - .fillMaxWidth() - .height(ChatHeaderHeight) - .padding(start = HeaderInsetStart, end = HeaderInsetEnd), - verticalAlignment = Alignment.CenterVertically - ) { - // MARK: - Identity cluster. - // - // Weighted so it yields space to the status cluster rather than pushing it off screen. - // Compose measures unweighted children first, so the icons on the right always get the - // width they need and a long nickname simply scrolls within what is left. + BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { + val crowdingMode = headerCrowdingMode(maxWidth) + Row( - modifier = Modifier.weight(1f), + modifier = Modifier + .fillMaxWidth() + .height(ChatHeaderHeight) + .padding(start = HeaderInsetStart, end = HeaderInsetEnd), verticalAlignment = Alignment.CenterVertically ) { + // Keep the brand and trailing actions fixed. Only the nickname yields under pressure. BitChatBrandButton( onClick = onTitleClick, onTripleClick = onTripleTitleClick, @@ -713,11 +723,13 @@ private fun MainHeader( modifier = Modifier.size(HeaderTapTarget), ) - // Nudge toward the brand glyph: the 44.dp tap target leaves more optical gap than - // spacing between the mark and the path label. + // Nudge toward the brand glyph: the 44.dp tap target leaves more optical gap than the + // spacing between the mark and path label. Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.offset(x = (-6).dp) + modifier = Modifier + .weight(1f) + .offset(x = (-6).dp) ) { Text( text = "/", @@ -731,66 +743,58 @@ private fun MainHeader( NicknameEditor( value = nickname, - onValueChange = onNicknameChange + onValueChange = onNicknameChange, + modifier = Modifier.weight(1f) ) } - } - // MARK: - Status cluster. - // - // Order, left to right: unread DMs, notes, channel, people. - // Tor health is read from the location channel / notes icon colour rather than a - // dedicated status dot. - Row( - verticalAlignment = Alignment.CenterVertically, - // Tight, because every child below is its own >=44.dp tap target. - horizontalArrangement = Arrangement.spacedBy(2.dp) - ) { - // Unread private messages badge (click to open most recent DM) - if (hasUnreadPrivateMessages.isNotEmpty()) { - HeaderIconButton( - onClick = { viewModel.openLatestUnreadPrivateChat() }, - contentDescription = stringResource(R.string.cd_unread_private_messages) - ) { - Icon( - painter = painterResource(R.drawable.ic_spec_envelope), - contentDescription = stringResource(R.string.cd_unread_private_messages), - modifier = Modifier.size(HeaderIconSize), - tint = palette.accentOrange - ) - } - } - - // Location notes + channel badge: one tight unit so the document glyph and the - // bluetooth/globe glyph sit at the same visual pitch as other header pairings. + // Order, left to right: unread DMs, notes, channel, people. This cluster is measured + // before the weighted nickname, so actions cannot be pushed off-screen by identity. Row( verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(0.dp) + horizontalArrangement = Arrangement.spacedBy(2.dp) ) { - LocationNotesButton( - viewModel = viewModel, - onClick = onLocationNotesClick - ) + if (hasUnreadPrivateMessages.isNotEmpty()) { + HeaderIconButton( + onClick = { viewModel.openLatestUnreadPrivateChat() }, + contentDescription = stringResource(R.string.cd_unread_private_messages) + ) { + Icon( + painter = painterResource(R.drawable.ic_spec_envelope), + contentDescription = stringResource(R.string.cd_unread_private_messages), + modifier = Modifier.size(HeaderIconSize), + tint = palette.accentOrange + ) + } + } - // Bookmarking lives in the Location Channels sheet, one tap away via the channel - // button. Duplicating it here bought a shortcut for a rare action at the cost - // of a slot in the app's most crowded row. + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(0.dp) + ) { + LocationNotesButton( + viewModel = viewModel, + onClick = onLocationNotesClick + ) - LocationChannelsButton( - viewModel = viewModel, - onClick = onLocationChannelsClick + LocationChannelsButton( + viewModel = viewModel, + onClick = onLocationChannelsClick, + showLabel = crowdingMode != HeaderCrowdingMode.IconOnlyLocationChannel + ) + } + + PeerCounter( + connectedPeers = connectedPeers.filter { it != viewModel.myPeerID }, + joinedChannels = joinedChannels, + hasUnreadChannels = hasUnreadChannels, + isConnected = isConnected, + selectedLocationChannel = selectedLocationChannel, + geohashPeople = geohashPeople, + onClick = onSidebarClick, + showJoinedChannelCount = crowdingMode == HeaderCrowdingMode.Full ) } - - PeerCounter( - connectedPeers = connectedPeers.filter { it != viewModel.myPeerID }, - joinedChannels = joinedChannels, - hasUnreadChannels = hasUnreadChannels, - isConnected = isConnected, - selectedLocationChannel = selectedLocationChannel, - geohashPeople = geohashPeople, - onClick = onSidebarClick - ) } } } @@ -805,7 +809,8 @@ private fun MainHeader( @Composable private fun LocationChannelsButton( viewModel: ChatViewModel, - onClick: () -> Unit + onClick: () -> Unit, + showLabel: Boolean ) { val colorScheme = MaterialTheme.colorScheme @@ -832,35 +837,39 @@ private fun LocationChannelsButton( } else { R.drawable.ic_spec_range } + val contentDescription = stringResource(R.string.cd_open_location_channels) Row( verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(6.dp), + horizontalArrangement = if (showLabel) Arrangement.spacedBy(6.dp) else Arrangement.Center, modifier = Modifier .clip(HeaderClusterShape) .pressScaleClickable( onClick = onClick, - onClickLabel = stringResource(R.string.location_channels_title) + onClickLabel = contentDescription ) .height(HeaderTapTarget) - // No start padding: the notes icon is paired directly to the left; keep end - // padding so the gap to PeerCounter matches other cluster separations. - .padding(start = 0.dp, end = 6.dp) + .widthIn(min = HeaderTapTarget) + .padding(end = if (showLabel) 6.dp else 0.dp) ) { TorAwareHeaderIcon( painter = painterResource(badgeIconRes), tint = torVisual.tint, isProgress = torVisual.isProgress, - contentDescription = stringResource(R.string.cd_tor_status) + contentDescription = contentDescription ) - Text( - text = badgeText, - style = MaterialTheme.typography.bodyMedium, - fontSize = HeaderTextSize, - fontWeight = FontWeight.Medium, - color = channelColor, - maxLines = 1 - ) + if (showLabel) { + Text( + text = badgeText, + style = MaterialTheme.typography.bodyMedium, + fontSize = HeaderTextSize, + fontWeight = FontWeight.Medium, + color = channelColor, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.widthIn(max = 88.dp) + ) + } } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 13c8d51c..5cf444be 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -75,6 +75,7 @@ رسائل خاصة غير مقروءة تم الانتقال حالة Tor + فتح إعدادات الموقع والقنوات الأقران المتصلون مشاركو geohash جاهز للمصافحة diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 7c2617a4..53c69ae6 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -75,6 +75,7 @@ অপঠিত ব্যক্তিগত বার্তা টেলিপোর্ট করা হয়েছে Tor অবস্থা + অবস্থান ও চ্যানেল সেটিংস খুলুন সংযুক্ত পিয়ার জিওহ্যাশ অংশগ্রহণকারী হ্যান্ডশেকের জন্য প্রস্তুত diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b13fb001..abea2e2f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -75,6 +75,7 @@ Ungelesene private Nachrichten Teleportiert Tor‑Status + Standort- und Kanaleinstellungen öffnen Verbundenen Peers Geohash‑Teilnehmer Bereit für Handshake diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e1ac2c2b..1de44f88 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -75,6 +75,7 @@ Mensajes privados sin leer Teletransportado Estado de Tor + Abrir ajustes de ubicación y canales Pares conectados Participantes geohash Listo para handshake diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index a3e81d29..23967cf5 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -75,6 +75,7 @@ پیام‌های خصوصی خوانده‌نشده انتقال مکانی وضعیت Tor + باز کردن تنظیمات مکان و کانال‌ها همتایان متصل شرکت‌کنندگان geohash آمادهٔ دست‌دهی diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 1da03f06..e98d06b3 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -75,6 +75,7 @@ Hindi nabasang pribadong mensahe Naiteleport Katayuan ng Tor + Buksan ang mga setting ng lokasyon at channel Nakakonektang peers Mga kalahok sa geohash Handa para sa handshake diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e632bdb8..706aa67a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -75,6 +75,7 @@ Messages privés non lus Téléporté Statut Tor + Ouvrir les réglages de localisation et des canaux Pairs connectés Participants geohash Prêt pour l’échange de clés diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 3793942b..d8d26842 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -54,6 +54,7 @@ You verified %1$s verified %1$s פתיחת אודות + פתיחת הגדרות מיקום וערוצים בדיקה אם הושארו כאן פתקים פתק אחד הושאר כאן — הקש לקריאה %d פתקים הושארו כאן — הקש לקריאה diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 1a393f38..fbe2f4b4 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -75,6 +75,7 @@ अपठित निजी संदेश टेलीपोर्ट हुआ Tor स्थिति + स्थान और चैनल सेटिंग खोलें कनेक्टेड पीयर्स geohash प्रतिभागी हैंडशेक के लिए तैयार diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 934556e4..13744970 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -75,6 +75,7 @@ Pesan pribadi yang belum dibaca Diteleportasi Status Tor + Buka pengaturan lokasi dan channel Peer yang terhubung Peserta geohash Siap untuk handshake diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7e67de6d..a6171cb2 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -75,6 +75,7 @@ Messaggi privati non letti Teletrasportato Stato Tor + Apri le impostazioni di posizione e canali Peer connessi Partecipanti geohash Pronto per l\'handshake diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1e7da71d..5c6be0e0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -75,6 +75,7 @@ 未読のプライベートメッセージ テレポート済み Tor ステータス + 位置情報とチャンネルの設定を開く 接続中のピア Geohash 参加者 ハンドシェイク準備完了 diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 4994f9cc..6b30bd84 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -75,6 +75,7 @@ წაუკითხავი პირადი შეტყობინებები ტელეპორტირებული Tor-ის სტატუსი + მდებარეობისა და არხების პარამეტრების გახსნა დაკავშირებული პირები geohash მონაწილეები მზადაა ხელის ჩამოსართმევად diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 7327257a..878fc055 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -75,6 +75,7 @@ 읽지 않은 개인 메시지 텔레포트됨 Tor 상태 + 위치 및 채널 설정 열기 연결된 피어 geohash 참여자 핸드셰이크 준비됨 diff --git a/app/src/main/res/values-mg/strings.xml b/app/src/main/res/values-mg/strings.xml index 168eebe7..f13c0947 100644 --- a/app/src/main/res/values-mg/strings.xml +++ b/app/src/main/res/values-mg/strings.xml @@ -75,6 +75,7 @@ Hafatra manokana tsy voavaky Nafindra toerana Toe-javatra Tor + Sokafy ny fikirana toerana sy fantsona Mpiara-miasa mifandray Mpandray anjara Geohash Vonona ho amin\'ny fifampiraharahana diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index add7b467..f5a16d1d 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -41,6 +41,7 @@ You verified %1$s verified %1$s Buka Perihal + Buka tetapan lokasi dan saluran semak nota yang ditinggalkan di sini 1 nota ditinggalkan di sini — ketik untuk baca %d nota ditinggalkan di sini — ketik untuk baca diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 48a7afbd..b65764bd 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -75,6 +75,7 @@ नपढिएका निजी सन्देश टेलिपोर्ट भयो Tor स्थिति + स्थान र च्यानल सेटिङ खोल्नुहोस् जडान भएका साथीहरू Geohash सहभागिहरू ह्यान्डशेकका लागि तयार diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 0eeaec55..b160bd3b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -75,6 +75,7 @@ Ongelezen privéberichten Geteleporteerd Tor-status + Locatie- en kanaalinstellingen openen Verbonden peers Geohash-deelnemers Klaar voor handshake diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 5f5f5f75..8da58184 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -75,6 +75,7 @@ انہ پڑھیا ذاتی پیغام ٹیلپورٹ کیتا گیا Tor حالت + مقام تے چینل دیاں ترتیباں کھولو جُڑے پیئر geohash شریک ہینڈشیک لئی تیار diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index f1a67349..5755aa47 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -54,6 +54,7 @@ You verified %1$s verified %1$s Otwórz informacje + Otwórz ustawienia lokalizacji i kanałów sprawdź, czy zostawiono tutaj notatki 1 notatka zostawiona tutaj — stuknij, aby przeczytać %d notatek zostawionych tutaj — stuknij, aby przeczytać diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fd4901ef..1f49a3a4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -75,6 +75,7 @@ Mensagens privadas não lidas Teletransportado Status do Tor + Abrir configurações de localização e canais Peers conectados Participantes geohash Pronto para handshake diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 5247916e..3b05891f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -75,6 +75,7 @@ Mensagens privadas não lidas Teletransportado Estado do Tor + Abrir definições de localização e canais Pares ligados Participantes geohash Pronto para handshake diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 4dc08928..6bac2ebb 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -67,6 +67,7 @@ Непрочитанные личные Телепортировано Статус Tor + Открыть настройки местоположения и каналов Подключённые узлы Участники geohash Готов к рукопожатию diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index dcfda208..9ce76eba 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -67,6 +67,7 @@ Olästa privata meddelanden Teleporterad Tor‑status + Öppna plats- och kanalinställningar Anslutna noder Geohash‑deltagare Redo för handshake diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 05bd4750..7ca3e8c7 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -41,6 +41,7 @@ You verified %1$s verified %1$s அறிமுகத்தைத் திற + இருப்பிடம் மற்றும் சேனல் அமைப்புகளைத் திற இங்கே விடப்பட்ட குறிப்புகள் உள்ளதா எனப் பார்க்கவும் இங்கே 1 குறிப்பு விடப்பட்டுள்ளது — படிக்க தட்டவும் இங்கே %d குறிப்புகள் விடப்பட்டுள்ளன — படிக்க தட்டவும் diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 7e1fc05a..4f9ca27f 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -75,6 +75,7 @@ ข้อความส่วนตัวยังไม่ได้อ่าน เทเลพอร์ตแล้ว สถานะ Tor + เปิดการตั้งค่าตำแหน่งและช่อง เพียร์ที่เชื่อมต่อ ผู้เข้าร่วม geohash พร้อมสำหรับการจับมือ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index b81fdd08..9f62643e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -67,6 +67,7 @@ Okunmamış özel mesaj Teleport edildi Tor durumu + Konum ve kanal ayarlarını aç Bağlı eşler Geohash katılımcıları El sıkışmaya hazır diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 9ca2d2d0..ccc5dfed 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -41,6 +41,7 @@ You verified %1$s verified %1$s Відкрити розділ «Про застосунок» + Відкрити налаштування розташування та каналів перевірити, чи залишено тут нотатки тут залишено 1 нотатку — торкніться, щоб прочитати тут залишено %d нотаток — торкніться, щоб прочитати diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 36c5265d..813b96a7 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -75,6 +75,7 @@ غیر پڑھے ہوئے نجی پیغامات ٹیلی پورٹ Tor کی کیفیت + مقام اور چینل کی ترتیبات کھولیں منسلک پیئرز geohash شرکاء ہینڈ شیک کے لیے تیار diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 20028f38..70015c8a 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -75,6 +75,7 @@ Tin nhắn riêng chưa đọc Đã dịch chuyển Trạng thái Tor + Mở cài đặt vị trí và kênh Peers đã kết nối Người tham gia geohash Sẵn sàng cho handshake diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index d6eada8c..85d4ee8f 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -75,6 +75,7 @@ 未读私信 已传送 Tor 状态 + 打开位置和频道设置 已连接节点 Geohash 参与者 准备握手 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c54a2273..edbb6a83 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -77,6 +77,7 @@ Location notes Teleported Tor status + Open location and channel settings Connected peers Geohash participants Ready for handshake diff --git a/app/src/test/java/com/bitchat/android/ui/ChatHeaderCrowdingTest.kt b/app/src/test/java/com/bitchat/android/ui/ChatHeaderCrowdingTest.kt new file mode 100644 index 00000000..d248bf33 --- /dev/null +++ b/app/src/test/java/com/bitchat/android/ui/ChatHeaderCrowdingTest.kt @@ -0,0 +1,38 @@ +package com.bitchat.android.ui + +import androidx.compose.ui.unit.dp +import org.junit.Assert.assertEquals +import org.junit.Test + +class ChatHeaderCrowdingTest { + + @Test + fun `full header is used at four hundred dp and above`() { + assertEquals(HeaderCrowdingMode.Full, headerCrowdingMode(400.dp)) + assertEquals(HeaderCrowdingMode.Full, headerCrowdingMode(500.dp)) + } + + @Test + fun `joined channel count yields before the location label`() { + assertEquals( + HeaderCrowdingMode.HideJoinedChannelCount, + headerCrowdingMode(399.dp) + ) + assertEquals( + HeaderCrowdingMode.HideJoinedChannelCount, + headerCrowdingMode(360.dp) + ) + } + + @Test + fun `location action becomes icon only on narrow headers`() { + assertEquals( + HeaderCrowdingMode.IconOnlyLocationChannel, + headerCrowdingMode(359.dp) + ) + assertEquals( + HeaderCrowdingMode.IconOnlyLocationChannel, + headerCrowdingMode(320.dp) + ) + } +}