Once you have really entered an onboarding flow, don't bail out
Stephen Paul Weber
created
Going back in and pushing cancel should not bail you out anymore, you're waiting
for the onboarding to finish somehow.
Change summary
src/main/java/eu/siacs/conversations/entities/Conversation.java | 27
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 1
2 files changed, 22 insertions(+), 6 deletions(-)
Detailed changes
@@ -2578,6 +2578,10 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
xmppConnectionService.createContact(getAccount().getRoster().getContact(iq.getFrom()), true);
}
+ if (xmppConnectionService.isOnboarding() && mNode.equals("jabber:iq:register") && !"canceled".equals(command.getAttribute("status")) && xmppConnectionService.getPreferences().contains("onboarding_action")) {
+ xmppConnectionService.getPreferences().edit().putBoolean("onboarding_continued", true).commit();
+ }
+
for (Element el : command.getChildren()) {
if (el.getName().equals("actions") && el.getNamespace().equals("http://jabber.org/protocol/commands")) {
for (Element action : el.getChildren()) {
@@ -2650,12 +2654,19 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
if (responseElement == null && command.getAttribute("status") != null && (command.getAttribute("status").equals("completed") || command.getAttribute("status").equals("canceled"))) {
- if (mNode.equals("jabber:iq:register") && command.getAttribute("status").equals("canceled")) {
+ if ("jabber:iq:register".equals(mNode) && "canceled".equals(command.getAttribute("status"))) {
if (xmppConnectionService.isOnboarding()) {
- if (!xmppConnectionService.getPreferences().contains("onboarding_action")) {
- xmppConnectionService.getPreferences().edit().putString("onboarding_action", "cancel").commit();
+ if (xmppConnectionService.getPreferences().contains("onboarding_action")) {
+ xmppConnectionService.deleteAccount(getAccount());
+ } else {
+ if (xmppConnectionService.getPreferences().getBoolean("onboarding_continued", false)) {
+ removeSession(this);
+ return;
+ } else {
+ xmppConnectionService.getPreferences().edit().putString("onboarding_action", "cancel").commit();
+ xmppConnectionService.deleteAccount(getAccount());
+ }
}
- xmppConnectionService.deleteAccount(getAccount());
}
xmppConnectionService.archiveConversation(Conversation.this);
}
@@ -2945,8 +2956,12 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
c.setAttribute("action", "execute");
}
- if (mNode.equals("jabber:iq:register") && xmppConnectionService.isOnboarding() && form.getValue("gateway-jid") != null) {
- xmppConnectionService.getPreferences().edit().putString("onboarding_action", form.getValue("gateway-jid")).commit();
+ if (mNode.equals("jabber:iq:register") && xmppConnectionService.isOnboarding() && form.getFieldByName("gateway-jid") != null) {
+ if (form.getValue("gateway-jid") == null) {
+ xmppConnectionService.getPreferences().edit().remove("onboarding_action").commit();
+ } else {
+ xmppConnectionService.getPreferences().edit().putString("onboarding_action", form.getValue("gateway-jid")).commit();
+ }
}
responseElement.setAttribute("type", "submit");
@@ -2607,6 +2607,7 @@ public class XmppConnectionService extends Service {
}
public void deleteAccount(final Account account) {
+ getPreferences().edit().remove("onboarding_continued").commit();
final boolean connected = account.getStatus() == Account.State.ONLINE;
synchronized (this.conversations) {
if (connected) {