Added quick save quick setup wizard

This commit is contained in:
M66B 2021-10-10 19:54:16 +02:00
parent f42faeef8a
commit b920cf056e
2 changed files with 99 additions and 46 deletions

View File

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

View File

@ -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" />