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 6b76a2bf..aac5283c 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,28 @@ 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 +} + +internal fun locationChannelContentDescription( + actionDescription: String, + channelLabel: String, + showLabel: Boolean, +): String = if (showLabel) { + actionDescription +} else { + "$channelLabel. $actionDescription" +} + /** Corner radius for the header's tappable label+icon clusters. */ private val HeaderClusterShape = RoundedCornerShape(8.dp) @@ -531,6 +554,7 @@ fun NicknameEditor( } ), modifier = Modifier + .weight(1f) .widthIn(max = 150.dp) .horizontalScroll(scrollState) ) @@ -546,7 +570,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 @@ -603,7 +628,7 @@ fun PeerCounter( fontWeight = FontWeight.Medium ) - if (joinedChannels.isNotEmpty()) { + if (showJoinedChannelCount && joinedChannels.isNotEmpty()) { AnimatedCount( count = joinedChannels.size, prefix = stringResource(R.string.channel_count_prefix), @@ -703,22 +728,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, @@ -726,11 +746,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 = "/", @@ -744,66 +766,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 - ) } } } @@ -818,7 +832,8 @@ private fun MainHeader( @Composable private fun LocationChannelsButton( viewModel: ChatViewModel, - onClick: () -> Unit + onClick: () -> Unit, + showLabel: Boolean ) { val colorScheme = MaterialTheme.colorScheme @@ -845,35 +860,44 @@ private fun LocationChannelsButton( } else { R.drawable.ic_spec_range } + val actionDescription = stringResource(R.string.cd_open_location_channels) + val contentDescription = locationChannelContentDescription( + actionDescription = actionDescription, + channelLabel = badgeText, + showLabel = showLabel + ) 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 = actionDescription ) .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 abaed278..772e48a5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -74,7 +74,7 @@ يمكن الوصول عبر Nostr رسائل خاصة غير مقروءة تم الانتقال - حالة Tor + فتح إعدادات الموقع والقنوات الأقران المتصلون مشاركو geohash جاهز للمصافحة diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 4d1f886b..b6557fe2 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -74,7 +74,7 @@ Nostr এর মাধ্যমে পৌঁছানো যায় অপঠিত ব্যক্তিগত বার্তা টেলিপোর্ট করা হয়েছে - Tor অবস্থা + অবস্থান ও চ্যানেল সেটিংস খুলুন সংযুক্ত পিয়ার জিওহ্যাশ অংশগ্রহণকারী হ্যান্ডশেকের জন্য প্রস্তুত diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d2d6701a..75cc8927 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -74,7 +74,7 @@ Über Nostr erreichbar 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 477f3ad1..3f08ead0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -74,7 +74,7 @@ Accesible vía Nostr 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 2c24b107..1e092b64 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -74,7 +74,7 @@ قابل دسترس از طریق Nostr پیام‌های خصوصی خوانده‌نشده انتقال مکانی - وضعیت Tor + باز کردن تنظیمات مکان و کانال‌ها همتایان متصل شرکت‌کنندگان geohash آمادهٔ دست‌دهی diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index c689a986..66cd93bd 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -74,7 +74,7 @@ Maabot sa Nostr 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 98ecb5fc..aa857f44 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -74,7 +74,7 @@ Joignable via Nostr 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 ea869078..86e4bbcb 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -122,7 +122,7 @@ הודעות פרטיות שלא נקראו הערות מיקום טלפורט - סטטוס Tor + פתיחת הגדרות מיקום וערוצים עמיתים מחוברים משתתפי geohash מוכן ללחיצת יד diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 349b5dd2..4cb18e38 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -74,7 +74,7 @@ Nostr के माध्यम से उपलब्ध अपठित निजी संदेश टेलीपोर्ट हुआ - Tor स्थिति + स्थान और चैनल सेटिंग खोलें कनेक्टेड पीयर्स geohash प्रतिभागी हैंडशेक के लिए तैयार diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index a8bf98cf..02c86a68 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -74,7 +74,7 @@ Dapat dijangkau melalui Nostr 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 069b0bb6..a8ecb688 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -74,7 +74,7 @@ Raggiungibile via Nostr 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 5d64770d..17841dcc 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -74,7 +74,7 @@ Nostr 経由で到達可能 未読のプライベートメッセージ テレポート済み - Tor ステータス + 位置情報とチャンネルの設定を開く 接続中のピア Geohash 参加者 ハンドシェイク準備完了 diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index d75f1fea..8fe186cc 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -74,7 +74,7 @@ მისაწვდომია Nostr-ით წაუკითხავი პირადი შეტყობინებები ტელეპორტირებული - Tor-ის სტატუსი + მდებარეობისა და არხების პარამეტრების გახსნა დაკავშირებული პირები geohash მონაწილეები მზადაა ხელის ჩამოსართმევად diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 65023145..030165d6 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -74,7 +74,7 @@ Nostr로 연결 가능 읽지 않은 개인 메시지 텔레포트됨 - Tor 상태 + 위치 및 채널 설정 열기 연결된 피어 geohash 참여자 핸드셰이크 준비됨 diff --git a/app/src/main/res/values-mg/strings.xml b/app/src/main/res/values-mg/strings.xml index e6c61aae..52617e72 100644 --- a/app/src/main/res/values-mg/strings.xml +++ b/app/src/main/res/values-mg/strings.xml @@ -74,7 +74,7 @@ Azo tratrarina amin\'ny alalan\'ny Nostr 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 ca6bdabf..c6391e6f 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -76,7 +76,7 @@ Mesej peribadi belum dibaca Nota lokasi Diteleport - Status Tor + Buka tetapan lokasi dan saluran Rakan disambungkan Peserta geohash Sedia untuk berjabat tangan diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 1220a858..7a3da0bd 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -74,7 +74,7 @@ Nostr मार्फत पुग्न सकिने नपढिएका निजी सन्देश टेलिपोर्ट भयो - Tor स्थिति + स्थान र च्यानल सेटिङ खोल्नुहोस् जडान भएका साथीहरू Geohash सहभागिहरू ह्यान्डशेकका लागि तयार diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3ef1315d..64326ae5 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -74,7 +74,7 @@ Bereikbaar via Nostr 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 1450d583..a3f67735 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -74,7 +74,7 @@ Nostr راہین پہنچ ممکن اے انہ پڑھیا ذاتی پیغام ٹیلپورٹ کیتا گیا - Tor حالت + مقام تے چینل دیاں ترتیباں کھولو جُڑے پیئر geohash شریک ہینڈشیک لئی تیار diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index a5840177..0d2f2689 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -120,7 +120,7 @@ Nieprzeczytane wiadomości prywatne Notatki lokalizacji Teleportowany - Status Tor + Otwórz ustawienia lokalizacji i kanałów Połączeni użytkownicy Uczestnicy geohash Gotowy do uzgadniania diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8f66a464..42340857 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -74,7 +74,7 @@ Acessível via Nostr 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 4ae6fc0f..0e01bb07 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -74,7 +74,7 @@ Alcançável via Nostr 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 8f028c99..613b008d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -66,7 +66,7 @@ Доступен через Nostr Непрочитанные личные Телепортировано - Статус Tor + Открыть настройки местоположения и каналов Подключённые узлы Участники geohash Готов к рукопожатию diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index d3c00726..c0457997 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -66,7 +66,7 @@ Nås via Nostr 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 fa4d69dd..5e7f8bdd 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -112,7 +112,7 @@ படிக்காத தனிப்பட்ட செய்திகள் இருப்பிட குறிப்புகள் டெலிபோர்ட் செய்யப்பட்டது - Tor நிலை + இருப்பிடம் மற்றும் சேனல் அமைப்புகளைத் திற இணைக்கப்பட்ட பியர்ஸ் ஜியோஹாஷ் பங்கேற்பாளர்கள் ஹேண்ட்ஷேக்கிற்கு தயார் diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 2d12c647..b21049c1 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -74,7 +74,7 @@ ติดต่อได้ผ่าน Nostr ข้อความส่วนตัวยังไม่ได้อ่าน เทเลพอร์ตแล้ว - สถานะ Tor + เปิดการตั้งค่าตำแหน่งและช่อง เพียร์ที่เชื่อมต่อ ผู้เข้าร่วม geohash พร้อมสำหรับการจับมือ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c4ae063c..533e3252 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -66,7 +66,7 @@ Nostr üzerinden ulaşılabilir 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 186bc50b..cdc73c91 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -105,7 +105,7 @@ Непрочитані приватні повідомлення Нотатки про місце Телепортовано - Статус Tor + Відкрити налаштування розташування та каналів Підключені піри Учасники геохешу Готовий до рукостискання diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 66131271..785338fb 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -74,7 +74,7 @@ Nostr کے ذریعے رسائی غیر پڑھے ہوئے نجی پیغامات ٹیلی پورٹ - Tor کی کیفیت + مقام اور چینل کی ترتیبات کھولیں منسلک پیئرز geohash شرکاء ہینڈ شیک کے لیے تیار diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 0c47a698..b97c3fc5 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -74,7 +74,7 @@ Có thể tiếp cận qua Nostr 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-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a639dd00..b9e35372 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -121,7 +121,6 @@ 未读私信 位置笔记 已传送 - Tor 状态 已连接的节点 Geohash 参与者 准备握手 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 70fc5986..36b6bbdd 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -121,7 +121,6 @@ 未讀私訊 位置筆記 已傳送 - Tor 狀態 已連線的節點 地理雜湊參與者 準備好進行握手 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 8231722b..751580a6 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -74,7 +74,7 @@ 可通过 Nostr 联系 未读私信 已传送 - Tor 状态 + 打开位置和频道设置 已连接节点 Geohash 参与者 准备握手 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52388349..aa240bc4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -123,7 +123,7 @@ You 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..ce079ba7 --- /dev/null +++ b/app/src/test/java/com/bitchat/android/ui/ChatHeaderCrowdingTest.kt @@ -0,0 +1,68 @@ +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) + ) + } + + @Test + fun `icon-only location action includes the selected channel in its description`() { + val action = "Open location and channel settings" + + assertEquals( + action, + locationChannelContentDescription( + actionDescription = action, + channelLabel = "mesh", + showLabel = true + ) + ) + assertEquals( + "mesh. $action", + locationChannelContentDescription( + actionDescription = action, + channelLabel = "mesh", + showLabel = false + ) + ) + assertEquals( + "#u33d. $action", + locationChannelContentDescription( + actionDescription = action, + channelLabel = "#u33d", + showLabel = false + ) + ) + } +}