Made email provider parcelable

This commit is contained in:
M66B 2021-06-25 20:49:55 +02:00
parent fd442635ba
commit 79653a83ee
2 changed files with 68 additions and 4 deletions

View File

@ -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<EmailProvider> CREATOR = new Creator<EmailProvider>() {
@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() {

View File

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