GroupChatFragment section converted to RecyclerView, use of ScrollToBottom, Selection Mode adapted, contextual menu adapted
This commit is contained in:
parent
46bcb41d0e
commit
b0c7b191bb
3 changed files with 58 additions and 59 deletions
|
@ -11,6 +11,7 @@
|
||||||
android:layout_width="30dp"
|
android:layout_width="30dp"
|
||||||
android:layout_height="30dp"
|
android:layout_height="30dp"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
|
android:clickable="false"
|
||||||
android:layout_alignParentRight="true"/>
|
android:layout_alignParentRight="true"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
@ -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) {
|
// public ChatEventsAdapter(GroupChatFragment fragment, SelectableHelper helper, LayoutInflater inflater, ArrayList<EventLog> mHistory, ArrayList<LinphoneContact> participants, ChatBubbleViewHolder.ClickListener clickListener) {
|
||||||
|
|
||||||
super(helper);
|
super(helper);
|
||||||
this.mContext = fragment.getActivity();
|
this.mFragment=fragment;
|
||||||
|
this.mContext = mFragment.getActivity();
|
||||||
this.itemResource = itemResource;
|
this.itemResource = itemResource;
|
||||||
// this.mLayoutInflater = inflater;
|
// this.mLayoutInflater = inflater;
|
||||||
// this.mHistory = mHistory;
|
// this.mHistory = mHistory;
|
||||||
|
@ -135,10 +136,12 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChatBubbleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ChatBubbleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
// View v = mLayoutInflater.inflate(R.layout.chat_bubble, parent, false);
|
|
||||||
View v = LayoutInflater.from(parent.getContext())
|
View v = LayoutInflater.from(parent.getContext())
|
||||||
.inflate(this.itemResource, parent, false);
|
.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
|
@Override
|
||||||
|
@ -302,42 +305,42 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
|
||||||
holder.fileTransferAction.setVisibility(View.GONE);
|
holder.fileTransferAction.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
holder.fileTransferAction.setText(mContext.getString(R.string.accept));
|
holder.fileTransferAction.setText(mContext.getString(R.string.accept));
|
||||||
// holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
|
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
|
||||||
// @Override
|
@Override
|
||||||
// public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
// if (mContext.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
|
if (mContext.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
|
||||||
// v.setEnabled(false);
|
v.setEnabled(false);
|
||||||
// String filename = message.getFileTransferInformation().getName();
|
String filename = message.getFileTransferInformation().getName();
|
||||||
// File file = new File(Environment.getExternalStorageDirectory(), filename);
|
File file = new File(Environment.getExternalStorageDirectory(), filename);
|
||||||
// int prefix = 1;
|
int prefix = 1;
|
||||||
// while (file.exists()) {
|
while (file.exists()) {
|
||||||
// file = new File(Environment.getExternalStorageDirectory(), prefix + "_" + filename);
|
file = new File(Environment.getExternalStorageDirectory(), prefix + "_" + filename);
|
||||||
// Log.w("File with that name already exists, renamed to " + prefix + "_" + filename);
|
Log.w("File with that name already exists, renamed to " + prefix + "_" + filename);
|
||||||
// prefix += 1;
|
prefix += 1;
|
||||||
// }
|
}
|
||||||
// message.setListener(mListener);
|
message.setListener(mListener);
|
||||||
// message.setFileTransferFilepath(file.getPath());
|
message.setFileTransferFilepath(file.getPath());
|
||||||
// message.downloadFile();
|
message.downloadFile();
|
||||||
//
|
|
||||||
// } else {
|
} else {
|
||||||
// Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
|
Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
|
||||||
// LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
|
LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// });
|
});
|
||||||
}
|
}
|
||||||
} else if (message.isFileTransferInProgress()) { // Outgoing file transfer in progress
|
} else if (message.isFileTransferInProgress()) { // Outgoing file transfer in progress
|
||||||
message.setListener(mListener); // add the listener for file upload progress display
|
message.setListener(mListener); // add the listener for file upload progress display
|
||||||
holder.messageSendingInProgress.setVisibility(View.GONE);
|
holder.messageSendingInProgress.setVisibility(View.GONE);
|
||||||
holder.fileTransferLayout.setVisibility(View.VISIBLE);
|
holder.fileTransferLayout.setVisibility(View.VISIBLE);
|
||||||
holder.fileTransferAction.setText(mContext.getString(R.string.cancel));
|
holder.fileTransferAction.setText(mContext.getString(R.string.cancel));
|
||||||
// holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
|
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
|
||||||
// @Override
|
@Override
|
||||||
// public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
// message.cancelFileTransfer();
|
message.cancelFileTransfer();
|
||||||
// notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
// }
|
}
|
||||||
// });
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.bubbleLayout.setLayoutParams(layoutParams);
|
holder.bubbleLayout.setLayoutParams(layoutParams);
|
||||||
|
|
|
@ -81,7 +81,6 @@ import org.linphone.ui.SelectableHelper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static android.content.Context.INPUT_METHOD_SERVICE;
|
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<LinphoneContact> mParticipants;
|
||||||
private ArrayList<EventLog> mHistory;
|
private ArrayList<EventLog> mHistory;
|
||||||
private LinearLayoutManager layoutManager;
|
private LinearLayoutManager layoutManager;
|
||||||
|
private int mContextMenuMessagePosition;
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -222,7 +221,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
mSelectionHelper = new SelectableHelper(view, this);
|
mSelectionHelper = new SelectableHelper(view, this);
|
||||||
layoutManager = new LinearLayoutManager(mContext);
|
layoutManager = new LinearLayoutManager(mContext);
|
||||||
mChatEventsList.setLayoutManager(layoutManager);
|
mChatEventsList.setLayoutManager(layoutManager);
|
||||||
registerForContextMenu(mChatEventsList);
|
// registerForContextMenu(mChatEventsList);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -356,12 +355,16 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
super.onCreateContextMenu(menu, v, menuInfo);
|
super.onCreateContextMenu(menu, v, menuInfo);
|
||||||
|
|
||||||
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
|
ChatBubbleViewHolder holder = (ChatBubbleViewHolder) v.getTag();
|
||||||
EventLog event = (EventLog) mEventsAdapter.getItem(info.position);
|
mContextMenuMessagePosition = holder.getAdapterPosition();
|
||||||
|
|
||||||
|
EventLog event = (EventLog) mEventsAdapter.getItem(mContextMenuMessagePosition);
|
||||||
|
// EventLog event = log.getEventLog();
|
||||||
if (event.getType() != EventLog.Type.ConferenceChatMessage) {
|
if (event.getType() != EventLog.Type.ConferenceChatMessage) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -374,8 +377,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
inflater.inflate(R.menu.chat_bubble_menu, menu);
|
inflater.inflate(R.menu.chat_bubble_menu, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
|
if (!message.isOutgoing() && 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
|
// 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);
|
menu.removeItem(R.id.imdn_infos);
|
||||||
}
|
}
|
||||||
if (!message.hasTextContent()) {
|
if (!message.hasTextContent()) {
|
||||||
|
@ -384,11 +387,18 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onContextItemSelected(MenuItem item) {
|
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) {
|
if (event.getType() != EventLog.Type.ConferenceChatMessage) {
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
}
|
}
|
||||||
|
@ -397,7 +407,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
String messageId = message.getMessageId();
|
String messageId = message.getMessageId();
|
||||||
|
|
||||||
if (item.getItemId() == R.id.resend) {
|
if (item.getItemId() == R.id.resend) {
|
||||||
mEventsAdapter.removeItem(info.position);
|
mEventsAdapter.removeItem(mContextMenuMessagePosition);
|
||||||
message.resend();
|
message.resend();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -415,7 +425,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
}
|
}
|
||||||
if (item.getItemId() == R.id.delete_message) {
|
if (item.getItemId() == R.id.delete_message) {
|
||||||
mChatRoom.deleteMessage(message);
|
mChatRoom.deleteMessage(message);
|
||||||
mEventsAdapter.removeItem(info.position);
|
mEventsAdapter.removeItem(mContextMenuMessagePosition);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
|
@ -566,22 +576,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
}
|
}
|
||||||
mSelectionHelper.setAdapter(mEventsAdapter);
|
mSelectionHelper.setAdapter(mEventsAdapter);
|
||||||
mChatEventsList.setAdapter(mEventsAdapter);
|
mChatEventsList.setAdapter(mEventsAdapter);
|
||||||
|
|
||||||
|
|
||||||
scrollToBottom();
|
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() {
|
public void scrollToBottom() {
|
||||||
|
|
Loading…
Reference in a new issue