Switched to multi listener

This commit is contained in:
Sylvain Berfini 2019-02-14 17:14:22 +01:00
parent a876a35811
commit 29670d63ff
5 changed files with 41 additions and 36 deletions

View file

@ -52,6 +52,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
private final List<ChatMessage> mTransientMessages;
private final ChatMessageViewHolderClickListener mClickListener;
private final ChatMessageListenerStub mListener;
public ChatMessagesAdapter(
ChatMessagesFragment fragment,
@ -69,6 +70,25 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
mParticipants = participants;
mClickListener = clickListener;
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
@ -110,25 +130,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
}
message.setUserData(
holder); // This only works if JAVA object is kept, hence the transient list
message.setListener(
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);
}
}
});
message.addListener(mListener);
}
LinphoneContact contact = null;
@ -285,7 +287,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
for (EventLog event : mHistory) {
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
ChatMessage message = event.getChatMessage();
message.setListener(null);
message.removeListener(mListener);
}
}
mTransientMessages.clear();

View file

@ -191,6 +191,7 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
}
message.setUserData(holder);
message.addListener(mListener);
RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(
@ -203,8 +204,6 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
LinphoneContact contact = null;
if (message.isOutgoing()) {
message.setListener(mListener);
if (status == ChatMessage.State.InProgress) {
holder.messageSendingInProgress.setVisibility(View.VISIBLE);
}
@ -379,7 +378,6 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
+ filename);
prefix += 1;
}
message.setListener(mListener);
message.setFileTransferFilepath(file.getPath());
message.downloadFile();
@ -393,7 +391,6 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
});
}
} 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));
@ -541,7 +538,7 @@ public class ChatMessagesOldAdapter extends SelectableAdapter<ChatMessageOldView
for (EventLog event : mHistory) {
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
ChatMessage message = event.getChatMessage();
message.setListener(null);
message.removeListener(mListener);
}
}
mHistory.clear();

View file

@ -131,20 +131,15 @@ public class ImdnFragment extends Fragment {
refreshInfo();
if (mMessage != null) {
mMessage.setListener(
new ChatMessageListenerStub() {
@Override
public void onParticipantImdnStateChanged(
ChatMessage msg, ParticipantImdnState state) {
refreshInfo();
}
});
mMessage.addListener(mListener);
}
}
@Override
public void onPause() {
mMessage.setListener(null);
if (mMessage != null) {
mMessage.removeListener(mListener);
}
super.onPause();
}

View file

@ -134,7 +134,6 @@ public class ImdnOldFragment extends Fragment {
}
};
if (mMessage == null) return null;
mMessage.setListener(mListener);
RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(
@ -169,10 +168,22 @@ public class ImdnOldFragment extends Fragment {
if (LinphoneActivity.isInstanciated()) {
LinphoneActivity.instance().selectMenu(FragmentsAvailable.MESSAGE_IMDN);
}
if (mMessage != null) {
mMessage.addListener(mListener);
}
refreshInfo();
}
@Override
public void onPause() {
if (mMessage != null) {
mMessage.removeListener(mListener);
}
super.onPause();
}
private void refreshInfo() {
Address remoteSender = mMessage.getFromAddress();
LinphoneContact contact =

View file

@ -103,7 +103,7 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
ChatMessage msg = room.createMessage(reply);
msg.send();
msg.setListener(
msg.addListener(
new ChatMessageListenerStub() {
@Override
public void onMsgStateChanged(