mirror of https://github.com/M66B/FairEmail.git
Added quick save quick setup wizard
This commit is contained in:
parent
f42faeef8a
commit
b920cf056e
|
@ -81,6 +81,7 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
private Button btnHelp;
|
private Button btnHelp;
|
||||||
private Button btnSupport;
|
private Button btnSupport;
|
||||||
|
|
||||||
|
private TextView tvUser;
|
||||||
private TextView tvImap;
|
private TextView tvImap;
|
||||||
private TextView tvSmtp;
|
private TextView tvSmtp;
|
||||||
|
|
||||||
|
@ -96,8 +97,18 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
private Group grpCertificate;
|
private Group grpCertificate;
|
||||||
private Group grpError;
|
private Group grpError;
|
||||||
|
|
||||||
|
private EmailProvider bestProvider = null;
|
||||||
|
private Bundle bestArgs = null;
|
||||||
|
|
||||||
private static final String PRIVACY_URI = "https://www.mozilla.org/privacy/";
|
private static final String PRIVACY_URI = "https://www.mozilla.org/privacy/";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
outState.putString("fair:password", tilPassword.getEditText().getText().toString());
|
||||||
|
outState.putParcelable("fair:best", bestProvider);
|
||||||
|
outState.putParcelable("fair:args", bestArgs);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
@ -123,6 +134,7 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
btnHelp = view.findViewById(R.id.btnHelp);
|
btnHelp = view.findViewById(R.id.btnHelp);
|
||||||
btnSupport = view.findViewById(R.id.btnSupport);
|
btnSupport = view.findViewById(R.id.btnSupport);
|
||||||
|
|
||||||
|
tvUser = view.findViewById(R.id.tvUser);
|
||||||
tvImap = view.findViewById(R.id.tvImap);
|
tvImap = view.findViewById(R.id.tvImap);
|
||||||
tvSmtp = view.findViewById(R.id.tvSmtp);
|
tvSmtp = view.findViewById(R.id.tvSmtp);
|
||||||
|
|
||||||
|
@ -227,6 +239,13 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
grpCertificate.setVisibility(View.GONE);
|
grpCertificate.setVisibility(View.GONE);
|
||||||
grpError.setVisibility(View.GONE);
|
grpError.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
tilPassword.getEditText().setText(savedInstanceState.getString("fair:password"));
|
||||||
|
bestProvider = savedInstanceState.getParcelable("fair:best");
|
||||||
|
bestArgs = savedInstanceState.getParcelable("fair:args");
|
||||||
|
showResult(bestProvider, bestArgs);
|
||||||
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,6 +255,7 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
args.putString("email", etEmail.getText().toString().trim());
|
args.putString("email", etEmail.getText().toString().trim());
|
||||||
args.putString("password", tilPassword.getEditText().getText().toString());
|
args.putString("password", tilPassword.getEditText().getText().toString());
|
||||||
args.putBoolean("check", check);
|
args.putBoolean("check", check);
|
||||||
|
args.putParcelable("best", bestProvider);
|
||||||
|
|
||||||
new SimpleTask<EmailProvider>() {
|
new SimpleTask<EmailProvider>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -269,6 +289,7 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
String email = args.getString("email");
|
String email = args.getString("email");
|
||||||
String password = args.getString("password");
|
String password = args.getString("password");
|
||||||
boolean check = args.getBoolean("check");
|
boolean check = args.getBoolean("check");
|
||||||
|
EmailProvider best = args.getParcelable("best");
|
||||||
|
|
||||||
if (TextUtils.isEmpty(name))
|
if (TextUtils.isEmpty(name))
|
||||||
throw new IllegalArgumentException(context.getString(R.string.title_no_name));
|
throw new IllegalArgumentException(context.getString(R.string.title_no_name));
|
||||||
|
@ -288,7 +309,11 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
|
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
|
||||||
|
|
||||||
Throwable fail = null;
|
Throwable fail = null;
|
||||||
List<EmailProvider> providers = EmailProvider.fromEmail(context, email, EmailProvider.Discover.ALL);
|
List<EmailProvider> providers;
|
||||||
|
if (best == null)
|
||||||
|
providers = EmailProvider.fromEmail(context, email, EmailProvider.Discover.ALL);
|
||||||
|
else
|
||||||
|
providers = Arrays.asList(best);
|
||||||
for (EmailProvider provider : providers)
|
for (EmailProvider provider : providers)
|
||||||
try {
|
try {
|
||||||
EntityLog.log(context, "Checking" +
|
EntityLog.log(context, "Checking" +
|
||||||
|
@ -484,8 +509,8 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
db.endTransaction();
|
db.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
fail = null;
|
ServiceSynchronize.eval(context, "quick setup");
|
||||||
break;
|
return provider;
|
||||||
} catch (Throwable ex) {
|
} catch (Throwable ex) {
|
||||||
Log.w(ex);
|
Log.w(ex);
|
||||||
if (fail == null)
|
if (fail == null)
|
||||||
|
@ -495,8 +520,6 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
if (fail != null)
|
if (fail != null)
|
||||||
throw fail;
|
throw fail;
|
||||||
|
|
||||||
ServiceSynchronize.eval(context, "quick setup");
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,11 +529,9 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
|
|
||||||
boolean check = args.getBoolean("check");
|
boolean check = args.getBoolean("check");
|
||||||
if (check) {
|
if (check) {
|
||||||
tvImap.setText(result == null ? null : result.imap.toString());
|
bestProvider = result;
|
||||||
tvSmtp.setText(result == null ? null : result.smtp.toString());
|
bestArgs = args;
|
||||||
grpSetup.setVisibility(result == null ? View.GONE : View.VISIBLE);
|
showResult(bestProvider, bestArgs);
|
||||||
showCertInfo(result, args);
|
|
||||||
btnSave.setVisibility(result == null ? View.GONE : View.VISIBLE);
|
|
||||||
} else {
|
} else {
|
||||||
FragmentDialogAccount fragment = new FragmentDialogAccount();
|
FragmentDialogAccount fragment = new FragmentDialogAccount();
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
|
@ -566,6 +587,7 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
|
|
||||||
if (provider != null &&
|
if (provider != null &&
|
||||||
provider.imap != null && provider.smtp != null) {
|
provider.imap != null && provider.smtp != null) {
|
||||||
|
tvUser.setText("-");
|
||||||
tvImap.setText(provider.imap.toString());
|
tvImap.setText(provider.imap.toString());
|
||||||
tvSmtp.setText(provider.smtp.toString());
|
tvSmtp.setText(provider.smtp.toString());
|
||||||
grpSetup.setVisibility(View.VISIBLE);
|
grpSetup.setVisibility(View.VISIBLE);
|
||||||
|
@ -583,40 +605,6 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showCertInfo(EmailProvider provider, Bundle args) {
|
|
||||||
X509Certificate imap_certificate =
|
|
||||||
(X509Certificate) args.getSerializable("imap_certificate");
|
|
||||||
X509Certificate smtp_certificate =
|
|
||||||
(X509Certificate) args.getSerializable("smtp_certificate");
|
|
||||||
|
|
||||||
List<String> imapNames = new ArrayList<>();
|
|
||||||
if (imap_certificate != null)
|
|
||||||
try {
|
|
||||||
imapNames = EntityCertificate.getDnsNames(imap_certificate);
|
|
||||||
} catch (Throwable ignored) {
|
|
||||||
}
|
|
||||||
boolean imapMatches = EntityCertificate.matches(provider.imap.host, imapNames);
|
|
||||||
|
|
||||||
List<String> smtpNames = new ArrayList<>();
|
|
||||||
if (smtp_certificate != null)
|
|
||||||
try {
|
|
||||||
smtpNames = EntityCertificate.getDnsNames(smtp_certificate);
|
|
||||||
} catch (Throwable ignored) {
|
|
||||||
}
|
|
||||||
boolean smtpMatches = EntityCertificate.matches(provider.imap.host, smtpNames);
|
|
||||||
|
|
||||||
tvImapFingerprint.setText(EntityCertificate.getKeyFingerprint(imap_certificate));
|
|
||||||
tvImapDnsNames.setText(TextUtils.join(", ", imapNames));
|
|
||||||
tvImapDnsNames.setTypeface(imapMatches ? Typeface.DEFAULT : Typeface.DEFAULT_BOLD);
|
|
||||||
tvSmtpFingerprint.setText(EntityCertificate.getKeyFingerprint(smtp_certificate));
|
|
||||||
tvSmtpDnsNames.setText(TextUtils.join(", ", smtpNames));
|
|
||||||
tvSmtpDnsNames.setTypeface(smtpMatches ? Typeface.DEFAULT : Typeface.DEFAULT_BOLD);
|
|
||||||
|
|
||||||
grpCertificate.setVisibility(
|
|
||||||
imap_certificate == null && smtp_certificate == null
|
|
||||||
? View.GONE : View.VISIBLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setManual(boolean manual) {
|
private void setManual(boolean manual) {
|
||||||
FragmentActivity activity = getActivity();
|
FragmentActivity activity = getActivity();
|
||||||
if (activity == null)
|
if (activity == null)
|
||||||
|
@ -631,6 +619,49 @@ public class FragmentQuickSetup extends FragmentBase {
|
||||||
}.execute(this, args, "setup:quick");
|
}.execute(this, args, "setup:quick");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showResult(EmailProvider provider, Bundle args) {
|
||||||
|
X509Certificate imap_certificate =
|
||||||
|
(X509Certificate) args.getSerializable("imap_certificate");
|
||||||
|
X509Certificate smtp_certificate =
|
||||||
|
(X509Certificate) args.getSerializable("smtp_certificate");
|
||||||
|
|
||||||
|
List<String> imapNames = new ArrayList<>();
|
||||||
|
if (imap_certificate != null)
|
||||||
|
try {
|
||||||
|
imapNames = EntityCertificate.getDnsNames(imap_certificate);
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
}
|
||||||
|
boolean imapMatches = (provider != null &&
|
||||||
|
EntityCertificate.matches(provider.imap.host, imapNames));
|
||||||
|
|
||||||
|
List<String> smtpNames = new ArrayList<>();
|
||||||
|
if (smtp_certificate != null)
|
||||||
|
try {
|
||||||
|
smtpNames = EntityCertificate.getDnsNames(smtp_certificate);
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
}
|
||||||
|
boolean smtpMatches = (provider != null &&
|
||||||
|
EntityCertificate.matches(provider.imap.host, smtpNames));
|
||||||
|
|
||||||
|
tvUser.setText(provider == null ? null : provider.username);
|
||||||
|
tvImap.setText(provider == null ? null : provider.imap.toString());
|
||||||
|
tvSmtp.setText(provider == null ? null : provider.smtp.toString());
|
||||||
|
grpSetup.setVisibility(provider == null ? View.GONE : View.VISIBLE);
|
||||||
|
|
||||||
|
tvImapFingerprint.setText(EntityCertificate.getKeyFingerprint(imap_certificate));
|
||||||
|
tvImapDnsNames.setText(TextUtils.join(", ", imapNames));
|
||||||
|
tvImapDnsNames.setTypeface(imapMatches ? Typeface.DEFAULT : Typeface.DEFAULT_BOLD);
|
||||||
|
tvSmtpFingerprint.setText(EntityCertificate.getKeyFingerprint(smtp_certificate));
|
||||||
|
tvSmtpDnsNames.setText(TextUtils.join(", ", smtpNames));
|
||||||
|
tvSmtpDnsNames.setTypeface(smtpMatches ? Typeface.DEFAULT : Typeface.DEFAULT_BOLD);
|
||||||
|
|
||||||
|
grpCertificate.setVisibility(
|
||||||
|
imap_certificate == null && smtp_certificate == null
|
||||||
|
? View.GONE : View.VISIBLE);
|
||||||
|
|
||||||
|
btnSave.setVisibility(provider == null ? View.GONE : View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
|
@ -233,15 +233,36 @@
|
||||||
app:layout_constraintTop_toBottomOf="@id/tvInstructions" />
|
app:layout_constraintTop_toBottomOf="@id/tvInstructions" />
|
||||||
|
|
||||||
<eu.faircode.email.FixedTextView
|
<eu.faircode.email.FixedTextView
|
||||||
android:id="@+id/tvImapTitle"
|
android:id="@+id/tvUserTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="24dp"
|
||||||
android:text="@string/title_setup_quick_imap"
|
android:text="@string/title_user"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/btnSupport" />
|
app:layout_constraintTop_toBottomOf="@id/btnSupport" />
|
||||||
|
|
||||||
|
<eu.faircode.email.FixedTextView
|
||||||
|
android:id="@+id/tvUser"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="username"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textIsSelectable="true"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tvUserTitle" />
|
||||||
|
|
||||||
|
<eu.faircode.email.FixedTextView
|
||||||
|
android:id="@+id/tvImapTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="12dp"
|
||||||
|
android:text="@string/title_setup_quick_imap"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tvUser" />
|
||||||
|
|
||||||
<eu.faircode.email.FixedTextView
|
<eu.faircode.email.FixedTextView
|
||||||
android:id="@+id/tvImap"
|
android:id="@+id/tvImap"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -359,6 +380,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
app:constraint_referenced_ids="
|
app:constraint_referenced_ids="
|
||||||
|
tvUserTitle,tvUser,
|
||||||
tvImapTitle,tvImap,
|
tvImapTitle,tvImap,
|
||||||
tvSmtpTitle,tvSmtp" />
|
tvSmtpTitle,tvSmtp" />
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue