New chat room list view almost done

This commit is contained in:
Sylvain Berfini 2017-11-10 10:59:44 +01:00
parent cf7032dea9
commit 24b81aa8b7
2 changed files with 144 additions and 228 deletions

View file

@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
package org.linphone.chat;
import android.app.Dialog;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -26,6 +27,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
@ -46,11 +48,12 @@ import static org.linphone.fragments.FragmentsAvailable.CHAT_LIST;
public class ChatListFragment extends Fragment implements OnItemClickListener, ContactsUpdatedListener {
private LayoutInflater mInflater;
private ListView chatList;
private TextView noChatHistory;
private ImageView edit, selectAll, deselectAll, delete, newDiscussion, cancel, backInCall;
private LinearLayout editList, topbar;
private ListView mChatRoomsList;
private TextView mNoChatHistory;
private ImageView mEditButton, mSelectAllButton, mDeselectAllButton, mDeleteSelectionButton, mNewDiscussionButton, mCancelButton, mBackToCallButton;
private LinearLayout mEditTopBar, mTopBar;
private boolean isEditMode = false;
private ChatRoomsAdapter mChatRoomsAdapter;
private CoreListenerStub mListener;
@Override
@ -58,69 +61,91 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C
mInflater = inflater;
View view = inflater.inflate(R.layout.chatlist, container, false);
chatList = view.findViewById(R.id.chatList);
chatList.setAdapter(new ChatRoomsAdapter(getActivity(), this, mInflater));
chatList.setOnItemClickListener(this);
mChatRoomsList = view.findViewById(R.id.chatList);
mChatRoomsList.setAdapter(new ChatRoomsAdapter(getActivity(), this, mInflater));
mChatRoomsList.setOnItemClickListener(this);
noChatHistory = view.findViewById(R.id.noChatHistory);
mNoChatHistory = view.findViewById(R.id.noChatHistory);
editList = view.findViewById(R.id.edit_list);
topbar = view.findViewById(R.id.top_bar);
mEditTopBar = view.findViewById(R.id.edit_list);
mTopBar = view.findViewById(R.id.top_bar);
cancel = view.findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
mCancelButton = view.findViewById(R.id.cancel);
mCancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
quitEditionMode();
}
});
edit = view.findViewById(R.id.edit);
edit.setOnClickListener(new View.OnClickListener() {
mEditButton = view.findViewById(R.id.edit);
mEditButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
mChatRoomsAdapter.enableEdition(true);
mTopBar.setVisibility(View.GONE);
mEditTopBar.setVisibility(View.VISIBLE);
}
});
newDiscussion = view.findViewById(R.id.new_discussion);
newDiscussion.setOnClickListener(new View.OnClickListener() {
mNewDiscussionButton = view.findViewById(R.id.new_discussion);
mNewDiscussionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinphoneActivity.instance().goToChatCreator(null, false);
}
});
selectAll = view.findViewById(R.id.select_all);
selectAll.setOnClickListener(new View.OnClickListener() {
mSelectAllButton = view.findViewById(R.id.select_all);
mSelectAllButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
mChatRoomsAdapter.selectAll();
}
});
deselectAll = view.findViewById(R.id.deselect_all);
deselectAll.setOnClickListener(new View.OnClickListener() {
mDeselectAllButton = view.findViewById(R.id.deselect_all);
mDeselectAllButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
mChatRoomsAdapter.deselectAll();
}
});
backInCall = view.findViewById(R.id.back_in_call);
backInCall.setOnClickListener(new View.OnClickListener() {
mBackToCallButton = view.findViewById(R.id.back_in_call);
mBackToCallButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinphoneActivity.instance().resetClassicMenuLayoutAndGoBackToCallIfStillRunning();
return;
}
});
delete = view.findViewById(R.id.delete);
delete.setOnClickListener(new View.OnClickListener() {
mDeleteSelectionButton = view.findViewById(R.id.delete);
mDeleteSelectionButton.setEnabled(false);
mDeleteSelectionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = dialog.findViewById(R.id.delete_button);
Button cancel = dialog.findViewById(R.id.cancel);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
deleteSelectedRooms();
dialog.dismiss();
quitEditionMode();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
quitEditionMode();
}
});
dialog.show();
}
});
@ -136,96 +161,45 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C
}
};
/*ChatFragment.createIfNotExist();
ChatFragment.addChatListener(this);*/
mChatRoomsAdapter = new ChatRoomsAdapter(getActivity(), this, mInflater);
mChatRoomsList.setAdapter(mChatRoomsAdapter);
return view;
}
private void refreshChatRoomsList() {
((ChatRoomsAdapter)chatList.getAdapter()).refresh();
mChatRoomsAdapter.refresh();
}
/*private void selectAllList(boolean isSelectAll){
int size = chatList.getAdapter().getCount();
for(int i=0; i<size; i++) {
chatList.setItemChecked(i,isSelectAll);
}
}*/
private void deleteSelectedRooms() {
ChatRoom rooms[] = mChatRoomsAdapter.getSelectedItems();
//TODO
}
/*private void removeChatsConversation() {
int size = chatList.getAdapter().getCount();
for (int i = 0; i < size; i++) {
if (chatList.isItemChecked(i)) {
String sipUri = chatList.getAdapter().getItem(i).toString();
if (sipUri != null) {
ChatRoom chatroom = LinphoneManager.getLc().getChatRoomFromUri(sipUri);
if (chatroom != null) {
chatroom.deleteHistory();
}
}
}
}
quitEditMode();
LinphoneActivity.instance().updateMissedChatCount();
}*/
/*public void quitEditMode(){
isEditMode = false;
editList.setVisibility(View.GONE);
topbar.setVisibility(View.VISIBLE);
refresh();
if(getResources().getBoolean(R.bool.isTablet)){
displayFirstChat();
}
}*/
/*public int getNbItemsChecked(){
int size = chatList.getAdapter().getCount();
int nb = 0;
for(int i=0; i<size; i++) {
if(chatList.isItemChecked(i)) {
nb ++;
}
}
return nb;
}*/
/*public void enabledDeleteButton(Boolean enabled){
if(enabled){
delete.setEnabled(true);
public void updateSelectionButtons(boolean isSelectionEmpty, boolean isSelectionFull) {
if (isSelectionEmpty) {
mDeleteSelectionButton.setEnabled(false);
} else {
if (getNbItemsChecked() == 0){
delete.setEnabled(false);
}
mDeleteSelectionButton.setEnabled(true);
}
}*/
/*private void hideAndDisplayMessageIfNoChat() {
if (mConversations.size() == 0) {
noChatHistory.setVisibility(View.VISIBLE);
chatList.setVisibility(View.GONE);
edit.setEnabled(false);
if (isSelectionFull) {
mSelectAllButton.setVisibility(View.GONE);
mDeselectAllButton.setVisibility(View.VISIBLE);
} else {
noChatHistory.setVisibility(View.GONE);
chatList.setVisibility(View.VISIBLE);
chatList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
chatList.setAdapter(new ChatRoomsAdapter(getActivity(), this, mInflater));
edit.setEnabled(true);
mSelectAllButton.setVisibility(View.VISIBLE);
mDeselectAllButton.setVisibility(View.GONE);
}
}*/
}
/*public void refresh() {
refreshChatRoomsList();
hideAndDisplayMessageIfNoChat();
}*/
/*public void displayFirstChat(){
if (mConversations != null && mConversations.size() > 0) {
LinphoneActivity.instance().displayChat(mConversations.get(0), null, null);
} else {
LinphoneActivity.instance().displayEmptyFragment();
}
}*/
private void quitEditionMode() {
mChatRoomsAdapter.enableEdition(false);
mTopBar.setVisibility(View.VISIBLE);
mEditTopBar.setVisibility(View.GONE);
mDeleteSelectionButton.setEnabled(false);
mSelectAllButton.setVisibility(View.VISIBLE);
mDeselectAllButton.setVisibility(View.GONE);
}
@Override
public void onResume() {
@ -233,9 +207,9 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C
ContactsManager.addContactsListener(this);
if (LinphoneManager.getLc().getCallsNb() > 0) {
backInCall.setVisibility(View.VISIBLE);
mBackToCallButton.setVisibility(View.VISIBLE);
} else {
backInCall.setVisibility(View.INVISIBLE);
mBackToCallButton.setVisibility(View.INVISIBLE);
}
if (LinphoneActivity.isInstanciated()) {
@ -266,7 +240,7 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C
if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != CHAT_LIST)
return;
ChatRoomsAdapter adapter = (ChatRoomsAdapter)chatList.getAdapter();
ChatRoomsAdapter adapter = (ChatRoomsAdapter) mChatRoomsList.getAdapter();
if (adapter != null) {
adapter.notifyDataSetInvalidated();
}
@ -274,98 +248,12 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
ChatRoom chatRoom = (ChatRoom) chatList.getAdapter().getItem(position);
ChatRoom chatRoom = (ChatRoom) mChatRoomsList.getAdapter().getItem(position);
if (LinphoneActivity.isInstanciated() && !isEditMode) {
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asString());
}
}
/*@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, v.getId(), 0, getString(R.string.delete));
}*/
/*@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if (info == null || info.targetView == null) {
return false;
}
String sipUri = chatList.getAdapter().getItem(info.position).toString();
LinphoneActivity.instance().removeFromChatList(sipUri);
refreshChatRoomsList();
if (getResources().getBoolean(R.bool.isTablet)) {
quitEditMode();
}
hideAndDisplayMessageIfNoChat();
return true;
}*/
/*@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.select_all) {
deselectAll.setVisibility(View.VISIBLE);
selectAll.setVisibility(View.GONE);
enabledDeleteButton(true);
selectAllList(true);
return;
}
if (id == R.id.deselect_all) {
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
enabledDeleteButton(false);
selectAllList(false);
return;
}
if (id == R.id.cancel) {
quitEditMode();
return;
}
if (id == R.id.delete) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = dialog.findViewById(R.id.delete_button);
Button cancel = dialog.findViewById(R.id.cancel);
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
removeChatsConversation();
dialog.dismiss();
quitEditMode();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
quitEditMode();
}
});
dialog.show();
return;
}
else if (id == R.id.edit) {
topbar.setVisibility(View.GONE);
editList.setVisibility(View.VISIBLE);
isEditMode = true;
hideAndDisplayMessageIfNoChat();
enabledDeleteButton(false);
}
}*/
/*@Override
public void onChatUpdated() {
refreshChatRoomsList();
}*/
}

View file

@ -28,6 +28,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
@ -46,12 +47,13 @@ import java.util.Arrays;
import java.util.List;
public class ChatRoomsAdapter extends BaseAdapter {
private class ChatRoomViewHolder {
public TextView lastMessageView;
public TextView date;
public TextView displayName;
public TextView unreadMessages;
public CheckBox select;
public CheckBox delete;
public ImageView contactPicture;
public ChatRoomViewHolder(View view) {
@ -59,7 +61,7 @@ public class ChatRoomsAdapter extends BaseAdapter {
date = view.findViewById(R.id.date);
displayName = view.findViewById(R.id.sipUri);
unreadMessages = view.findViewById(R.id.unreadMessages);
select = view.findViewById(R.id.delete_chatroom);
delete = view.findViewById(R.id.delete_chatroom);
contactPicture = view.findViewById(R.id.contact_picture);
}
}
@ -69,6 +71,20 @@ public class ChatRoomsAdapter extends BaseAdapter {
private List<ChatRoom> mRooms;
private LayoutInflater mLayoutInflater;
private Bitmap mDefaultBitmap, mDefaultGroupBitmap;
private boolean mIsEditionEnabled;
private List<Integer> mSelectedItems;
private CompoundButton.OnCheckedChangeListener mDeleteCheckboxListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
Integer position = (Integer)compoundButton.getTag();
if (checked) {
mSelectedItems.add(position);
} else {
mSelectedItems.remove(position);
}
mFragment.updateSelectionButtons(mSelectedItems.size() == 0, mSelectedItems.size() == mRooms.size());
}
};
public ChatRoomsAdapter(Context context, ChatListFragment fragment, LayoutInflater inflater) {
mContext = context;
@ -77,6 +93,8 @@ public class ChatRoomsAdapter extends BaseAdapter {
mRooms = new ArrayList<>();
mDefaultBitmap = ContactsManager.getInstance().getDefaultAvatarBitmap();
mDefaultGroupBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.chat_group_avatar);
mIsEditionEnabled = false;
mSelectedItems = new ArrayList<>();
}
public void refresh() {
@ -88,6 +106,36 @@ public class ChatRoomsAdapter extends BaseAdapter {
* List edition
*/
public void enableEdition(boolean enable) {
mIsEditionEnabled = enable;
notifyDataSetInvalidated();
mSelectedItems.clear();
}
public ChatRoom[] getSelectedItems() {
ChatRoom rooms[] = new ChatRoom[mSelectedItems.size()];
int index = 0;
for (Integer i : mSelectedItems) {
rooms[index] = (ChatRoom)getItem(i);
index++;
}
return rooms;
}
public void selectAll() {
for (Integer i = 0; i < mRooms.size(); i++) {
mSelectedItems.add(i);
}
mFragment.updateSelectionButtons(false, true);
notifyDataSetInvalidated();
}
public void deselectAll() {
mSelectedItems.clear();
mFragment.updateSelectionButtons(true, false);
notifyDataSetInvalidated();
}
/**
* Adapter's methods
*/
@ -190,36 +238,16 @@ public class ChatRoomsAdapter extends BaseAdapter {
holder.displayName.setTypeface(null, Typeface.NORMAL);
}
/*if (isEditMode) {
if (mIsEditionEnabled) {
holder.unreadMessages.setVisibility(View.GONE);
holder.select.setVisibility(View.VISIBLE);
holder.select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
chatList.setItemChecked(position, b);
if (getNbItemsChecked() == getCount()) {
deselectAll.setVisibility(View.VISIBLE);
selectAll.setVisibility(View.GONE);
enabledDeleteButton(true);
} else {
if (getNbItemsChecked() == 0) {
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
enabledDeleteButton(false);
} else {
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
enabledDeleteButton(true);
}
}
}
});
if (chatList.isItemChecked(position)) {
holder.select.setChecked(true);
} else {
holder.select.setChecked(false);
}
}*/
holder.delete.setOnCheckedChangeListener(null);
holder.delete.setVisibility(View.VISIBLE);
holder.delete.setChecked(mSelectedItems.contains(position));
holder.delete.setTag(position);
holder.delete.setOnCheckedChangeListener(mDeleteCheckboxListener);
} else {
holder.delete.setVisibility(mIsEditionEnabled ? View.VISIBLE : View.GONE);
}
return view;
}
}