diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java index 198d99c420..1332613253 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java @@ -107,7 +107,8 @@ public Presence(Presence other) { * equivalent to getType() == Presence.Type.available. Note that even * when the user is available, their presence mode may be {@link Mode#away away}, * {@link Mode#xa extended away} or {@link Mode#dnd do not disturb}. Use - * {@link #isAway()} to determine if the user is away. + * {@link #isAway()} to determine if the user is away, or {@link #isActive()} + * to determine if user is available an not away. * * @return true if the presence type is available. */ @@ -129,6 +130,19 @@ public boolean isAway() { return type == Type.available && (mode == Mode.away || mode == Mode.xa || mode == Mode.dnd); } + /** + * Returns true if the presence signals availability ({@link #isAvailable()}) and no away mode ({@link #isAway()}). Otherwise, returns false. + * mode is {@link Mode#available available}, or {@link Mode#chat ready to chat}. False will be returned when the type or mode + * is any other value, including when the presence type is unavailable (offline). + * This is a convenience method equivalent to + * isAvailable() && !isAway(). + * + * @return true if the presence type is available and the presence mode is available or chat. + */ + public boolean isActive() { + return isAvailable() && !isAway(); + } + @Override public Type getType() { return type; diff --git a/smack-core/src/test/java/org/jivesoftware/smack/packet/PresenceTest.java b/smack-core/src/test/java/org/jivesoftware/smack/packet/PresenceTest.java index 6c3b3e6a80..eecc14bf0d 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/packet/PresenceTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/packet/PresenceTest.java @@ -172,9 +172,11 @@ public void isModeAwayTest() { PresenceBuilder presence = getNewPresence(); presence.setMode(Presence.Mode.away); assertTrue(presence.build().isAway()); + assertFalse(presence.build().isActive()); presence.setMode(Presence.Mode.chat); assertFalse(presence.build().isAway()); + assertTrue(presence.build().isActive()); } @Test