From 334521ce3f21890ef054a95beabe853133f89c10 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 4 Oct 2026 16:02:57 +0200 Subject: [PATCH] Display active radios in Android member rows --- src/chat/chat_member.c | 14 +++++++++++--- .../com/utun/chat/ui/screens/MemberListScreen.kt | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/chat/chat_member.c b/src/chat/chat_member.c index ab1d57a5..07168adc 100644 --- a/src/chat/chat_member.c +++ b/src/chat/chat_member.c @@ -312,18 +312,26 @@ void chat_core_request_member_list_trampoline(void* arg) { uint8_t* members = NULL; int count = 0; - if (chat_core_get_member_list(inst, ch_id, &members, &count) != 0 || !members) return; + if (chat_core_get_member_list(inst, ch_id, &members, &count) != 0) { + DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: cannot build list ch=%s", ch_id); return; + } size_t ch_len = strlen(ch_id); size_t evt_sz = 1 + ch_len + 2 + (size_t)count * CHAT_MEMBER_DISPLAY_SIZE; uint8_t* evt = u_malloc(evt_sz); - if (!evt) { u_free(members); return; } + if (!evt) { + DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: list event allocation failed ch=%s count=%d", ch_id, count); + u_free(members); return; + } uint16_t u16cnt = (uint16_t)count; evt[0] = (uint8_t)ch_len; memcpy(evt + 1, ch_id, ch_len); memcpy(evt + 1 + ch_len, &u16cnt, 2); - memcpy(evt + 1 + ch_len + 2, members, (size_t)count * CHAT_MEMBER_DISPLAY_SIZE); + if (count) memcpy(evt + 1 + ch_len + 2, members, (size_t)count * CHAT_MEMBER_DISPLAY_SIZE); + int radios = 0; + for (int i = 0; i < count; i++) radios += !!(members[i * CHAT_MEMBER_DISPLAY_SIZE + 10] & CHAT_MEMBER_FLAG_RADIO); + DEBUG_DEBUG(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: list ch=%s count=%d radios=%d", ch_id, count, radios); chat_event_post(inst, CHAT_EVT_MEMBER_LIST, evt, (int)evt_sz); u_free(evt); diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt index e7f193c1..69fc4c33 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt @@ -47,6 +47,7 @@ import com.utun.chat.data.MemberAddr import com.utun.chat.data.MemberLinks import com.utun.chat.data.LinkStatus import com.utun.chat.data.LocalSocketState +import com.utun.chat.ui.components.PortableRadioIcon import com.utun.chat.viewmodel.ChatViewModel @OptIn(ExperimentalMaterial3Api::class) @@ -205,6 +206,10 @@ private fun MemberListItem( Icon(Icons.Filled.Storage, stringResource(R.string.storage), tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(16.dp)) Spacer(Modifier.width(4.dp)) } + if (member.radioActive) { + PortableRadioIcon(stringResource(R.string.radio_active), Modifier.size(16.dp)) + Spacer(Modifier.width(4.dp)) + } if (!member.isVerified) { Icon(Icons.Filled.Close, stringResource(R.string.not_verified), tint = Color.Red, modifier = Modifier.size(16.dp)) Spacer(Modifier.width(4.dp))