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 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();

View file

@ -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();

View file

@ -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();
} }

View file

@ -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 =

View file

@ -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(