diff --git a/res/layout/history_detail.xml b/res/layout/history_detail.xml index d51fbb95b..d848ae759 100644 --- a/res/layout/history_detail.xml +++ b/res/layout/history_detail.xml @@ -1,173 +1,184 @@ - + android:layout_height="match_parent"> - + - + - + - + - - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + - - \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/src/android/org/linphone/fragments/HistoryDetailFragment.java index cc0e3ab88..2b84b187d 100644 --- a/src/android/org/linphone/fragments/HistoryDetailFragment.java +++ b/src/android/org/linphone/fragments/HistoryDetailFragment.java @@ -27,15 +27,21 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; +import org.linphone.LinphoneManager; import org.linphone.contacts.ContactsManager; import org.linphone.contacts.LinphoneContact; import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.activities.LinphoneActivity; import org.linphone.core.Address; +import org.linphone.core.ChatRoom; +import org.linphone.core.ChatRoomListenerStub; +import org.linphone.core.Core; import org.linphone.core.Factory; +import org.linphone.mediastream.Log; public class HistoryDetailFragment extends Fragment implements OnClickListener { private ImageView dialBack, chat, addToContacts, goToContact, back; @@ -43,6 +49,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { private ImageView contactPicture, callDirection; private TextView contactName, contactAddress, time, date; private String sipUri, displayName, pictureUri; + private RelativeLayout mWaitLayout; private LinphoneContact contact; @Override @@ -57,6 +64,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { view = inflater.inflate(R.layout.history_detail, container, false); + mWaitLayout = view.findViewById(R.id.waitScreen); + mWaitLayout.setVisibility(View.GONE); + dialBack = (ImageView) view.findViewById(R.id.call); dialBack.setOnClickListener(this); @@ -159,12 +169,32 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { } if (id == R.id.call) { LinphoneActivity.instance().setAddresGoToDialerAndCall(sipUri, displayName, pictureUri == null ? null : Uri.parse(pictureUri)); } else if (id == R.id.chat) { - LinphoneActivity.instance().displayChat(sipUri, null, null); + Core lc = LinphoneManager.getLc(); + Address participant = Factory.instance().createAddress(sipUri); + ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant); + if (room != null) { + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + } else { + mWaitLayout.setVisibility(View.VISIBLE); + ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); + chatRoom.setListener(new ChatRoomListenerStub() { + @Override + public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { + if (newState == ChatRoom.State.Created) { + mWaitLayout.setVisibility(View.GONE); + LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); + } else if (newState == ChatRoom.State.CreationFailed) { + mWaitLayout.setVisibility(View.GONE); + LinphoneActivity.instance().displayChatRoomError(); + Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !"); + } + } + }); + chatRoom.addParticipant(participant); + } } else if (id == R.id.add_contact) { - String uri = sipUri; - Address addr = null; - addr = Factory.instance().createAddress(sipUri); - uri = addr.asStringUriOnly(); + Address addr = Factory.instance().createAddress(sipUri); + String uri = addr.asStringUriOnly(); if (addr != null && addr.getDisplayName() != null) LinphoneActivity.instance().displayContactsForEdition(addr.asStringUriOnly(), addr.getDisplayName()); else