diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java index 422320bf1..40c3a85a2 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java @@ -271,6 +271,10 @@ public class MultiUserChat { for (UserStatusListener listener : userStatusListeners) { listener.removed(mucUser, presence); } + } else { + for (ParticipantStatusListener listener : participantStatusListeners) { + listener.parted(from); + } } break; default: diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/ParticipantStatusListener.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/ParticipantStatusListener.java index 3ab215d69..8a376ca36 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/ParticipantStatusListener.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/ParticipantStatusListener.java @@ -50,6 +50,17 @@ public interface ParticipantStatusListener { default void left(EntityFullJid participant) { } + /** + * Called when a participant is parted for whatever reason. This callback is always invoked if a participant + * parted the room, either voluntarily or involuntarily. Prior this callback, a callback with a more specific + * reason for the removal, like {@link #left(EntityFullJid)} may be invoked. + * + * @param participant the participant that was removed from the room. + * @since 4.4 + */ + default void parted(EntityFullJid participant) { + } + /** * Called when a room participant has been kicked from the room. This means that the kicked * participant is no longer participating in the room.