Started group chat room features like subject change and leave

This commit is contained in:
Sylvain Berfini 2017-11-09 15:28:18 +01:00
parent b3382daf26
commit 7f5c586489
4 changed files with 57 additions and 12 deletions

View file

@ -730,9 +730,9 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
} }
public void goToChatGroupInfos(ArrayList<ContactAddress> contacts, String subject, boolean isAlreadyCreatedGroup, boolean isEditionEnabled) { public void goToChatGroupInfos(String address, ArrayList<ContactAddress> contacts, String subject, boolean isEditionEnabled) {
Bundle extras = new Bundle(); Bundle extras = new Bundle();
extras.putBoolean("isAlreadyCreatedGroup", isAlreadyCreatedGroup); extras.putString("groupChatRoomAddress", address);
extras.putBoolean("isEditionEnabled", isEditionEnabled); extras.putBoolean("isEditionEnabled", isEditionEnabled);
extras.putSerializable("ContactAddress", contacts); extras.putSerializable("ContactAddress", contacts);
extras.putString("subject", subject); extras.putString("subject", subject);

View file

@ -310,7 +310,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
chatRoom.addParticipants(addresses); chatRoom.addParticipants(addresses);
} else { } else {
contactsSelectedLayout.removeAllViews(); contactsSelectedLayout.removeAllViews();
LinphoneActivity.instance().goToChatGroupInfos(contactsSelected, null, false, true); LinphoneActivity.instance().goToChatGroupInfos(null, contactsSelected, null, true);
} }
} else if (id == R.id.clearSearchField) { } else if (id == R.id.clearSearchField) {
searchField.setText(""); searchField.setText("");

View file

@ -64,6 +64,7 @@ import org.linphone.core.Core;
import org.linphone.core.EventLog; import org.linphone.core.EventLog;
import org.linphone.core.Factory; import org.linphone.core.Factory;
import org.linphone.core.Participant; import org.linphone.core.Participant;
import org.linphone.mediastream.Log;
import org.linphone.receivers.ContactsUpdatedListener; import org.linphone.receivers.ContactsUpdatedListener;
import java.io.File; import java.io.File;
@ -84,6 +85,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
private ListView mChatEventsList; private ListView mChatEventsList;
private LinearLayout mFilesUploadLayout; private LinearLayout mFilesUploadLayout;
private LinearLayout mTopBar, mEditTopBar; private LinearLayout mTopBar, mEditTopBar;
private boolean mIsReadOnly;
private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener; private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener;
private Uri mImageToUploadUri; private Uri mImageToUploadUri;
@ -151,7 +153,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
ContactAddress ca = new ContactAddress(c, a.asString(), c.isFriend()); ContactAddress ca = new ContactAddress(c, a.asString(), c.isFriend());
participants.add(ca); participants.add(ca);
} }
LinphoneActivity.instance().goToChatGroupInfos(participants, mChatRoom.getSubject(), true, mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false); LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(), mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false);
} }
}); });
@ -408,6 +410,12 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
* View initialization * View initialization
*/ */
private void setReadOnly() {
mMessageTextToSend.setEnabled(false);
mAttachImageButton.setEnabled(false);
mSendMessageButton.setEnabled(false);
}
private void getContactsForParticipants() { private void getContactsForParticipants() {
mParticipants = new ArrayList<>(); mParticipants = new ArrayList<>();
if (!mChatRoom.canHandleParticipants() || (mChatRoom.getNbParticipants() == 1 && getString(R.string.dummy_group_chat_subject).equals(mChatRoom.getSubject()))) { if (!mChatRoom.canHandleParticipants() || (mChatRoom.getNbParticipants() == 1 && getString(R.string.dummy_group_chat_subject).equals(mChatRoom.getSubject()))) {
@ -455,6 +463,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
mRemoteParticipantAddress = mChatRoom.getParticipants()[0].getAddress(); mRemoteParticipantAddress = mChatRoom.getParticipants()[0].getAddress();
} }
mIsReadOnly = mChatRoom.getState() == ChatRoom.State.Terminated;
getContactsForParticipants(); getContactsForParticipants();
} }
@ -485,9 +495,12 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
mGroupInfosButton.setVisibility(View.VISIBLE); mGroupInfosButton.setVisibility(View.VISIBLE);
mRoomLabel.setText(mChatRoom.getSubject()); mRoomLabel.setText(mChatRoom.getSubject());
mParticipantsLabel.setVisibility(View.VISIBLE); mParticipantsLabel.setVisibility(View.VISIBLE);
} }
} }
if (mIsReadOnly) {
setReadOnly();
}
} }
private void displayChatRoomHistory() { private void displayChatRoomHistory() {
@ -807,7 +820,10 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
@Override @Override
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
mIsReadOnly = mChatRoom.getState() == ChatRoom.State.Terminated;
if (mIsReadOnly) {
setReadOnly();
}
} }
@Override @Override

View file

@ -46,6 +46,7 @@ import java.util.ArrayList;
public class GroupInfoFragment extends Fragment { public class GroupInfoFragment extends Fragment {
private ImageView mBackButton, mConfirmButton, mAddParticipantsButton; private ImageView mBackButton, mConfirmButton, mAddParticipantsButton;
private Address mGroupChatRoomAddress;
private EditText mSubjectField; private EditText mSubjectField;
private LayoutInflater mInflater; private LayoutInflater mInflater;
private ListView mParticipantsList; private ListView mParticipantsList;
@ -55,6 +56,8 @@ public class GroupInfoFragment extends Fragment {
private boolean mIsAlreadyCreatedGroup; private boolean mIsAlreadyCreatedGroup;
private boolean mIsEditionEnabled; private boolean mIsEditionEnabled;
private ArrayList<ContactAddress> mParticipants; private ArrayList<ContactAddress> mParticipants;
private String mSubject;
private ChatRoom mChatRoom;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -65,9 +68,26 @@ public class GroupInfoFragment extends Fragment {
return null; return null;
} }
mParticipants = (ArrayList<ContactAddress>) getArguments().getSerializable("ContactAddress"); mParticipants = (ArrayList<ContactAddress>) getArguments().getSerializable("ContactAddress");
mIsAlreadyCreatedGroup = getArguments().getBoolean("isAlreadyCreatedGroup");
mGroupChatRoomAddress = null;
mChatRoom = null;
String address = getArguments().getString("groupChatRoomAddress");
if (address != null && address.length() > 0) {
mGroupChatRoomAddress = LinphoneManager.getLc().createAddress(address);
}
mIsAlreadyCreatedGroup = mGroupChatRoomAddress != null;
if (mIsAlreadyCreatedGroup) {
mChatRoom = LinphoneManager.getLc().getChatRoom(mGroupChatRoomAddress);
}
if (mChatRoom == null) mIsAlreadyCreatedGroup = false;
mIsEditionEnabled = getArguments().getBoolean("isEditionEnabled"); mIsEditionEnabled = getArguments().getBoolean("isEditionEnabled");
String subject = getArguments().getString("subject"); mSubject = getArguments().getString("subject");
if (mChatRoom != null && mChatRoom.getState() == ChatRoom.State.Terminated) {
mIsEditionEnabled = false;
}
mParticipantsList = view.findViewById(R.id.chat_room_participants); mParticipantsList = view.findViewById(R.id.chat_room_participants);
mAdapter = new GroupInfoAdapter(mInflater, mParticipants, !mIsEditionEnabled, !mIsAlreadyCreatedGroup); mAdapter = new GroupInfoAdapter(mInflater, mParticipants, !mIsEditionEnabled, !mIsAlreadyCreatedGroup);
@ -101,10 +121,15 @@ public class GroupInfoFragment extends Fragment {
mLeaveGroupButton.setOnClickListener(new View.OnClickListener() { mLeaveGroupButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
//TODO if (mChatRoom != null) {
mChatRoom.leave();
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString());
} else {
Log.e("Can't leave, chatRoom for address " + mGroupChatRoomAddress.asString() + " is null...");
}
} }
}); });
mLeaveGroupButton.setVisibility(mIsAlreadyCreatedGroup ? View.VISIBLE : View.GONE); mLeaveGroupButton.setVisibility(mIsAlreadyCreatedGroup && mChatRoom.getState() != ChatRoom.State.Terminated ? View.VISIBLE : View.GONE);
mAddParticipantsButton = view.findViewById(R.id.addParticipants); mAddParticipantsButton = view.findViewById(R.id.addParticipants);
mAddParticipantsButton.setOnClickListener(new View.OnClickListener() { mAddParticipantsButton.setOnClickListener(new View.OnClickListener() {
@ -131,7 +156,7 @@ public class GroupInfoFragment extends Fragment {
mConfirmButton.setEnabled(mSubjectField.getText().length() > 0 && mParticipants.size() > 1); mConfirmButton.setEnabled(mSubjectField.getText().length() > 0 && mParticipants.size() > 1);
} }
}); });
mSubjectField.setText(subject); mSubjectField.setText(mSubject);
mConfirmButton.setOnClickListener(new View.OnClickListener() { mConfirmButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -161,7 +186,11 @@ public class GroupInfoFragment extends Fragment {
} }
chatRoom.addParticipants(addresses); chatRoom.addParticipants(addresses);
} else { } else {
//TODO String newSubject = mSubjectField.getText().toString();
if (!newSubject.equals(mSubject)) {
mChatRoom.setSubject(newSubject);
}
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString());
} }
} }
}); });