cheogram-android

created pr with cheogram-android/offline-nick.1 on 2026-11-07T18:07:04Z · by 9e834e0d
commented on 2026-11-09T15:11:28Z · by 3c31bc8c
lgtm
cmds
checkout latest patchset:
ssh pr.pico.sh pull cheogram-android:offline-nick | git am -3
checkout specific patchset revision:
ssh pr.pico.sh pull cheogram-android:offline-nick [rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh cheogram-android:offline-nick
add comment to patch request:
ssh pr.pico.sh comment cheogram-android:offline-nick "lgtm!"

Patchset cheogram-android/offline-nick.1 on 2026-11-07T18:07:04Z · commit c0fb80a

+4 -2 src/main/java/eu/siacs/conversations/entities/MucOptions.java #
......@@ -543,12 +543,14 @@ public class MucOptions {
543543
544544 public User getUserOrStub(final IdentifiableUser identifiableUser) {
545545 final var existing = getUser(identifiableUser);
546- if (existing != null) {
546+ final var address = identifiableUser.mucUserAddress();
547+ if (existing != null
548+ && (existing.getNick() != null || address == null || !address.isFullJid())) {
547549 return existing;
548550 }
549551 return new Stub(
550552 this,
551- identifiableUser.mucUserAddress(),
553+ address,
552554 identifiableUser.mucUserRealAddress(),
553555 identifiableUser.mucUserOccupantId());
554556 }
+1 -6 src/main/java/eu/siacs/conversations/ui/ConversationFragment.java #
......@@ -5158,7 +5158,7 @@ public class ConversationFragment extends XmppFragment
51585158 final var mucOptions = c.getMucOptions();
51595159 if (mucOptions.participating()) {
51605160 final var user = mucOptions.getUserOrStub(message);
5161- if (user.resource() != null) {
5161+ if (user.getNick() != null) {
51625162 if (user instanceof MucOptions.Stub) {
51635163 Toast.makeText(
51645164 requireActivity(),
......@@ -5170,11 +5170,6 @@ public class ConversationFragment extends XmppFragment
51705170 .show();
51715171 }
51725172 highlightInConference(user.getNick());
5173- } else {
5174- final var counterpart = message.getCounterpart();
5175- if (counterpart != null && counterpart.isFullJid()) {
5176- highlightInConference(counterpart.getResource());
5177- }
51785173 }
51795174 } else {
51805175 Toast.makeText(
+27 -0 src/test/java/eu/siacs/conversations/entities/MucOptionsTest.java #
......@@ -135,6 +135,33 @@ public class MucOptionsTest {
135135
136136 Assert.assertEquals("Contact Name", offlineUser.getDisplayName());
137137 }
138+
139+ @Test
140+ public void testGetUserOrStubUsesNickFromMessageAddress() throws Exception {
141+ final var realJid = Jid.ofLocalAndDomain("anonUser", "example.org");
142+ final var offlineUser = new MucOptions.User(
143+ mucOptions,
144+ null,
145+ realJid,
146+ null,
147+ null,
148+ im.conversations.android.xmpp.model.muc.Role.NONE,
149+ im.conversations.android.xmpp.model.muc.Affiliation.NONE,
150+ new HashSet<>()
151+ );
152+ mucOptions.updateUser(offlineUser, null);
153+
154+ final var identifiableUser = mock(MucOptions.IdentifiableUser.class);
155+ when(identifiableUser.mucUserAddress())
156+ .thenReturn(Jid.of("testMuc@example.org/testNick"));
157+ when(identifiableUser.mucUserRealAddress()).thenReturn(realJid);
158+
159+ final var user = mucOptions.getUserOrStub(identifiableUser);
160+
161+ Assert.assertTrue(user instanceof MucOptions.Stub);
162+ Assert.assertEquals("testNick", user.getNick());
163+ }
164+
138165 @Test
139166 public void testSetAvatarCachesAvatar() throws Exception {
140167 when(conversation.setCachedOccupantAvatar(CACHE_KEY, "newAvatar")).thenReturn(true);
Back to top