From 1a42eb7802bec249886de23e5fed1934951ed97b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 13 Feb 2019 15:48:43 +0100 Subject: [PATCH] Go to the correct basic chat room if you have multiple with the same remote address but different local addresses --- .../java/org/linphone/LinphoneActivity.java | 70 ++++++++++++------- .../linphone/LinphoneLauncherActivity.java | 4 +- .../java/org/linphone/LinphoneManager.java | 13 ++-- .../linphone/chat/ChatMessagesFragment.java | 36 ++++++---- .../chat/ChatRoomCreationFragment.java | 19 +++-- .../org/linphone/chat/ChatRoomsFragment.java | 12 +++- .../org/linphone/chat/DevicesFragment.java | 10 +-- .../org/linphone/chat/GroupInfoFragment.java | 12 +++- .../java/org/linphone/chat/ImdnFragment.java | 12 ++-- .../org/linphone/chat/ImdnOldFragment.java | 12 ++-- .../contacts/ContactDetailsFragment.java | 14 +++- .../history/HistoryDetailFragment.java | 16 ++++- .../NotificationBroadcastReceiver.java | 2 +- .../notifications/NotificationsManager.java | 2 + 14 files changed, 160 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index d9f9382c1..2e0a8196e 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -701,7 +701,8 @@ public class LinphoneActivity extends LinphoneGenericActivity } private void displayChat( - String sipUri, + String localSipUri, + String remoteSipUri, String message, String fileUri, String pictureUri, @@ -709,17 +710,18 @@ public class LinphoneActivity extends LinphoneGenericActivity String displayName, Address lAddress) { Bundle extras = new Bundle(); - extras.putString("SipUri", sipUri); + extras.putString("LocalSipUri", localSipUri); + extras.putString("RemoteSipUri", remoteSipUri); if (message != null) extras.putString("messageDraft", message); if (fileUri != null) extras.putString("fileSharedUri", fileUri); - if (sipUri != null && lAddress.getDisplayName() != null) { + if (remoteSipUri != null && lAddress.getDisplayName() != null) { extras.putString("DisplayName", displayName); extras.putString("PictureUri", pictureUri); extras.putString("ThumbnailUri", thumbnailUri); } - if (sipUri == null) { + if (remoteSipUri == null) { changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); } else { changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); @@ -755,9 +757,10 @@ public class LinphoneActivity extends LinphoneGenericActivity changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); } - public void goToChat(String sipUri, Bundle shareInfos) { + public void goToChat(String localSipUri, String remoteSipUri, Bundle shareInfos) { Bundle extras = new Bundle(); - extras.putString("SipUri", sipUri); + extras.putString("LocalSipUri", localSipUri); + extras.putString("RemoteSipUri", remoteSipUri); if (shareInfos != null) { if (shareInfos.getString("fileSharedUri") != null) @@ -773,7 +776,7 @@ public class LinphoneActivity extends LinphoneGenericActivity && mCurrentFragment == FragmentsAvailable.GROUP_CHAT && !mEmptyFragment) { ChatMessagesFragment chatFragment = (ChatMessagesFragment) fragment2; - chatFragment.changeDisplayedChat(sipUri); + chatFragment.changeDisplayedChat(localSipUri, remoteSipUri); } else { changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); } @@ -781,7 +784,7 @@ public class LinphoneActivity extends LinphoneGenericActivity changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); } - LinphoneManager.getInstance().updateUnreadCountForChatRoom(sipUri, 0); + LinphoneManager.getInstance().updateUnreadCountForChatRoom(localSipUri, remoteSipUri, 0); displayMissedChats(LinphoneManager.getInstance().getUnreadMessageCount()); } @@ -814,15 +817,18 @@ public class LinphoneActivity extends LinphoneGenericActivity changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras); } - public void goToContactDevicesInfos(String sipUri) { + public void goToContactDevicesInfos(String localSipUri, String remoteSipUri) { Bundle extras = new Bundle(); - extras.putSerializable("SipUri", sipUri); + extras.putSerializable("LocalSipUri", localSipUri); + extras.putSerializable("RemoteSipUri", remoteSipUri); changeCurrentFragment(FragmentsAvailable.CONTACT_DEVICES, extras); } - public void goToChatMessageImdnInfos(String sipUri, String messageId) { + public void goToChatMessageImdnInfos( + String localSipUri, String remoteSipUri, String messageId) { Bundle extras = new Bundle(); - extras.putSerializable("SipUri", sipUri); + extras.putSerializable("LocalSipUri", localSipUri); + extras.putSerializable("RemoteSipUri", remoteSipUri); extras.putString("MessageId", messageId); changeCurrentFragment(FragmentsAvailable.MESSAGE_IMDN, extras); } @@ -831,7 +837,8 @@ public class LinphoneActivity extends LinphoneGenericActivity changeCurrentFragment(FragmentsAvailable.CHAT_LIST, null); } - public void displayChat(String sipUri, String message, String fileUri) { + public void displayChat( + String localSipUri, String remoteSipUri, String message, String fileUri) { if (getResources().getBoolean(R.bool.disable_chat)) { return; } @@ -841,8 +848,8 @@ public class LinphoneActivity extends LinphoneGenericActivity String displayName = null; Address lAddress = null; - if (sipUri != null) { - lAddress = LinphoneManager.getLc().interpretUrl(sipUri); + if (remoteSipUri != null) { + lAddress = LinphoneManager.getLc().interpretUrl(remoteSipUri); if (lAddress == null) return; LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(lAddress); @@ -862,21 +869,35 @@ public class LinphoneActivity extends LinphoneGenericActivity && mCurrentFragment == FragmentsAvailable.GROUP_CHAT && !mEmptyFragment) { ChatMessagesFragment chatFragment = (ChatMessagesFragment) fragment2; - chatFragment.changeDisplayedChat(sipUri); + chatFragment.changeDisplayedChat(localSipUri, remoteSipUri); } else { displayChat( - sipUri, message, fileUri, pictureUri, thumbnailUri, displayName, lAddress); + localSipUri, + remoteSipUri, + message, + fileUri, + pictureUri, + thumbnailUri, + displayName, + lAddress); } } else { if (isTablet()) { changeCurrentFragment(FragmentsAvailable.CHAT_LIST, null); } else { displayChat( - sipUri, message, fileUri, pictureUri, thumbnailUri, displayName, lAddress); + localSipUri, + remoteSipUri, + message, + fileUri, + pictureUri, + thumbnailUri, + displayName, + lAddress); } } - LinphoneManager.getInstance().updateUnreadCountForChatRoom(sipUri, 0); + LinphoneManager.getInstance().updateUnreadCountForChatRoom(localSipUri, remoteSipUri, 0); displayMissedChats(LinphoneManager.getInstance().getUnreadMessageCount()); } @@ -1536,12 +1557,12 @@ public class LinphoneActivity extends LinphoneGenericActivity Intent intent = getIntent(); if (intent.getStringExtra("msgShared") != null) { - displayChat(null, intent.getStringExtra("msgShared"), null); + displayChat(null, null, intent.getStringExtra("msgShared"), null); intent.putExtra("msgShared", ""); } if (intent.getStringExtra("fileShared") != null && !intent.getStringExtra("fileShared").equals("")) { - displayChat(null, null, intent.getStringExtra("fileShared")); + displayChat(null, null, null, intent.getStringExtra("fileShared")); intent.putExtra("fileShared", ""); } mIsOnBackground = false; @@ -1592,12 +1613,13 @@ public class LinphoneActivity extends LinphoneGenericActivity } Bundle extras = intent.getExtras(); if (extras != null && extras.getBoolean("GoToChat", false)) { - String sipUri = extras.getString("ChatContactSipUri"); + String localSipUri = extras.getString("LocalSipUri"); + String remoteSipUri = extras.getString("ChatContactSipUri"); intent.putExtra("DoNotGoToCallActivity", true); - if (sipUri == null) { + if (remoteSipUri == null) { goToChatList(); } else { - goToChat(sipUri, extras); + goToChat(localSipUri, remoteSipUri, extras); } } else if (extras != null && extras.getBoolean("GoToHistory", false)) { intent.putExtra("DoNotGoToCallActivity", true); diff --git a/app/src/main/java/org/linphone/LinphoneLauncherActivity.java b/app/src/main/java/org/linphone/LinphoneLauncherActivity.java index 6408a9e5d..a1eecc243 100644 --- a/app/src/main/java/org/linphone/LinphoneLauncherActivity.java +++ b/app/src/main/java/org/linphone/LinphoneLauncherActivity.java @@ -165,10 +165,10 @@ public class LinphoneLauncherActivity extends Activity { && (stringFileShared != null || fileUri != null)) { if (stringFileShared != null) { LinphoneActivity.instance() - .displayChat(null, stringFileShared, null); + .displayChat(null, null, stringFileShared, null); } else if (fileUri != null) { LinphoneActivity.instance() - .displayChat(null, null, stringUriFileShared); + .displayChat(null, null, null, stringUriFileShared); } } } diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 9ba43339f..b9ba716a4 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -1938,17 +1938,22 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou return count; } - public void updateUnreadCountForChatRoom(String key, Integer value) { + public void updateUnreadCountForChatRoom( + String localSipUri, String remoteSipUri, Integer value) { + String key = localSipUri + "//" + remoteSipUri; mUnreadChatsPerRoom.put(key, value); } public void updateUnreadCountForChatRoom(ChatRoom cr, Integer value) { - String key = cr.getPeerAddress().asStringUriOnly(); - updateUnreadCountForChatRoom(key, value); + String localSipUri = cr.getLocalAddress().asStringUriOnly(); + String remoteSipUri = cr.getPeerAddress().asStringUriOnly(); + updateUnreadCountForChatRoom(localSipUri, remoteSipUri, value); } private void increaseUnreadCountForChatRoom(ChatRoom cr) { - String key = cr.getPeerAddress().asStringUriOnly(); + String localSipUri = cr.getLocalAddress().asStringUriOnly(); + String remoteSipUri = cr.getPeerAddress().asStringUriOnly(); + String key = localSipUri + "//" + remoteSipUri; if (mUnreadChatsPerRoom.containsKey(key)) { mUnreadChatsPerRoom.put(key, mUnreadChatsPerRoom.get(key) + 1); } else { diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java index 7a58ed243..d006162c4 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java @@ -113,8 +113,8 @@ public class ChatMessagesFragment extends Fragment private Uri mImageToUploadUri; private ChatMessagesAdapter mEventsAdapter; private ChatMessagesOldAdapter mOldEventsAdapter; - private String mRemoteSipUri; - private Address mRemoteSipAddress, mRemoteParticipantAddress; + private String mLocalSipUri, mRemoteSipUri; + private Address mLocalSipAddress, mRemoteSipAddress, mRemoteParticipantAddress; private ChatRoom mChatRoom; private ArrayList mParticipants; private LinearLayoutManager layoutManager; @@ -131,8 +131,12 @@ public class ChatMessagesFragment extends Fragment setRetainInstance(true); if (getArguments() != null) { - if (getArguments().getString("SipUri") != null) { - mRemoteSipUri = getArguments().getString("SipUri"); + if (getArguments().getString("LocalSipUri") != null) { + mLocalSipUri = getArguments().getString("LocalSipUri"); + mLocalSipAddress = LinphoneManager.getLc().createAddress(mLocalSipUri); + } + if (getArguments().getString("RemoteSipUri") != null) { + mRemoteSipUri = getArguments().getString("RemoteSipUri"); mRemoteSipAddress = LinphoneManager.getLc().createAddress(mRemoteSipUri); } } @@ -166,7 +170,7 @@ public class ChatMessagesFragment extends Fragment CallManager.getInstance().inviteAddress(device.getAddress()); } else { LinphoneActivity.instance() - .goToContactDevicesInfos(getRemoteSipUri()); + .goToContactDevicesInfos(mLocalSipUri, mRemoteSipUri); } } } @@ -368,8 +372,10 @@ public class ChatMessagesFragment extends Fragment LinphoneManager.getInstance().setCurrentChatRoomAddress(mRemoteSipAddress); } - public void changeDisplayedChat(String sipUri) { - mRemoteSipUri = sipUri; + public void changeDisplayedChat(String localSipUri, String remoteSipUri) { + mLocalSipUri = localSipUri; + mLocalSipAddress = LinphoneManager.getLc().createAddress(mLocalSipUri); + mRemoteSipUri = remoteSipUri; mRemoteSipAddress = LinphoneManager.getLc().createAddress(mRemoteSipUri); initChatRoom(); @@ -539,7 +545,8 @@ public class ChatMessagesFragment extends Fragment return true; } if (item.getItemId() == R.id.imdn_infos) { - LinphoneActivity.instance().goToChatMessageImdnInfos(getRemoteSipUri(), messageId); + LinphoneActivity.instance() + .goToChatMessageImdnInfos(mLocalSipUri, mRemoteSipUri, messageId); return true; } if (item.getItemId() == R.id.copy_text) { @@ -708,7 +715,11 @@ public class ChatMessagesFragment extends Fragment return; } - mChatRoom = core.getChatRoomFromUri(mRemoteSipAddress.asStringUriOnly()); + if (mLocalSipAddress != null) { + mChatRoom = core.getChatRoom(mRemoteSipAddress, mLocalSipAddress); + } else { + mChatRoom = core.getChatRoomFromUri(mRemoteSipAddress.asStringUriOnly()); + } mChatRoom.addListener(this); mChatRoom.markAsRead(); LinphoneManager.getInstance().updateUnreadCountForChatRoom(mChatRoom, 0); @@ -864,7 +875,8 @@ public class ChatMessagesFragment extends Fragment mChatRoom.getParticipants()[0].getDevices()[0]; CallManager.getInstance().inviteAddress(device.getAddress()); } else { - LinphoneActivity.instance().goToContactDevicesInfos(getRemoteSipUri()); + LinphoneActivity.instance() + .goToContactDevicesInfos(mLocalSipUri, mRemoteSipUri); } dialog.dismiss(); @@ -888,10 +900,6 @@ public class ChatMessagesFragment extends Fragment mChatEventsList.getLayoutManager().scrollToPosition(0); } - private String getRemoteSipUri() { - return mRemoteSipUri; - } - @Override public void onItemClicked(int position) { if (mSelectionHelper.getAdapter().isEditionEnabled()) { diff --git a/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java b/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java index fb6abb0e3..ae0ea3e66 100644 --- a/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java @@ -237,7 +237,10 @@ public class ChatRoomCreationFragment extends Fragment if (newState == ChatRoom.State.Created) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance() - .goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos); + .goToChat( + cr.getLocalAddress().asStringUriOnly(), + cr.getPeerAddress().asStringUriOnly(), + mShareInfos); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); @@ -548,7 +551,10 @@ public class ChatRoomCreationFragment extends Fragment mChatRoom = lc.findOneToOneChatRoom(lpc.getIdentityAddress(), address, true); if (mChatRoom != null) { LinphoneActivity.instance() - .goToChat(mChatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); + .goToChat( + mChatRoom.getLocalAddress().asStringUriOnly(), + mChatRoom.getPeerAddress().asStringUriOnly(), + mShareInfos); } else { mChatRoom = lc.createClientGroupChatRoom( @@ -577,12 +583,17 @@ public class ChatRoomCreationFragment extends Fragment } else { LinphoneActivity.instance() .goToChat( - mChatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); + mChatRoom.getLocalAddress().asStringUriOnly(), + mChatRoom.getPeerAddress().asStringUriOnly(), + mShareInfos); } } else { ChatRoom chatRoom = lc.getChatRoom(address); LinphoneActivity.instance() - .goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); + .goToChat( + chatRoom.getLocalAddress().asStringUriOnly(), + chatRoom.getPeerAddress().asStringUriOnly(), + mShareInfos); } } } else { diff --git a/app/src/main/java/org/linphone/chat/ChatRoomsFragment.java b/app/src/main/java/org/linphone/chat/ChatRoomsFragment.java index f6cdfa385..cc6a3a020 100644 --- a/app/src/main/java/org/linphone/chat/ChatRoomsFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatRoomsFragment.java @@ -182,7 +182,11 @@ public class ChatRoomsFragment extends Fragment mChatRoomsAdapter.toggleSelection(position); } else { ChatRoom room = (ChatRoom) mChatRoomsAdapter.getItem(position); - LinphoneActivity.instance().goToChat(room.getPeerAddress().asString(), null); + LinphoneActivity.instance() + .goToChat( + room.getLocalAddress().asStringUriOnly(), + room.getPeerAddress().asString(), + null); } } @@ -205,7 +209,11 @@ public class ChatRoomsFragment extends Fragment ChatRoomsAdapter adapter = (ChatRoomsAdapter) mChatRoomsList.getAdapter(); if (adapter != null && adapter.getItemCount() > 0) { ChatRoom room = (ChatRoom) adapter.getItem(0); - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); + LinphoneActivity.instance() + .goToChat( + room.getLocalAddress().asStringUriOnly(), + room.getPeerAddress().asStringUriOnly(), + null); } else { LinphoneActivity.instance().displayEmptyFragment(); } diff --git a/app/src/main/java/org/linphone/chat/DevicesFragment.java b/app/src/main/java/org/linphone/chat/DevicesFragment.java index 64b4cb90c..e93aff308 100644 --- a/app/src/main/java/org/linphone/chat/DevicesFragment.java +++ b/app/src/main/java/org/linphone/chat/DevicesFragment.java @@ -50,8 +50,8 @@ public class DevicesFragment extends Fragment { private ExpandableListView mExpandableList; private DevicesAdapter mAdapter; - private String mRoomUri; - private Address mRoomAddr; + private String mLocalSipUri, mRoomUri; + private Address mLocalSipAddr, mRoomAddr; private ChatRoom mRoom; private boolean mOnlyDisplayChilds; @@ -62,7 +62,9 @@ public class DevicesFragment extends Fragment { super.onCreate(savedInstanceState); if (getArguments() != null) { - mRoomUri = getArguments().getString("SipUri"); + mLocalSipUri = getArguments().getString("LocalSipUri"); + mLocalSipAddr = LinphoneManager.getLc().createAddress(mLocalSipUri); + mRoomUri = getArguments().getString("RemoteSipUri"); mRoomAddr = LinphoneManager.getLc().createAddress(mRoomUri); } @@ -117,7 +119,7 @@ public class DevicesFragment extends Fragment { @Override public void onClick(View view) { if (LinphoneActivity.instance().isTablet()) { - LinphoneActivity.instance().goToChat(mRoomUri, null); + LinphoneActivity.instance().goToChat(mLocalSipUri, mRoomUri, null); } else { LinphoneActivity.instance().onBackPressed(); } diff --git a/app/src/main/java/org/linphone/chat/GroupInfoFragment.java b/app/src/main/java/org/linphone/chat/GroupInfoFragment.java index 6c0baff35..348b5a83b 100644 --- a/app/src/main/java/org/linphone/chat/GroupInfoFragment.java +++ b/app/src/main/java/org/linphone/chat/GroupInfoFragment.java @@ -159,6 +159,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { if (LinphoneActivity.instance().isTablet()) { LinphoneActivity.instance() .goToChat( + null, mGroupChatRoomAddress.asStringUriOnly(), mShareInfos); } else { @@ -200,7 +201,9 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { mChatRoom.leave(); LinphoneActivity.instance() .goToChat( - mGroupChatRoomAddress.asString(), null); + null, + mGroupChatRoomAddress.asString(), + null); } else { Log.e( "Can't leave, chatRoom for address " @@ -297,7 +300,10 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { getFragmentManager().popBackStack(); getFragmentManager().popBackStack(); LinphoneActivity.instance() - .goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos); + .goToChat( + cr.getLocalAddress().asStringUriOnly(), + cr.getPeerAddress().asStringUriOnly(), + mShareInfos); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); @@ -378,7 +384,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { mChatRoom.addParticipants(participantsToAdd); LinphoneActivity.instance() - .goToChat(mGroupChatRoomAddress.asString(), null); + .goToChat(null, mGroupChatRoomAddress.asString(), null); } } }); diff --git a/app/src/main/java/org/linphone/chat/ImdnFragment.java b/app/src/main/java/org/linphone/chat/ImdnFragment.java index 216970ccf..59baa62f1 100644 --- a/app/src/main/java/org/linphone/chat/ImdnFragment.java +++ b/app/src/main/java/org/linphone/chat/ImdnFragment.java @@ -57,8 +57,8 @@ public class ImdnFragment extends Fragment { private ChatMessageViewHolder mBubble; private ViewGroup mContainer; - private String mRoomUri, mMessageId; - private Address mRoomAddr; + private String mLocalSipuri, mRoomUri, mMessageId; + private Address mLocalSipAddr, mRoomAddr; private ChatRoom mRoom; private ChatMessage mMessage; private ChatMessageListenerStub mListener; @@ -70,13 +70,15 @@ public class ImdnFragment extends Fragment { super.onCreate(savedInstanceState); if (getArguments() != null) { - mRoomUri = getArguments().getString("SipUri"); + mLocalSipuri = getArguments().getString("LocalSipUri"); + mLocalSipAddr = LinphoneManager.getLc().createAddress(mLocalSipuri); + mRoomUri = getArguments().getString("RemoteSipUri"); mRoomAddr = LinphoneManager.getLc().createAddress(mRoomUri); mMessageId = getArguments().getString("MessageId"); } Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - mRoom = core.getChatRoomFromUri(mRoomAddr.asStringUriOnly()); + mRoom = core.getChatRoom(mRoomAddr, mLocalSipAddr); mInflater = inflater; mContainer = container; @@ -88,7 +90,7 @@ public class ImdnFragment extends Fragment { @Override public void onClick(View view) { if (LinphoneActivity.instance().isTablet()) { - LinphoneActivity.instance().goToChat(mRoomUri, null); + LinphoneActivity.instance().goToChat(mLocalSipuri, mRoomUri, null); } else { LinphoneActivity.instance().onBackPressed(); } diff --git a/app/src/main/java/org/linphone/chat/ImdnOldFragment.java b/app/src/main/java/org/linphone/chat/ImdnOldFragment.java index f1b296924..92c875c96 100644 --- a/app/src/main/java/org/linphone/chat/ImdnOldFragment.java +++ b/app/src/main/java/org/linphone/chat/ImdnOldFragment.java @@ -62,8 +62,8 @@ public class ImdnOldFragment extends Fragment { private ChatMessageOldViewHolder mBubble; private ViewGroup mContainer; - private String mRoomUri, mMessageId; - private Address mRoomAddr; + private String mLocalSipUri, mRoomUri, mMessageId; + private Address mLocalAddr, mRoomAddr; private ChatRoom mRoom; private ChatMessage mMessage; private ChatMessageListenerStub mListener; @@ -75,13 +75,15 @@ public class ImdnOldFragment extends Fragment { super.onCreate(savedInstanceState); if (getArguments() != null) { - mRoomUri = getArguments().getString("SipUri"); + mLocalSipUri = getArguments().getString("LocalSipUri"); + mLocalAddr = LinphoneManager.getLc().createAddress(mLocalSipUri); + mRoomUri = getArguments().getString("RemoteSipUri"); mRoomAddr = LinphoneManager.getLc().createAddress(mRoomUri); mMessageId = getArguments().getString("MessageId"); } Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - mRoom = core.getChatRoomFromUri(mRoomAddr.asStringUriOnly()); + mRoom = core.getChatRoom(mRoomAddr, mLocalAddr); mInflater = inflater; mContainer = container; @@ -93,7 +95,7 @@ public class ImdnOldFragment extends Fragment { @Override public void onClick(View view) { if (LinphoneActivity.instance().isTablet()) { - LinphoneActivity.instance().goToChat(mRoomUri, null); + LinphoneActivity.instance().goToChat(mLocalSipUri, mRoomUri, null); } else { LinphoneActivity.instance().onBackPressed(); } diff --git a/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java b/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java index f19ab8bd1..af06657b4 100644 --- a/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java +++ b/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java @@ -95,7 +95,10 @@ public class ContactDetailsFragment extends Fragment isSecured); if (room != null) { LinphoneActivity.instance() - .goToChat(room.getPeerAddress().asStringUriOnly(), null); + .goToChat( + room.getLocalAddress().asStringUriOnly(), + room.getPeerAddress().asStringUriOnly(), + null); } else { if (defaultProxyConfig.getConferenceFactoryUri() != null && (isSecured @@ -115,7 +118,9 @@ public class ContactDetailsFragment extends Fragment room = lc.getChatRoom(participant); LinphoneActivity.instance() .goToChat( - room.getPeerAddress().asStringUriOnly(), null); + room.getLocalAddress().asStringUriOnly(), + room.getPeerAddress().asStringUriOnly(), + null); } } } @@ -166,7 +171,10 @@ public class ContactDetailsFragment extends Fragment if (newState == ChatRoom.State.Created) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance() - .goToChat(cr.getPeerAddress().asStringUriOnly(), null); + .goToChat( + cr.getLocalAddress().asStringUriOnly(), + cr.getPeerAddress().asStringUriOnly(), + null); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); diff --git a/app/src/main/java/org/linphone/history/HistoryDetailFragment.java b/app/src/main/java/org/linphone/history/HistoryDetailFragment.java index a89624a44..e6d85ea6e 100644 --- a/app/src/main/java/org/linphone/history/HistoryDetailFragment.java +++ b/app/src/main/java/org/linphone/history/HistoryDetailFragment.java @@ -110,7 +110,10 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { if (newState == ChatRoom.State.Created) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance() - .goToChat(cr.getPeerAddress().asStringUriOnly(), null); + .goToChat( + cr.getLocalAddress().asStringUriOnly(), + cr.getPeerAddress().asStringUriOnly(), + null); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); @@ -217,7 +220,11 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { lc.findOneToOneChatRoom( lc.getDefaultProxyConfig().getContact(), participant, false); if (room != null) { - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); + LinphoneActivity.instance() + .goToChat( + room.getLocalAddress().asStringUriOnly(), + room.getPeerAddress().asStringUriOnly(), + null); } else { ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null @@ -232,7 +239,10 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { } else { room = lc.getChatRoom(participant); LinphoneActivity.instance() - .goToChat(room.getPeerAddress().asStringUriOnly(), null); + .goToChat( + room.getLocalAddress().asStringUriOnly(), + room.getPeerAddress().asStringUriOnly(), + null); } } } else if (id == R.id.add_contact) { diff --git a/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.java b/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.java index 36d759b91..713ecbf57 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.java +++ b/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.java @@ -76,7 +76,7 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver { return; } - ChatRoom room = core.findChatRoom(remoteAddr, localAddr); + ChatRoom room = core.getChatRoom(remoteAddr, localAddr); if (room == null) { Log.e( "[Notification Broadcast Receiver] Couldn't find chat room for remote address " diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.java b/app/src/main/java/org/linphone/notifications/NotificationsManager.java index b243f1e27..2e678b194 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.java +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.java @@ -154,6 +154,7 @@ public class NotificationsManager { Intent notifIntent = new Intent(mContext, LinphoneActivity.class); notifIntent.putExtra("GoToChat", true); notifIntent.putExtra("ChatContactSipUri", conferenceAddress); + notifIntent.putExtra("LocalSipUri", localIdentity.asStringUriOnly()); PendingIntent pendingIntent = PendingIntent.getActivity( mContext, 0, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT); @@ -200,6 +201,7 @@ public class NotificationsManager { Intent notifIntent = new Intent(mContext, LinphoneActivity.class); notifIntent.putExtra("GoToChat", true); notifIntent.putExtra("ChatContactSipUri", fromSipUri); + notifIntent.putExtra("LocalSipUri", localIdentity.asStringUriOnly()); PendingIntent pendingIntent = PendingIntent.getActivity( mContext, 0, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT);