diff options
Diffstat (limited to 'src/com/isode/stroke/chat/ChatStateTracker.java')
-rw-r--r-- | src/com/isode/stroke/chat/ChatStateTracker.java | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/com/isode/stroke/chat/ChatStateTracker.java b/src/com/isode/stroke/chat/ChatStateTracker.java new file mode 100644 index 0000000..c63d967 --- /dev/null +++ b/src/com/isode/stroke/chat/ChatStateTracker.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.chat; + +import com.isode.stroke.elements.Message; +import com.isode.stroke.elements.Presence; +import com.isode.stroke.elements.ChatState; +import com.isode.stroke.signals.Signal1; +import com.isode.stroke.base.NotNull; + +public class ChatStateTracker { + + private ChatState.ChatStateType currentState_; + public final Signal1<ChatState.ChatStateType> onChatStateChange = new Signal1<ChatState.ChatStateType>(); + + /** + * ChatStateTracker(); + */ + public ChatStateTracker() { + currentState_ = ChatState.ChatStateType.Gone; + } + + /** + * @param message, notnull + */ + public void handleMessageReceived(Message message) { + NotNull.exceptIfNull(message, "message"); + if (message.getType() == Message.Type.Error) { + return; + } + ChatState statePayload = message.getPayload(new ChatState()); + if (statePayload != null) { + changeState(statePayload.getChatState()); + } + } + + /** + * @param newPresence, notnull + */ + public void handlePresenceChange(Presence newPresence) { + NotNull.exceptIfNull(newPresence, "newPresence"); + if (newPresence.getType() == Presence.Type.Unavailable) { + onChatStateChange.emit(ChatState.ChatStateType.Gone); + } + } + + private void changeState(ChatState.ChatStateType state) { + if (state != currentState_) { + currentState_ = state; + onChatStateChange.emit(state); + } + } +} |