modify otr chat status for already openned chat when the participant goes offline
--- a/src/com/beem/project/beem/service/BeemChatManager.java Wed Aug 24 23:15:26 2011 +0200
+++ b/src/com/beem/project/beem/service/BeemChatManager.java Sat Nov 05 22:27:58 2011 +0100
@@ -45,13 +45,20 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import net.java.otr4j.OtrException;
+
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
+import org.jivesoftware.smack.Roster;
+import org.jivesoftware.smack.RosterListener;
+import org.jivesoftware.smack.packet.Presence;
+import org.jivesoftware.smack.util.StringUtils;
import android.app.Notification;
import android.app.PendingIntent;
@@ -70,6 +77,7 @@
import com.beem.project.beem.service.aidl.IChatManagerListener;
import com.beem.project.beem.service.aidl.IMessageListener;
import com.beem.project.beem.service.aidl.IRoster;
+import com.beem.project.beem.utils.Status;
/**
* An adapter for smack's ChatManager. This class provides functionnality to handle chats.
@@ -83,15 +91,18 @@
private final ChatListener mChatListener = new ChatListener();
private final RemoteCallbackList<IChatManagerListener> mRemoteChatCreationListeners = new RemoteCallbackList<IChatManagerListener>();
private final BeemService mService;
+ private final ChatRosterListener mChatRosterListn = new ChatRosterListener();
/**
* Constructor.
* @param chatManager the smack ChatManager to adapt
* @param service the service which runs the chat manager
+ * @param roster
*/
- public BeemChatManager(final ChatManager chatManager, final BeemService service) {
+ public BeemChatManager(final ChatManager chatManager, final BeemService service, final Roster roster) {
mService = service;
mAdaptee = chatManager;
+ roster.addRosterListener(mChatRosterListn);
mAdaptee.addChatListener(mChatListener);
}
@@ -325,4 +336,36 @@
}
}
+
+ private class ChatRosterListener implements RosterListener {
+
+ @Override
+ public void entriesAdded(Collection<String> arg0) {
+ }
+
+ @Override
+ public void entriesDeleted(Collection<String> arg0) {
+ }
+
+ @Override
+ public void entriesUpdated(Collection<String> arg0) {
+ }
+
+ @Override
+ public void presenceChanged(Presence presence) {
+ String key = StringUtils.parseBareAddress(presence.getFrom());
+ if (!mChats.containsKey(key)) {
+ return;
+ }
+
+ if (Status.getStatusFromPresence(presence) >= Status.CONTACT_STATUS_DISCONNECT) {
+ try {
+ mChats.get(key).localEndOtrSession();
+ } catch (OtrException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ }
}
--- a/src/com/beem/project/beem/service/ChatAdapter.java Wed Aug 24 23:15:26 2011 +0200
+++ b/src/com/beem/project/beem/service/ChatAdapter.java Sat Nov 05 22:27:58 2011 +0100
@@ -486,9 +486,7 @@
BeemOtrManager.getInstance().verifyRemoteFingerprint(mOtrSessionId);
else
BeemOtrManager.getInstance().unverifyRemoteFingerprint(mOtrSessionId);
-
}
-
}
@Override
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java Wed Aug 24 23:15:26 2011 +0200
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java Sat Nov 05 22:27:58 2011 +0100
@@ -241,9 +241,9 @@
mAdaptee.login(mLogin, mPassword, mResource);
mUserInfo = new UserInfo(mAdaptee.getUser());
- mChatManager = new BeemChatManager(mAdaptee.getChatManager(), mService);
+ mChatManager = new BeemChatManager(mAdaptee.getChatManager(), mService, mAdaptee.getRoster());
//nikita: I commented this line because of the logs provided in http://www.beem-project.com/issues/321
- //Also, since the privacylistmanager isn't finished and used, it will be safer to not initialize it
+ //Also, since the privacylistmanager isn't finished and used, it will be safer to not initialise it
//mPrivacyListManager = new PrivacyListManagerAdapter(PrivacyListManager.getInstanceFor(mAdaptee));
mService.initJingle(mAdaptee);
discoverServerFeatures();
--- a/src/com/beem/project/beem/ui/ChangeStatus.java Wed Aug 24 23:15:26 2011 +0200
+++ b/src/com/beem/project/beem/ui/ChangeStatus.java Sat Nov 05 22:27:58 2011 +0100
@@ -270,7 +270,6 @@
break;
default:
Log.w(TAG, "onActivityResult : invalid request code");
-
}
}