From cb4051c9ffb3dbd5366f2ff4104b83d96d91f2ce Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 24 Oct 2017 17:29:05 +0200 Subject: [PATCH] Keep participants list when navigating between ChatCreation and GroupInfo --- .../linphone/activities/LinphoneActivity.java | 6 +++ .../linphone/chat/ChatCreationFragment.java | 47 ++++++++++++++----- .../org/linphone/chat/ChatListFragment.java | 2 +- .../org/linphone/chat/GroupInfoFragment.java | 4 +- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index 4bbac394b..633ab9335 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -721,6 +721,12 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } } + public void goToChatCreator(ArrayList selectedContacts) { + Bundle extras = new Bundle(); + extras.putSerializable("selectedContacts", selectedContacts); + changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); + } + public void goToChat(String sipUri) { Bundle extras = new Bundle(); extras.putString("SipUri", sipUri); diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index 94d1e33ef..e94cee65d 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -66,7 +66,12 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mInflater = inflater; View view = inflater.inflate(R.layout.chat_create, container, false); - contactsSelected = new ArrayList<>(); + + if (getArguments() != null && getArguments().getSerializable("selectedContacts") != null) { + contactsSelected = (ArrayList) getArguments().getSerializable("selectedContacts"); + } else { + contactsSelected = new ArrayList<>(); + } contactsList = view.findViewById(R.id.contactsList); contactsSelectedLayout = view.findViewById(R.id.contactsSelected); @@ -186,6 +191,14 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen allContacts.setEnabled(onlyDisplayLinphoneContacts); linphoneContacts.setEnabled(!allContacts.isEnabled()); + + if (contactsSelected.size() > 0) { + searchAdapter.setContactsSelectedList(contactsSelected); + for (ContactAddress ca : contactsSelected) { + addSelectedContactAddress(ca); + } + contactsSelectLayout.setVisibility(View.VISIBLE); + } } private void updateList() { @@ -212,6 +225,22 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen return -1; } + private void addSelectedContactAddress(ContactAddress ca) { + View viewContact = LayoutInflater.from(LinphoneActivity.instance()).inflate(R.layout.contact_selected, null); + if (ca.getContact() != null) { + ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getContact().getFullName()); + } else { + ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddress()); + } + View removeContact = viewContact.findViewById(R.id.contactChatDelete); + removeContact.setTag(ca); + removeContact.setOnClickListener(this); + viewContact.setOnClickListener(this); + ca.setView(viewContact); + contactsSelectedLayout.addView(viewContact); + contactsSelectedLayout.invalidate(); + } + private void updateContactsClick(ContactAddress ca, List caSelectedList) { ca.setSelect((getIndexOfCa(ca, caSelectedList) == -1)); if (ca.isSelect()) { @@ -219,19 +248,8 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen csv.setListener(this); csv.setContactName(ca); contactsSelected.add(ca); + addSelectedContactAddress(ca); - View viewContact = LayoutInflater.from(LinphoneActivity.instance()).inflate(R.layout.contact_selected, null); - if (ca.getContact() != null) { - ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getContact().getFullName()); - } else { - ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddress()); - } - View removeContact = viewContact.findViewById(R.id.contactChatDelete); - removeContact.setTag(ca); - removeContact.setOnClickListener(this); - viewContact.setOnClickListener(this); - ca.setView(viewContact); - contactsSelectedLayout.addView(viewContact); } else { contactsSelected.remove(getIndexOfCa(ca, contactsSelected)); contactsSelectedLayout.removeAllViews(); @@ -283,11 +301,14 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen allContactsSelected.setVisibility(View.INVISIBLE); updateList(); } else if (id == R.id.back) { + contactsSelectedLayout.removeAllViews(); LinphoneActivity.instance().popBackStack(); } else if (id == R.id.next) { if (contactsSelected.size() == 1) { + contactsSelectedLayout.removeAllViews(); LinphoneActivity.instance().displayChat(contactsSelected.get(0).getAddress(), "", ""); } else { + contactsSelectedLayout.removeAllViews(); LinphoneActivity.instance().displayChatGroupInfos(contactsSelected, null, false, true); } } else if (id == R.id.clearSearchField) { diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index c99b3b863..a087ca2ef 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -331,7 +331,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte enabledDeleteButton(false); } else if (id == R.id.new_discussion) { - LinphoneActivity.instance().displayChat(null, null, null); + LinphoneActivity.instance().goToChatCreator(null); /*String sipUri = fastNewChat.getText().toString(); if (sipUri.equals("")) { LinphoneActivity.instance().displayContacts(true); diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index 70c35d2c0..794e7509d 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -84,7 +84,7 @@ public class GroupInfoFragment extends Fragment { mBackButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LinphoneActivity.instance().popBackStack(); + LinphoneActivity.instance().goToChatCreator(mParticipants); } }); @@ -106,7 +106,7 @@ public class GroupInfoFragment extends Fragment { if (mIsAlreadyCreatedGroup) { //TODO } else { - LinphoneActivity.instance().popBackStack(); + LinphoneActivity.instance().goToChatCreator(mParticipants); } } });