Browse Source

Simplify identity setup

Refs #52
main
M66B 5 years ago
parent
commit
86c9bea815
4 changed files with 69 additions and 96 deletions
  1. +3
    -3
      app/src/main/java/eu/faircode/email/FragmentAccount.java
  2. +28
    -44
      app/src/main/java/eu/faircode/email/FragmentIdentity.java
  3. +2
    -2
      app/src/main/res/layout/fragment_account.xml
  4. +36
    -47
      app/src/main/res/layout/fragment_identity.xml

+ 3
- 3
app/src/main/java/eu/faircode/email/FragmentAccount.java View File

@ -465,12 +465,12 @@ public class FragmentAccount extends FragmentEx {
Bundle args = new Bundle();
args.putLong("id", id);
args.putString("name", etName.getText().toString());
args.putString("host", etHost.getText().toString());
args.putString("port", etPort.getText().toString());
args.putString("user", etUser.getText().toString());
args.putString("password", tilPassword.getEditText().getText().toString());
args.putInt("auth_type", authorized == null ? Helper.AUTH_TYPE_PASSWORD : provider.getAuthType());
args.putString("name", etName.getText().toString());
args.putBoolean("synchronize", cbSynchronize.isChecked());
args.putBoolean("primary", cbPrimary.isChecked());
args.putParcelable("drafts", drafts);
@ -482,12 +482,12 @@ public class FragmentAccount extends FragmentEx {
new SimpleTask<Void>() {
@Override
protected Void onLoad(Context context, Bundle args) throws Throwable {
String name = args.getString("name");
String host = args.getString("host");
String port = args.getString("port");
String user = args.getString("user");
String password = args.getString("password");
int auth_type = args.getInt("auth_type");
String name = args.getString("name");
boolean synchronize = args.getBoolean("synchronize");
boolean primary = args.getBoolean("primary");
EntityFolder drafts = args.getParcelable("drafts");
@ -535,12 +535,12 @@ public class FragmentAccount extends FragmentEx {
boolean update = (account != null);
if (account == null)
account = new EntityAccount();
account.name = name;
account.host = host;
account.port = Integer.parseInt(port);
account.user = user;
account.password = password;
account.auth_type = auth_type;
account.name = name;
account.synchronize = synchronize;
account.primary = (account.synchronize && primary);
account.store_sent = false;


+ 28
- 44
app/src/main/java/eu/faircode/email/FragmentIdentity.java View File

@ -22,11 +22,7 @@ package eu.faircode.email;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -39,7 +35,6 @@ import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.textfield.TextInputLayout;
@ -60,16 +55,16 @@ import androidx.lifecycle.Observer;
public class FragmentIdentity extends FragmentEx {
private ViewGroup view;
private EditText etName;
private Spinner spAccount;
private Button btnAdvanced;
private EditText etEmail;
private EditText etReplyTo;
private Spinner spProvider;
private Spinner spAccount;
private EditText etHost;
private CheckBox cbStartTls;
private EditText etPort;
private EditText etUser;
private TextInputLayout tilPassword;
private TextView tvLink;
private CheckBox cbSynchronize;
private CheckBox cbPrimary;
private CheckBox cbStoreSent;
@ -77,7 +72,7 @@ public class FragmentIdentity extends FragmentEx {
private ProgressBar pbSave;
private ImageButton ibDelete;
private ProgressBar pbWait;
private Group grpInstructions;
private Group grpAdvanced;
private long id = -1;
@ -99,16 +94,16 @@ public class FragmentIdentity extends FragmentEx {
// Get controls
etName = view.findViewById(R.id.etName);
spAccount = view.findViewById(R.id.spAccount);
btnAdvanced = view.findViewById(R.id.btnAdvanced);
etEmail = view.findViewById(R.id.etEmail);
etReplyTo = view.findViewById(R.id.etReplyTo);
spProvider = view.findViewById(R.id.spProvider);
spAccount = view.findViewById(R.id.spAccount);
etHost = view.findViewById(R.id.etHost);
cbStartTls = view.findViewById(R.id.cbStartTls);
etPort = view.findViewById(R.id.etPort);
etUser = view.findViewById(R.id.etUser);
tilPassword = view.findViewById(R.id.tilPassword);
tvLink = view.findViewById(R.id.tvLink);
cbSynchronize = view.findViewById(R.id.cbSynchronize);
cbPrimary = view.findViewById(R.id.cbPrimary);
cbStoreSent = view.findViewById(R.id.cbStoreSent);
@ -116,28 +111,17 @@ public class FragmentIdentity extends FragmentEx {
pbSave = view.findViewById(R.id.pbSave);
ibDelete = view.findViewById(R.id.ibDelete);
pbWait = view.findViewById(R.id.pbWait);
grpInstructions = view.findViewById(R.id.grpInstructions);
grpAdvanced = view.findViewById(R.id.grpAdvanced);
// Wire controls
etEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
etUser.setText(s.toString());
}
});
spAccount.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
btnAdvanced.setVisibility(position > 0 ? View.VISIBLE : View.GONE);
tilPassword.setPasswordVisibilityToggleEnabled(position == 0);
btnSave.setVisibility(position > 0 ? View.VISIBLE : View.GONE);
Integer tag = (Integer) adapterView.getTag();
if (tag != null && tag.equals(position))
return;
@ -155,11 +139,11 @@ public class FragmentIdentity extends FragmentEx {
}
// Copy account user name
etEmail.setText(account.user);
etUser.setText(account.user);
// Copy account password
tilPassword.getEditText().setText(account.password);
tilPassword.setPasswordVisibilityToggleEnabled(position == 0);
}
@Override
@ -167,6 +151,14 @@ public class FragmentIdentity extends FragmentEx {
}
});
btnAdvanced.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int visibility = (grpAdvanced.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
grpAdvanced.setVisibility(visibility);
}
});
spProvider.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
@ -181,10 +173,6 @@ public class FragmentIdentity extends FragmentEx {
etHost.setText(provider.smtp_host);
etPort.setText(position == 0 ? null : Integer.toString(provider.smtp_port));
cbStartTls.setChecked(provider.starttls);
// Show link to instructions
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
}
@Override
@ -236,9 +224,9 @@ public class FragmentIdentity extends FragmentEx {
protected Void onLoad(Context context, Bundle args) throws Throwable {
long id = args.getLong("id");
String name = args.getString("name");
long account = args.getLong("account");
String email = args.getString("email");
String replyto = args.getString("replyto");
long account = args.getLong("account");
String host = args.getString("host");
boolean starttls = args.getBoolean("starttls");
String port = args.getString("port");
@ -253,8 +241,6 @@ public class FragmentIdentity extends FragmentEx {
throw new IllegalArgumentException(getContext().getString(R.string.title_no_name));
if (TextUtils.isEmpty(email))
throw new IllegalArgumentException(getContext().getString(R.string.title_no_email));
if (account < 0)
throw new IllegalArgumentException(getContext().getString(R.string.title_no_account));
if (TextUtils.isEmpty(host))
throw new IllegalArgumentException(getContext().getString(R.string.title_no_host));
if (TextUtils.isEmpty(port))
@ -289,9 +275,9 @@ public class FragmentIdentity extends FragmentEx {
if (identity == null)
identity = new EntityIdentity();
identity.name = name;
identity.account = account;
identity.email = email;
identity.replyto = replyto;
identity.account = account;
identity.host = host;
identity.port = Integer.parseInt(port);
identity.starttls = starttls;
@ -384,8 +370,9 @@ public class FragmentIdentity extends FragmentEx {
// Initialize
Helper.setViewsEnabled(view, false);
tilPassword.setPasswordVisibilityToggleEnabled(id < 0);
tvLink.setMovementMethod(LinkMovementMethod.getInstance());
btnSave.setEnabled(false);
btnSave.setVisibility(View.GONE);
btnAdvanced.setVisibility(View.GONE);
grpAdvanced.setVisibility(View.GONE);
pbSave.setVisibility(View.GONE);
ibDelete.setVisibility(View.GONE);
@ -398,6 +385,7 @@ public class FragmentIdentity extends FragmentEx {
outState.putInt("account", spAccount.getSelectedItemPosition());
outState.putInt("provider", spProvider.getSelectedItemPosition());
outState.putString("password", tilPassword.getEditText().getText().toString());
outState.putInt("advanced", grpAdvanced.getVisibility());
}
@Override
@ -430,17 +418,17 @@ public class FragmentIdentity extends FragmentEx {
cbStoreSent.setChecked(identity == null ? false : identity.store_sent);
etName.requestFocus();
} else
} else {
tilPassword.getEditText().setText(savedInstanceState.getString("password"));
grpAdvanced.setVisibility(savedInstanceState.getInt("advanced"));
}
Helper.setViewsEnabled(view, true);
grpInstructions.setVisibility(View.GONE);
cbPrimary.setEnabled(cbSynchronize.isChecked());
// Consider previous save/delete as cancelled
ibDelete.setVisibility(identity == null ? View.GONE : View.VISIBLE);
btnSave.setEnabled(true);
pbWait.setVisibility(View.GONE);
db.account().liveAccounts().removeObservers(getViewLifecycleOwner());
@ -499,10 +487,6 @@ public class FragmentIdentity extends FragmentEx {
spAccount.setTag(account);
spAccount.setSelection(account);
}
Provider provider = (Provider) spProvider.getSelectedItem();
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
}
});
}


+ 2
- 2
app/src/main/res/layout/fragment_account.xml View File

@ -145,8 +145,6 @@
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<!-- name -->
<Button
android:id="@+id/btnAdvanced"
style="@style/buttonStyleSmall"
@ -159,6 +157,8 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tilPassword" />
<!-- name -->
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"


+ 36
- 47
app/src/main/res/layout/fragment_identity.xml View File

@ -32,6 +32,37 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvName" />
<!--- linked account -->
<TextView
android:id="@+id/tvAccount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_account_linked"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etName" />
<Spinner
android:id="@+id/spAccount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAccount" />
<Button
android:id="@+id/btnAdvanced"
style="@style/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:minHeight="0dp"
android:minWidth="0dp"
android:text="@string/title_setup_advanced"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spAccount" />
<!-- email -->
<TextView
@ -42,7 +73,7 @@
android:text="@string/title_identity_email"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etName" />
app:layout_constraintTop_toBottomOf="@id/btnAdvanced" />
<EditText
android:id="@+id/etEmail"
@ -75,26 +106,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvReplyTo" />
<!--- linked account -->
<TextView
android:id="@+id/tvAccount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_account_linked"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etReplyTo" />
<Spinner
android:id="@+id/spAccount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAccount" />
<!--- provider -->
<TextView
@ -105,7 +116,7 @@
android:text="@string/title_provider"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spAccount" />
app:layout_constraintTop_toBottomOf="@id/etReplyTo" />
<Spinner
android:id="@+id/spProvider"
@ -230,28 +241,6 @@
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/tvInstructions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:freezesText="true"
android:text="@string/title_instructions"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tilPassword" />
<TextView
android:id="@+id/tvLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:freezesText="true"
android:text="link"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvInstructions" />
<CheckBox
android:id="@+id/cbSynchronize"
android:layout_width="wrap_content"
@ -259,7 +248,7 @@
android:layout_marginTop="12dp"
android:text="@string/title_synchronize_identity"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLink" />
app:layout_constraintTop_toBottomOf="@id/tilPassword" />
<CheckBox
android:id="@+id/cbPrimary"
@ -320,9 +309,9 @@
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Group
android:id="@+id/grpInstructions"
android:id="@+id/grpAdvanced"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvInstructions,tvLink" />
app:constraint_referenced_ids="tvEmail,etEmail,tvReplyTo,etReplyTo,tvProvider,spProvider,tvSmtp,tvHost,etHost,cbStartTls,tvPort,etPort,tvUser,etUser,tvPassword,tilPassword,cbSynchronize,cbPrimary,cbStoreSent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

Loading…
Cancel
Save