GroupChatFragment section converted to RecyclerView, use of ScrollToBottom, Selection Mode adapted, contextual menu adapted

This commit is contained in:
Lucas Legrand 2018-07-24 14:05:39 +02:00
parent 46bcb41d0e
commit b0c7b191bb
3 changed files with 58 additions and 59 deletions

View file

@ -11,6 +11,7 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:adjustViewBounds="true"
android:clickable="false"
android:layout_alignParentRight="true"/>
<LinearLayout

View file

@ -95,7 +95,8 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
// public ChatEventsAdapter(GroupChatFragment fragment, SelectableHelper helper, LayoutInflater inflater, ArrayList<EventLog> mHistory, ArrayList<LinphoneContact> participants, ChatBubbleViewHolder.ClickListener clickListener) {
super(helper);
this.mContext = fragment.getActivity();
this.mFragment=fragment;
this.mContext = mFragment.getActivity();
this.itemResource = itemResource;
// this.mLayoutInflater = inflater;
// this.mHistory = mHistory;
@ -135,10 +136,12 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
@Override
public ChatBubbleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// View v = mLayoutInflater.inflate(R.layout.chat_bubble, parent, false);
View v = LayoutInflater.from(parent.getContext())
.inflate(this.itemResource, parent, false);
return new ChatBubbleViewHolder(this.mContext,v, clickListener);
ChatBubbleViewHolder VH = new ChatBubbleViewHolder(this.mContext,v, clickListener);
mFragment.registerForContextMenu(v);
v.setTag(VH);
return VH;
}
@Override
@ -302,42 +305,42 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
holder.fileTransferAction.setVisibility(View.GONE);
} else {
holder.fileTransferAction.setText(mContext.getString(R.string.accept));
// holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// if (mContext.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
// v.setEnabled(false);
// String filename = message.getFileTransferInformation().getName();
// File file = new File(Environment.getExternalStorageDirectory(), filename);
// int prefix = 1;
// while (file.exists()) {
// file = new File(Environment.getExternalStorageDirectory(), prefix + "_" + filename);
// Log.w("File with that name already exists, renamed to " + prefix + "_" + filename);
// prefix += 1;
// }
// message.setListener(mListener);
// message.setFileTransferFilepath(file.getPath());
// message.downloadFile();
//
// } else {
// Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
// LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
// }
// }
// });
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
v.setEnabled(false);
String filename = message.getFileTransferInformation().getName();
File file = new File(Environment.getExternalStorageDirectory(), filename);
int prefix = 1;
while (file.exists()) {
file = new File(Environment.getExternalStorageDirectory(), prefix + "_" + filename);
Log.w("File with that name already exists, renamed to " + prefix + "_" + filename);
prefix += 1;
}
message.setListener(mListener);
message.setFileTransferFilepath(file.getPath());
message.downloadFile();
} else {
Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
}
}
});
}
} else if (message.isFileTransferInProgress()) { // Outgoing file transfer in progress
message.setListener(mListener); // add the listener for file upload progress display
holder.messageSendingInProgress.setVisibility(View.GONE);
holder.fileTransferLayout.setVisibility(View.VISIBLE);
holder.fileTransferAction.setText(mContext.getString(R.string.cancel));
// holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// message.cancelFileTransfer();
// notifyDataSetChanged();
// }
// });
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
message.cancelFileTransfer();
notifyDataSetChanged();
}
});
}
holder.bubbleLayout.setLayoutParams(layoutParams);

View file

@ -81,7 +81,6 @@ import org.linphone.ui.SelectableHelper;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static android.content.Context.INPUT_METHOD_SERVICE;
@ -108,7 +107,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
private ArrayList<LinphoneContact> mParticipants;
private ArrayList<EventLog> mHistory;
private LinearLayoutManager layoutManager;
private int mContextMenuMessagePosition;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -222,7 +221,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
mSelectionHelper = new SelectableHelper(view, this);
layoutManager = new LinearLayoutManager(mContext);
mChatEventsList.setLayoutManager(layoutManager);
registerForContextMenu(mChatEventsList);
// registerForContextMenu(mChatEventsList);
@ -356,12 +355,16 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
EventLog event = (EventLog) mEventsAdapter.getItem(info.position);
ChatBubbleViewHolder holder = (ChatBubbleViewHolder) v.getTag();
mContextMenuMessagePosition = holder.getAdapterPosition();
EventLog event = (EventLog) mEventsAdapter.getItem(mContextMenuMessagePosition);
// EventLog event = log.getEventLog();
if (event.getType() != EventLog.Type.ConferenceChatMessage) {
return;
}
@ -374,8 +377,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
inflater.inflate(R.menu.chat_bubble_menu, menu);
}
if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
// Do not show messages' IDMN state in 1 to 1 chat room as it is already visible in the lower corner of the bubble
if (!message.isOutgoing() && mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
// Do not show incoming messages IDMN state in 1 to 1 chat room as we don't receive IMDN for them
menu.removeItem(R.id.imdn_infos);
}
if (!message.hasTextContent()) {
@ -384,11 +387,18 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
// AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
//
EventLog event = (EventLog) mEventsAdapter.getItem(mContextMenuMessagePosition);
// EventLog event = (EventLog) mEventsAdapter.getItem(info.position);
EventLog event = (EventLog) mEventsAdapter.getItem(info.position);
if (event.getType() != EventLog.Type.ConferenceChatMessage) {
return super.onContextItemSelected(item);
}
@ -397,7 +407,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
String messageId = message.getMessageId();
if (item.getItemId() == R.id.resend) {
mEventsAdapter.removeItem(info.position);
mEventsAdapter.removeItem(mContextMenuMessagePosition);
message.resend();
return true;
}
@ -415,7 +425,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
}
if (item.getItemId() == R.id.delete_message) {
mChatRoom.deleteMessage(message);
mEventsAdapter.removeItem(info.position);
mEventsAdapter.removeItem(mContextMenuMessagePosition);
return true;
}
return super.onContextItemSelected(item);
@ -566,22 +576,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
}
mSelectionHelper.setAdapter(mEventsAdapter);
mChatEventsList.setAdapter(mEventsAdapter);
scrollToBottom();
/*if (mChatRoom == null) return;
if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
EventLog[] history = mChatRoom.getHistoryMessageEvents(0);
mHistory = new ArrayList<>(Arrays.asList(history));
mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, R.layout.chat_bubble, mHistory, mParticipants, this);
// mChatRoomsAdapter = new ChatRoomsAdapter(mContext, R.layout.chatlist_cell, mRooms,this, mSelectionHelper);
} else {
EventLog[] history = mChatRoom.getHistoryEvents(0);
mHistory = new ArrayList<>(Arrays.asList(history));
mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, R.layout.chat_bubble, mHistory, mParticipants, this);
}
mChatEventsList.setAdapter(mEventsAdapter);
mSelectionHelper.setAdapter(mEventsAdapter);*/
}
public void scrollToBottom() {