Change summary
src/main/java/eu/siacs/conversations/entities/Conversation.java | 12
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 1
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 7
3 files changed, 19 insertions(+), 1 deletion(-)
Detailed changes
@@ -1007,6 +1007,18 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
}
+ public int receivedMessagesCount() {
+ int count = 0;
+ synchronized (this.messages) {
+ for(Message message : messages) {
+ if (message.getStatus() == Message.STATUS_RECEIVED) {
+ ++count;
+ }
+ }
+ }
+ return count;
+ }
+
private int sentMessagesCount() {
int count = 0;
synchronized (this.messages) {
@@ -2267,6 +2267,7 @@ public class XmppConnectionService extends Service {
public void onFetchFailed(final Conversation conversation, Element error) {
if (error != null && "remote-server-not-found".equals(error.getName())) {
conversation.getMucOptions().setError(MucOptions.Error.SERVER_NOT_FOUND);
+ updateConversationUi();
} else {
join(conversation);
fetchConferenceConfiguration(conversation);
@@ -1038,7 +1038,11 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
showSnackbar(R.string.joining_conference, 0, null);
break;
case SERVER_NOT_FOUND:
- showSnackbar(R.string.remote_server_not_found,R.string.leave, leaveMuc);
+ if (conversation.receivedMessagesCount() > 0) {
+ showSnackbar(R.string.remote_server_not_found,R.string.try_again, joinMuc);
+ } else {
+ showSnackbar(R.string.remote_server_not_found, R.string.leave, leaveMuc);
+ }
break;
case PASSWORD_REQUIRED:
showSnackbar(R.string.conference_requires_password, R.string.enter_password, enterPassword);
@@ -1059,6 +1063,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
showSnackbar(R.string.conference_shutdown, R.string.join, joinMuc);
break;
default:
+ hideSnackbar();
break;
}
} else if (account.hasPendingPgpIntent(conversation)) {