diff options
author | Thanos Doukoudakis <thanos.doukoudakis@isode.com> | 2017-03-24 14:15:52 (GMT) |
---|---|---|
committer | Thanos Doukoudakis <thanos.doukoudakis@isode.com> | 2017-04-06 14:27:45 (GMT) |
commit | 7d2e5e200d8449a4492c6fafa4811197e6fbe40b (patch) | |
tree | a4cc9d8d6eb6d98d60dee9e2b928a9e96392ebe9 /Swiften/Chat/ChatStateNotifier.h | |
parent | 20c50e3960ee68d26fc93738f03d27a6833b28bb (diff) | |
download | swift-7d2e5e200d8449a4492c6fafa4811197e6fbe40b.zip swift-7d2e5e200d8449a4492c6fafa4811197e6fbe40b.tar.bz2 |
Reset the chat state to active after a few seconds
Fix for swift-217
When a user sends a composing Chat State Notification a timer will start. If the user doesn't
send or cancel the message before the timer expires, an active CSN will
be sent.
Test Info:
Build on Windows and unit test pass.
Tested the new functionality with Windows and Linux Client.
Added some test cases to cover the scenario that user goes idle while a
CSN composing state has been sent.
Updated ChatStateNotifierTest to use gtest.
Updated ChatsManagerTest to use a valid TimerFactory object instead of
nullptr.
Change-Id: I35201947e4f042805a6d9df1340a0335effcd657
Diffstat (limited to 'Swiften/Chat/ChatStateNotifier.h')
-rw-r--r-- | Swiften/Chat/ChatStateNotifier.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Swiften/Chat/ChatStateNotifier.h b/Swiften/Chat/ChatStateNotifier.h index a7af9e4..2b24c76 100644 --- a/Swiften/Chat/ChatStateNotifier.h +++ b/Swiften/Chat/ChatStateNotifier.h @@ -18,10 +18,13 @@ namespace Swift { class StanzaChannel; class EntityCapsProvider; + class TimerFactory; + class Timer; + class SWIFTEN_API ChatStateNotifier { public: - ChatStateNotifier(StanzaChannel* stanzaChannel, const JID& contact, EntityCapsProvider* entityCapsManager); + ChatStateNotifier(StanzaChannel* stanzaChannel, const JID& contact, EntityCapsProvider* entityCapsManager, TimerFactory* timerFactory, int idleTimeInMilliSecs); ~ChatStateNotifier(); void setContact(const JID& contact); @@ -36,6 +39,7 @@ namespace Swift { void setContactIsOnline(bool online); private: + void userBecameIdleWhileTyping(); bool contactShouldReceiveStates(); void changeState(ChatState::ChatStateType type); void handleCapsChanged(const JID& contact); @@ -48,5 +52,7 @@ namespace Swift { bool contactHasSentActive_; bool userIsTyping_; bool contactIsOnline_; + std::shared_ptr<Timer> idleTimer_; + }; } |