mirror of https://github.com/M66B/FairEmail.git
Improved account/identity fragment, fixed crash
This commit is contained in:
parent
8df4beb703
commit
e4908243f3
|
@ -106,7 +106,7 @@ public class FragmentAccount extends FragmentEx {
|
||||||
private Group grpFolders;
|
private Group grpFolders;
|
||||||
|
|
||||||
private long id = -1;
|
private long id = -1;
|
||||||
private int auth_type = Helper.AUTH_TYPE_PASSWORD;
|
private boolean authorized = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -163,23 +163,17 @@ public class FragmentAccount extends FragmentEx {
|
||||||
|
|
||||||
Provider provider = (Provider) adapterView.getSelectedItem();
|
Provider provider = (Provider) adapterView.getSelectedItem();
|
||||||
|
|
||||||
if (provider.imap_port > 0) {
|
|
||||||
etName.setText(provider.name);
|
etName.setText(provider.name);
|
||||||
etHost.setText(provider.imap_host);
|
|
||||||
etPort.setText(Integer.toString(provider.imap_port));
|
|
||||||
if (provider.type == null)
|
|
||||||
etUser.requestFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (provider.type == null) {
|
btnAuthorize.setVisibility(provider.type == null ? View.GONE : View.VISIBLE);
|
||||||
btnAuthorize.setVisibility(View.GONE);
|
if (authorized) {
|
||||||
if (auth_type != Helper.AUTH_TYPE_PASSWORD) {
|
authorized = false;
|
||||||
auth_type = Helper.AUTH_TYPE_PASSWORD;
|
|
||||||
etUser.setText(null);
|
etUser.setText(null);
|
||||||
tilPassword.getEditText().setText(null);
|
tilPassword.getEditText().setText(null);
|
||||||
}
|
}
|
||||||
} else
|
|
||||||
btnAuthorize.setVisibility(View.VISIBLE);
|
etHost.setText(provider.imap_host);
|
||||||
|
etPort.setText(position == 0 ? null : Integer.toString(provider.imap_port));
|
||||||
|
|
||||||
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
|
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
|
||||||
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
|
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
|
||||||
|
@ -221,6 +215,8 @@ public class FragmentAccount extends FragmentEx {
|
||||||
btnSave.setVisibility(View.GONE);
|
btnSave.setVisibility(View.GONE);
|
||||||
grpFolders.setVisibility(View.GONE);
|
grpFolders.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
Provider provider = (Provider) spProvider.getSelectedItem();
|
||||||
|
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putLong("id", id);
|
args.putLong("id", id);
|
||||||
args.putString("name", etName.getText().toString());
|
args.putString("name", etName.getText().toString());
|
||||||
|
@ -228,7 +224,7 @@ public class FragmentAccount extends FragmentEx {
|
||||||
args.putString("port", etPort.getText().toString());
|
args.putString("port", etPort.getText().toString());
|
||||||
args.putString("user", etUser.getText().toString());
|
args.putString("user", etUser.getText().toString());
|
||||||
args.putString("password", tilPassword.getEditText().getText().toString());
|
args.putString("password", tilPassword.getEditText().getText().toString());
|
||||||
args.putInt("auth_type", auth_type);
|
args.putInt("auth_type", authorized ? provider.getAuthType() : Helper.AUTH_TYPE_PASSWORD);
|
||||||
args.putBoolean("synchronize", cbSynchronize.isChecked());
|
args.putBoolean("synchronize", cbSynchronize.isChecked());
|
||||||
args.putBoolean("primary", cbPrimary.isChecked());
|
args.putBoolean("primary", cbPrimary.isChecked());
|
||||||
|
|
||||||
|
@ -415,6 +411,8 @@ public class FragmentAccount extends FragmentEx {
|
||||||
btnSave.setEnabled(false);
|
btnSave.setEnabled(false);
|
||||||
pbSave.setVisibility(View.VISIBLE);
|
pbSave.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
Provider provider = (Provider) spProvider.getSelectedItem();
|
||||||
|
|
||||||
EntityFolder drafts = (EntityFolder) spDrafts.getSelectedItem();
|
EntityFolder drafts = (EntityFolder) spDrafts.getSelectedItem();
|
||||||
EntityFolder sent = (EntityFolder) spSent.getSelectedItem();
|
EntityFolder sent = (EntityFolder) spSent.getSelectedItem();
|
||||||
EntityFolder all = (EntityFolder) spAll.getSelectedItem();
|
EntityFolder all = (EntityFolder) spAll.getSelectedItem();
|
||||||
|
@ -439,7 +437,7 @@ public class FragmentAccount extends FragmentEx {
|
||||||
args.putString("port", etPort.getText().toString());
|
args.putString("port", etPort.getText().toString());
|
||||||
args.putString("user", etUser.getText().toString());
|
args.putString("user", etUser.getText().toString());
|
||||||
args.putString("password", tilPassword.getEditText().getText().toString());
|
args.putString("password", tilPassword.getEditText().getText().toString());
|
||||||
args.putInt("auth_type", auth_type);
|
args.putInt("auth_type", authorized ? provider.getAuthType() : Helper.AUTH_TYPE_PASSWORD);
|
||||||
args.putBoolean("synchronize", cbSynchronize.isChecked());
|
args.putBoolean("synchronize", cbSynchronize.isChecked());
|
||||||
args.putBoolean("primary", cbPrimary.isChecked());
|
args.putBoolean("primary", cbPrimary.isChecked());
|
||||||
args.putString("poll_interval", etInterval.getText().toString());
|
args.putString("poll_interval", etInterval.getText().toString());
|
||||||
|
@ -664,9 +662,8 @@ public class FragmentAccount extends FragmentEx {
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putInt("provider", spProvider.getSelectedItemPosition());
|
outState.putInt("provider", spProvider.getSelectedItemPosition());
|
||||||
outState.putInt("auth_type", auth_type);
|
outState.putBoolean("authorized", authorized);
|
||||||
outState.putString("password", tilPassword.getEditText().getText().toString());
|
outState.putString("password", tilPassword.getEditText().getText().toString());
|
||||||
outState.putInt("instructions", grpInstructions.getVisibility());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -710,7 +707,6 @@ public class FragmentAccount extends FragmentEx {
|
||||||
|
|
||||||
etUser.setText(account == null ? null : account.user);
|
etUser.setText(account == null ? null : account.user);
|
||||||
tilPassword.getEditText().setText(account == null ? null : account.password);
|
tilPassword.getEditText().setText(account == null ? null : account.password);
|
||||||
auth_type = (account == null ? Helper.AUTH_TYPE_PASSWORD : account.auth_type);
|
|
||||||
|
|
||||||
cbSynchronize.setChecked(account == null ? true : account.synchronize);
|
cbSynchronize.setChecked(account == null ? true : account.synchronize);
|
||||||
cbPrimary.setChecked(account == null ? true : account.primary);
|
cbPrimary.setChecked(account == null ? true : account.primary);
|
||||||
|
@ -720,15 +716,17 @@ public class FragmentAccount extends FragmentEx {
|
||||||
spProvider.setTag(provider);
|
spProvider.setTag(provider);
|
||||||
spProvider.setSelection(provider);
|
spProvider.setSelection(provider);
|
||||||
|
|
||||||
|
authorized = savedInstanceState.getBoolean("authorized");
|
||||||
tilPassword.getEditText().setText(savedInstanceState.getString("password"));
|
tilPassword.getEditText().setText(savedInstanceState.getString("password"));
|
||||||
auth_type = savedInstanceState.getInt("auth_type");
|
|
||||||
|
|
||||||
grpInstructions.setVisibility(savedInstanceState.getInt("instructions"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Helper.setViewsEnabled(view, true);
|
Helper.setViewsEnabled(view, true);
|
||||||
|
|
||||||
btnAuthorize.setVisibility(auth_type == Helper.AUTH_TYPE_PASSWORD ? View.GONE : View.VISIBLE);
|
Provider provider = (Provider) spProvider.getSelectedItem();
|
||||||
|
btnAuthorize.setVisibility(provider.getAuthType() == Helper.AUTH_TYPE_PASSWORD ? View.GONE : View.VISIBLE);
|
||||||
|
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
|
||||||
|
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
|
||||||
|
|
||||||
cbPrimary.setEnabled(cbSynchronize.isChecked());
|
cbPrimary.setEnabled(cbSynchronize.isChecked());
|
||||||
|
|
||||||
btnCheck.setVisibility(cbSynchronize.isChecked() ? View.VISIBLE : View.GONE);
|
btnCheck.setVisibility(cbSynchronize.isChecked() ? View.VISIBLE : View.GONE);
|
||||||
|
@ -789,7 +787,7 @@ public class FragmentAccount extends FragmentEx {
|
||||||
String token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
|
String token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
|
||||||
Log.i(Helper.TAG, "Got token");
|
Log.i(Helper.TAG, "Got token");
|
||||||
|
|
||||||
auth_type = Helper.AUTH_TYPE_GMAIL;
|
authorized = true;
|
||||||
etUser.setText(account.name);
|
etUser.setText(account.name);
|
||||||
tilPassword.getEditText().setText(token);
|
tilPassword.getEditText().setText(token);
|
||||||
} catch (Throwable ex) {
|
} catch (Throwable ex) {
|
||||||
|
|
|
@ -145,6 +145,7 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
|
|
||||||
EntityAccount account = (EntityAccount) adapterView.getAdapter().getItem(position);
|
EntityAccount account = (EntityAccount) adapterView.getAdapter().getItem(position);
|
||||||
|
|
||||||
|
// Select associated provider
|
||||||
for (int pos = 1; pos < spProvider.getAdapter().getCount(); pos++) {
|
for (int pos = 1; pos < spProvider.getAdapter().getCount(); pos++) {
|
||||||
Provider provider = (Provider) spProvider.getItemAtPosition(pos);
|
Provider provider = (Provider) spProvider.getItemAtPosition(pos);
|
||||||
if (provider.imap_host.equals(account.host) && provider.imap_port == account.port) {
|
if (provider.imap_host.equals(account.host) && provider.imap_port == account.port) {
|
||||||
|
@ -153,13 +154,12 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (position > 0 && TextUtils.isEmpty(etUser.getText()))
|
// Copy account user name
|
||||||
etUser.setText(account.user);
|
etUser.setText(account.user);
|
||||||
|
|
||||||
if (position > 0 && TextUtils.isEmpty(tilPassword.getEditText().getText())) {
|
// Copy account password
|
||||||
tilPassword.getEditText().setText(account.password);
|
tilPassword.getEditText().setText(account.password);
|
||||||
tilPassword.setPasswordVisibilityToggleEnabled(false);
|
tilPassword.setPasswordVisibilityToggleEnabled(position == 0);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -177,12 +177,12 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
|
|
||||||
Provider provider = (Provider) adapterView.getSelectedItem();
|
Provider provider = (Provider) adapterView.getSelectedItem();
|
||||||
|
|
||||||
if (provider.smtp_port > 0) {
|
// Set associated host/port/starttls
|
||||||
etHost.setText(provider.smtp_host);
|
etHost.setText(provider.smtp_host);
|
||||||
etPort.setText(Integer.toString(provider.smtp_port));
|
etPort.setText(position == 0 ? null : Integer.toString(provider.smtp_port));
|
||||||
cbStartTls.setChecked(provider.starttls);
|
cbStartTls.setChecked(provider.starttls);
|
||||||
}
|
|
||||||
|
|
||||||
|
// Show link to instructions
|
||||||
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
|
tvLink.setText(Html.fromHtml("<a href=\"" + provider.link + "\">" + provider.link + "</a>"));
|
||||||
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
|
grpInstructions.setVisibility(provider.link == null ? View.GONE : View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
@ -402,7 +402,6 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
outState.putInt("account", spAccount.getSelectedItemPosition());
|
outState.putInt("account", spAccount.getSelectedItemPosition());
|
||||||
outState.putInt("provider", spProvider.getSelectedItemPosition());
|
outState.putInt("provider", spProvider.getSelectedItemPosition());
|
||||||
outState.putString("password", tilPassword.getEditText().getText().toString());
|
outState.putString("password", tilPassword.getEditText().getText().toString());
|
||||||
outState.putInt("instructions", grpInstructions.getVisibility());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -435,13 +434,12 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
cbStoreSent.setChecked(identity == null ? false : identity.store_sent);
|
cbStoreSent.setChecked(identity == null ? false : identity.store_sent);
|
||||||
|
|
||||||
etName.requestFocus();
|
etName.requestFocus();
|
||||||
} else {
|
} else
|
||||||
tilPassword.getEditText().setText(savedInstanceState.getString("password"));
|
tilPassword.getEditText().setText(savedInstanceState.getString("password"));
|
||||||
grpInstructions.setVisibility(savedInstanceState.getInt("instructions"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Helper.setViewsEnabled(view, true);
|
Helper.setViewsEnabled(view, true);
|
||||||
|
|
||||||
|
grpInstructions.setVisibility(View.GONE);
|
||||||
cbPrimary.setEnabled(cbSynchronize.isChecked());
|
cbPrimary.setEnabled(cbSynchronize.isChecked());
|
||||||
|
|
||||||
// Consider previous save/delete as cancelled
|
// Consider previous save/delete as cancelled
|
||||||
|
@ -492,7 +490,7 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
spAccount.setTag(pos);
|
spAccount.setTag(pos);
|
||||||
spAccount.setSelection(pos);
|
spAccount.setSelection(pos);
|
||||||
// OAuth token could be updated
|
// OAuth token could be updated
|
||||||
if (accounts.get(pos).auth_type != Helper.AUTH_TYPE_PASSWORD)
|
if (pos > 0 && accounts.get(pos).auth_type != Helper.AUTH_TYPE_PASSWORD)
|
||||||
tilPassword.getEditText().setText(accounts.get(pos).password);
|
tilPassword.getEditText().setText(accounts.get(pos).password);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -505,6 +503,10 @@ public class FragmentIdentity extends FragmentEx {
|
||||||
spAccount.setTag(account);
|
spAccount.setTag(account);
|
||||||
spAccount.setSelection(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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,6 +98,12 @@ public class Provider {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getAuthType() {
|
||||||
|
if ("com.google".equals(type))
|
||||||
|
return Helper.AUTH_TYPE_GMAIL;
|
||||||
|
return Helper.AUTH_TYPE_PASSWORD;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return name;
|
return name;
|
||||||
|
|
Loading…
Reference in New Issue