diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java index 0adf898fec..a2c85ffb28 100644 --- a/app/src/main/java/eu/faircode/email/EmailProvider.java +++ b/app/src/main/java/eu/faircode/email/EmailProvider.java @@ -21,6 +21,8 @@ package eu.faircode.email; import android.content.Context; import android.content.res.XmlResourceParser; +import android.os.Parcel; +import android.os.Parcelable; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -32,7 +34,6 @@ import org.xmlpull.v1.XmlPullParserFactory; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; -import java.io.Serializable; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -51,7 +52,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -public class EmailProvider implements Serializable { +public class EmailProvider implements Parcelable { public String id; public String name; public String description; @@ -676,6 +677,69 @@ public class EmailProvider implements Serializable { EntityLog.log(context, "smtp=" + smtp.host + ":" + smtp.port + ":" + smtp.starttls); } + protected EmailProvider(Parcel in) { + if (in.readInt() == 0) + imap = null; + else { + imap = new Server(); + imap.host = in.readString(); + imap.port = in.readInt(); + imap.starttls = (in.readInt() != 0); + } + + if (in.readInt() == 0) + smtp = null; + else { + smtp = new Server(); + smtp.host = in.readString(); + smtp.port = in.readInt(); + smtp.starttls = (in.readInt() != 0); + } + + appPassword = (in.readInt() != 0); + link = in.readString(); + String doc = in.readString(); + documentation = (doc == null ? null : new StringBuilder(doc)); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(imap == null ? 0 : 1); + if (imap != null) { + dest.writeString(imap.host); + dest.writeInt(imap.port); + dest.writeInt(imap.starttls ? 1 : 0); + } + + dest.writeInt(smtp == null ? 0 : 1); + if (smtp != null) { + dest.writeString(smtp.host); + dest.writeInt(smtp.port); + dest.writeInt(smtp.starttls ? 1 : 0); + } + + dest.writeInt(appPassword ? 1 : 0); + dest.writeString(link); + dest.writeString(documentation == null ? null : documentation.toString()); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public EmailProvider createFromParcel(Parcel in) { + return new EmailProvider(in); + } + + @Override + public EmailProvider[] newArray(int size) { + return new EmailProvider[size]; + } + }; + @NonNull @Override public String toString() { diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java index 78f4288690..3f7307c466 100644 --- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java @@ -281,7 +281,7 @@ public class FragmentQuickSetup extends FragmentBase { throw new IllegalArgumentException(context.getString(R.string.title_no_internet)); EmailProvider provider = EmailProvider.fromEmail(context, email, EmailProvider.Discover.ALL); - args.putSerializable("provider", provider); + args.putParcelable("provider", provider); int at = email.indexOf('@'); String username = email.substring(0, at); @@ -473,7 +473,7 @@ public class FragmentQuickSetup extends FragmentBase { @Override protected void onException(final Bundle args, Throwable ex) { Log.e(ex); - EmailProvider provider = (EmailProvider) args.getSerializable("provider"); + EmailProvider provider = args.getParcelable("provider"); if (ex instanceof AuthenticationFailedException) { String message = getString(R.string.title_setup_no_auth_hint);