Switched to multi listener
This commit is contained in:
parent
a876a35811
commit
29670d63ff
5 changed files with 41 additions and 36 deletions
|
@ -52,6 +52,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
private final List<ChatMessage> mTransientMessages;
|
private final List<ChatMessage> mTransientMessages;
|
||||||
|
|
||||||
private final ChatMessageViewHolderClickListener mClickListener;
|
private final ChatMessageViewHolderClickListener mClickListener;
|
||||||
|
private final ChatMessageListenerStub mListener;
|
||||||
|
|
||||||
public ChatMessagesAdapter(
|
public ChatMessagesAdapter(
|
||||||
ChatMessagesFragment fragment,
|
ChatMessagesFragment fragment,
|
||||||
|
@ -69,6 +70,25 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
mParticipants = participants;
|
mParticipants = participants;
|
||||||
mClickListener = clickListener;
|
mClickListener = clickListener;
|
||||||
mTransientMessages = new ArrayList<>();
|
mTransientMessages = new ArrayList<>();
|
||||||
|
|
||||||
|
mListener =
|
||||||
|
new ChatMessageListenerStub() {
|
||||||
|
@Override
|
||||||
|
public void onMsgStateChanged(ChatMessage message, ChatMessage.State state) {
|
||||||
|
ChatMessageViewHolder holder =
|
||||||
|
(ChatMessageViewHolder) message.getUserData();
|
||||||
|
if (holder != null) {
|
||||||
|
notifyItemChanged(holder.getAdapterPosition());
|
||||||
|
} else {
|
||||||
|
// Just in case, better to refresh the whole view than to miss
|
||||||
|
// an update
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
if (state == ChatMessage.State.Displayed) {
|
||||||
|
mTransientMessages.remove(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -110,25 +130,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
}
|
}
|
||||||
message.setUserData(
|
message.setUserData(
|
||||||
holder); // This only works if JAVA object is kept, hence the transient list
|
holder); // This only works if JAVA object is kept, hence the transient list
|
||||||
message.setListener(
|
message.addListener(mListener);
|
||||||
new ChatMessageListenerStub() {
|
|
||||||
@Override
|
|
||||||
public void onMsgStateChanged(
|
|
||||||
ChatMessage message, ChatMessage.State state) {
|
|
||||||
ChatMessageViewHolder holder =
|
|
||||||
(ChatMessageViewHolder) message.getUserData();
|
|
||||||
if (holder != null) {
|
|
||||||
notifyItemChanged(holder.getAdapterPosition());
|
|
||||||
} else {
|
|
||||||
// Just in case, better to refresh the whole view than to miss
|
|
||||||
// an update
|
|
||||||
notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
if (state == ChatMessage.State.Displayed) {
|
|
||||||
mTransientMessages.remove(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LinphoneContact contact = null;
|
LinphoneContact contact = null;
|
||||||
|
@ -285,7 +287,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
for (EventLog event : mHistory) {
|
for (EventLog event : mHistory) {
|
||||||
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
||||||
ChatMessage message = event.getChatMessage();
|
ChatMessage message = event.getChatMessage();
|
||||||
message.setListener(null);
|
message.removeListener(mListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mTransientMessages.clear();
|
mTransientMessages.clear();
|
||||||
|
|
|
@ -191,6 +191,7 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
|
||||||
}
|
}
|
||||||
|
|
||||||
message.setUserData(holder);
|
message.setUserData(holder);
|
||||||
|
message.addListener(mListener);
|
||||||
|
|
||||||
RelativeLayout.LayoutParams layoutParams =
|
RelativeLayout.LayoutParams layoutParams =
|
||||||
new RelativeLayout.LayoutParams(
|
new RelativeLayout.LayoutParams(
|
||||||
|
@ -203,8 +204,6 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
|
||||||
|
|
||||||
LinphoneContact contact = null;
|
LinphoneContact contact = null;
|
||||||
if (message.isOutgoing()) {
|
if (message.isOutgoing()) {
|
||||||
message.setListener(mListener);
|
|
||||||
|
|
||||||
if (status == ChatMessage.State.InProgress) {
|
if (status == ChatMessage.State.InProgress) {
|
||||||
holder.messageSendingInProgress.setVisibility(View.VISIBLE);
|
holder.messageSendingInProgress.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
@ -379,7 +378,6 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
|
||||||
+ filename);
|
+ filename);
|
||||||
prefix += 1;
|
prefix += 1;
|
||||||
}
|
}
|
||||||
message.setListener(mListener);
|
|
||||||
message.setFileTransferFilepath(file.getPath());
|
message.setFileTransferFilepath(file.getPath());
|
||||||
message.downloadFile();
|
message.downloadFile();
|
||||||
|
|
||||||
|
@ -393,7 +391,6 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} 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
|
|
||||||
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));
|
||||||
|
@ -541,7 +538,7 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
|
||||||
for (EventLog event : mHistory) {
|
for (EventLog event : mHistory) {
|
||||||
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
||||||
ChatMessage message = event.getChatMessage();
|
ChatMessage message = event.getChatMessage();
|
||||||
message.setListener(null);
|
message.removeListener(mListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mHistory.clear();
|
mHistory.clear();
|
||||||
|
|
|
@ -131,20 +131,15 @@ public class ImdnFragment extends Fragment {
|
||||||
|
|
||||||
refreshInfo();
|
refreshInfo();
|
||||||
if (mMessage != null) {
|
if (mMessage != null) {
|
||||||
mMessage.setListener(
|
mMessage.addListener(mListener);
|
||||||
new ChatMessageListenerStub() {
|
|
||||||
@Override
|
|
||||||
public void onParticipantImdnStateChanged(
|
|
||||||
ChatMessage msg, ParticipantImdnState state) {
|
|
||||||
refreshInfo();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
mMessage.setListener(null);
|
if (mMessage != null) {
|
||||||
|
mMessage.removeListener(mListener);
|
||||||
|
}
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,6 @@ public class ImdnOldFragment extends Fragment {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (mMessage == null) return null;
|
if (mMessage == null) return null;
|
||||||
mMessage.setListener(mListener);
|
|
||||||
|
|
||||||
RelativeLayout.LayoutParams layoutParams =
|
RelativeLayout.LayoutParams layoutParams =
|
||||||
new RelativeLayout.LayoutParams(
|
new RelativeLayout.LayoutParams(
|
||||||
|
@ -169,10 +168,22 @@ public class ImdnOldFragment extends Fragment {
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
LinphoneActivity.instance().selectMenu(FragmentsAvailable.MESSAGE_IMDN);
|
LinphoneActivity.instance().selectMenu(FragmentsAvailable.MESSAGE_IMDN);
|
||||||
}
|
}
|
||||||
|
if (mMessage != null) {
|
||||||
|
mMessage.addListener(mListener);
|
||||||
|
}
|
||||||
|
|
||||||
refreshInfo();
|
refreshInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
if (mMessage != null) {
|
||||||
|
mMessage.removeListener(mListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
private void refreshInfo() {
|
private void refreshInfo() {
|
||||||
Address remoteSender = mMessage.getFromAddress();
|
Address remoteSender = mMessage.getFromAddress();
|
||||||
LinphoneContact contact =
|
LinphoneContact contact =
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
ChatMessage msg = room.createMessage(reply);
|
ChatMessage msg = room.createMessage(reply);
|
||||||
msg.send();
|
msg.send();
|
||||||
msg.setListener(
|
msg.addListener(
|
||||||
new ChatMessageListenerStub() {
|
new ChatMessageListenerStub() {
|
||||||
@Override
|
@Override
|
||||||
public void onMsgStateChanged(
|
public void onMsgStateChanged(
|
||||||
|
|
Loading…
Reference in a new issue