# HG changeset patch # User Nikita Kozlov # Date 1320528478 -3600 # Node ID 319ce14e48265353356141196db550903e75a6e0 # Parent b659da60d81e4d9201a8f7669cb97aa1dbcb92cd modify otr chat status for already openned chat when the participant goes offline diff -r b659da60d81e -r 319ce14e4826 src/com/beem/project/beem/service/BeemChatManager.java --- 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 mRemoteChatCreationListeners = new RemoteCallbackList(); 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 arg0) { + } + + @Override + public void entriesDeleted(Collection arg0) { + } + + @Override + public void entriesUpdated(Collection 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(); + } + } + } + + } } diff -r b659da60d81e -r 319ce14e4826 src/com/beem/project/beem/service/ChatAdapter.java --- 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 diff -r b659da60d81e -r 319ce14e4826 src/com/beem/project/beem/service/XmppConnectionAdapter.java --- 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(); diff -r b659da60d81e -r 319ce14e4826 src/com/beem/project/beem/ui/ChangeStatus.java --- 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"); - } }