Improved account/identity fragment, fixed crash

This commit is contained in:
M66B 2018-08-28 06:32:07 +00:00
parent 8df4beb703
commit e4908243f3
3 changed files with 48 additions and 42 deletions

View File

@ -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); btnAuthorize.setVisibility(provider.type == null ? View.GONE : View.VISIBLE);
etPort.setText(Integer.toString(provider.imap_port)); if (authorized) {
if (provider.type == null) authorized = false;
etUser.requestFocus(); etUser.setText(null);
tilPassword.getEditText().setText(null);
} }
if (provider.type == null) { etHost.setText(provider.imap_host);
btnAuthorize.setVisibility(View.GONE); etPort.setText(position == 0 ? null : Integer.toString(provider.imap_port));
if (auth_type != Helper.AUTH_TYPE_PASSWORD) {
auth_type = Helper.AUTH_TYPE_PASSWORD;
etUser.setText(null);
tilPassword.getEditText().setText(null);
}
} else
btnAuthorize.setVisibility(View.VISIBLE);
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) {

View File

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

View File

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