in case fragment starts after activity is bound to service; fetch conversation from uuid

This commit is contained in:
Daniel Gultsch 2018-04-01 19:14:53 +02:00
parent 962ecbedfa
commit 1500299607
1 changed files with 26 additions and 14 deletions

View File

@ -92,6 +92,7 @@ import eu.siacs.conversations.ui.util.ScrollState;
import eu.siacs.conversations.ui.util.SendButtonAction; import eu.siacs.conversations.ui.util.SendButtonAction;
import eu.siacs.conversations.ui.util.SendButtonTool; import eu.siacs.conversations.ui.util.SendButtonTool;
import eu.siacs.conversations.ui.widget.EditMessage; import eu.siacs.conversations.ui.widget.EditMessage;
import eu.siacs.conversations.utils.ExceptionHelper;
import eu.siacs.conversations.utils.MessageUtils; import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.NickValidityChecker; import eu.siacs.conversations.utils.NickValidityChecker;
import eu.siacs.conversations.utils.StylingHelper; import eu.siacs.conversations.utils.StylingHelper;
@ -1804,14 +1805,18 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
if (this.reInitRequiredOnStart) { if (this.reInitRequiredOnStart && this.conversation != null) {
final Bundle extras = pendingExtras.pop(); final Bundle extras = pendingExtras.pop();
reInit(conversation, extras != null); reInit(this.conversation, extras != null);
if (extras != null) { if (extras != null) {
processExtras(extras); processExtras(extras);
} }
} else { } else if (conversation == null && activity != null && activity.xmppConnectionService != null) {
Log.d(Config.LOGTAG, "skipped reinit on start"); final String uuid = pendingConversationsUuid.pop();
Log.d(Config.LOGTAG,"ConversationFragment.onStart() - activity was bound but no conversation loaded. uuid="+uuid);
if (uuid != null) {
findAndReInitByUuidOrArchive(uuid);
}
} }
} }
@ -2567,18 +2572,9 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
Log.d(Config.LOGTAG, "ConversationFragment.onBackendConnected()"); Log.d(Config.LOGTAG, "ConversationFragment.onBackendConnected()");
String uuid = pendingConversationsUuid.pop(); String uuid = pendingConversationsUuid.pop();
if (uuid != null) { if (uuid != null) {
Conversation conversation = activity.xmppConnectionService.findConversationByUuid(uuid); if (!findAndReInitByUuidOrArchive(uuid)) {
if (conversation == null) {
clearPending();
activity.onConversationArchived(null);
return; return;
} }
reInit(conversation);
ScrollState scrollState = pendingScrollState.pop();
String lastMessageUuid = pendingLastMessageUuid.pop();
if (scrollState != null) {
setScrollPosition(scrollState, lastMessageUuid);
}
} else { } else {
if (!activity.xmppConnectionService.isConversationStillOpen(conversation)) { if (!activity.xmppConnectionService.isConversationStillOpen(conversation)) {
clearPending(); clearPending();
@ -2593,6 +2589,22 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
clearPending(); clearPending();
} }
private boolean findAndReInitByUuidOrArchive(@NonNull final String uuid) {
Conversation conversation = activity.xmppConnectionService.findConversationByUuid(uuid);
if (conversation == null) {
clearPending();
activity.onConversationArchived(null);
return false;
}
reInit(conversation);
ScrollState scrollState = pendingScrollState.pop();
String lastMessageUuid = pendingLastMessageUuid.pop();
if (scrollState != null) {
setScrollPosition(scrollState, lastMessageUuid);
}
return true;
}
private void clearPending() { private void clearPending() {
if (postponedActivityResult.pop() != null) { if (postponedActivityResult.pop() != null) {
Log.e(Config.LOGTAG, "cleared pending intent with unhandled result left"); Log.e(Config.LOGTAG, "cleared pending intent with unhandled result left");