From 265bd062500dcd9524a0a5f70acf88350266ac26 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Tue, 26 Aug 2014 17:43:44 +0200 Subject: added basic csi --- .../services/XmppConnectionService.java | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src/eu/siacs/conversations/services') diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index c535f1a3c..ccf703fcc 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -911,6 +911,9 @@ public class XmppConnectionService extends Service { public void setOnConversationListChangedListener( OnConversationUpdate listener) { + if (checkListeners()) { + switchToForeground(); + } this.mOnConversationUpdate = listener; this.convChangedListenerCount++; } @@ -919,10 +922,16 @@ public class XmppConnectionService extends Service { this.convChangedListenerCount--; if (this.convChangedListenerCount == 0) { this.mOnConversationUpdate = null; + if (checkListeners()) { + switchToBackground(); + } } } public void setOnAccountListChangedListener(OnAccountUpdate listener) { + if (checkListeners()) { + switchToForeground(); + } this.mOnAccountUpdate = listener; this.accountChangedListenerCount++; } @@ -931,15 +940,54 @@ public class XmppConnectionService extends Service { this.accountChangedListenerCount--; if (this.accountChangedListenerCount == 0) { this.mOnAccountUpdate = null; + if (checkListeners()) { + switchToBackground(); + } } } public void setOnRosterUpdateListener(OnRosterUpdate listener) { + if (checkListeners()) { + switchToForeground(); + } this.mOnRosterUpdate = listener; } public void removeOnRosterUpdateListener() { this.mOnRosterUpdate = null; + if (checkListeners()) { + switchToBackground(); + } + } + + private boolean checkListeners() { + return (this.mOnAccountUpdate == null && this.mOnConversationUpdate == null && this.mOnRosterUpdate == null); + } + + private void switchToForeground() { + Log.d(LOGTAG,"going into foreground"); + for(Account account : getAccounts()) { + if (account.getStatus() == Account.STATUS_ONLINE) { + XmppConnection connection = account.getXmppConnection(); + if (connection != null && connection.getFeatures().csi()) { + connection.sendActive(); + Log.d(LOGTAG,account.getJid() + " sending csi//active"); + } + } + } + } + + private void switchToBackground() { + Log.d(LOGTAG,"going into background"); + for(Account account : getAccounts()) { + if (account.getStatus() == Account.STATUS_ONLINE) { + XmppConnection connection = account.getXmppConnection(); + if (connection != null && connection.getFeatures().csi()) { + connection.sendInactive(); + Log.d(LOGTAG,account.getJid() + " sending csi//inactive"); + } + } + } } public void connectMultiModeConversations(Account account) { -- cgit v1.2.3