diff --git a/app/src/main/java/eu/faircode/email/FragmentGmail.java b/app/src/main/java/eu/faircode/email/FragmentGmail.java index 528b82cb70..461b8fefda 100644 --- a/app/src/main/java/eu/faircode/email/FragmentGmail.java +++ b/app/src/main/java/eu/faircode/email/FragmentGmail.java @@ -42,6 +42,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.ScrollView; import android.widget.TextView; @@ -68,6 +69,7 @@ public class FragmentGmail extends FragmentBase { private Button btnGrant; private TextView tvGranted; private EditText etName; + private CheckBox cbUpdate; private Button btnSelect; private ContentLoadingProgressBar pbSelect; @@ -89,6 +91,7 @@ public class FragmentGmail extends FragmentBase { btnGrant = view.findViewById(R.id.btnGrant); tvGranted = view.findViewById(R.id.tvGranted); etName = view.findViewById(R.id.etName); + cbUpdate = view.findViewById(R.id.cbUpdate); btnSelect = view.findViewById(R.id.btnSelect); pbSelect = view.findViewById(R.id.pbSelect); @@ -232,6 +235,7 @@ public class FragmentGmail extends FragmentBase { } etName.setEnabled(granted); + cbUpdate.setEnabled(granted); btnSelect.setEnabled(granted); getMainHandler().post(new Runnable() { @@ -322,6 +326,7 @@ public class FragmentGmail extends FragmentBase { Bundle args = new Bundle(); args.putString("name", etName.getText().toString().trim()); + args.putBoolean("update", cbUpdate.isChecked()); args.putString("user", user); args.putString("password", state.jsonSerializeString()); @@ -329,6 +334,7 @@ public class FragmentGmail extends FragmentBase { @Override protected void onPreExecute(Bundle args) { etName.setEnabled(false); + cbUpdate.setEnabled(false); btnSelect.setEnabled(false); pbSelect.setVisibility(View.VISIBLE); } @@ -336,6 +342,7 @@ public class FragmentGmail extends FragmentBase { @Override protected void onPostExecute(Bundle args) { etName.setEnabled(true); + cbUpdate.setEnabled(true); btnSelect.setEnabled(true); pbSelect.setVisibility(View.GONE); } @@ -396,7 +403,9 @@ public class FragmentGmail extends FragmentBase { try { db.beginTransaction(); - EntityAccount update = db.account().getAccount(user, AUTH_TYPE_GMAIL); + EntityAccount update = null; + if (args.getBoolean("update")) + update = db.account().getAccount(user, AUTH_TYPE_GMAIL); if (update == null) { EntityAccount primary = db.account().getPrimaryAccount(); @@ -465,7 +474,7 @@ public class FragmentGmail extends FragmentBase { identity.id = db.identity().insertIdentity(identity); EntityLog.log(context, "Gmail identity=" + identity.name + " email=" + identity.email); } else { - args.putLong("account", update.id); + args.putLong("account", -1); EntityLog.log(context, "Gmail update account=" + update.name); db.account().setAccountPassword(update.id, password); db.identity().setIdentityPassword(update.id, update.user, password, update.auth_type); @@ -483,10 +492,15 @@ public class FragmentGmail extends FragmentBase { @Override protected void onExecuted(Bundle args, Void data) { - FragmentReview fragment = new FragmentReview(); - fragment.setArguments(args); - fragment.setTargetFragment(FragmentGmail.this, ActivitySetup.REQUEST_DONE); - fragment.show(getParentFragmentManager(), "quick:review"); + if (args.getLong("account") < 0) { + finish(); + ToastEx.makeText(getContext(), R.string.title_setup_oauth_updated, Toast.LENGTH_LONG).show(); + } else { + FragmentReview fragment = new FragmentReview(); + fragment.setArguments(args); + fragment.setTargetFragment(FragmentGmail.this, ActivitySetup.REQUEST_DONE); + fragment.show(getParentFragmentManager(), "quick:review"); + } } @Override diff --git a/app/src/main/java/eu/faircode/email/FragmentOAuth.java b/app/src/main/java/eu/faircode/email/FragmentOAuth.java index 674f38f20d..008e770572 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOAuth.java +++ b/app/src/main/java/eu/faircode/email/FragmentOAuth.java @@ -38,9 +38,11 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.ScrollView; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -90,6 +92,7 @@ public class FragmentOAuth extends FragmentBase { private TextView tvGrantHint; private EditText etName; private EditText etEmail; + private CheckBox cbUpdate; private Button btnOAuth; private ContentLoadingProgressBar pbOAuth; private TextView tvConfiguring; @@ -126,6 +129,7 @@ public class FragmentOAuth extends FragmentBase { tvGrantHint = view.findViewById(R.id.tvGrantHint); etName = view.findViewById(R.id.etName); etEmail = view.findViewById(R.id.etEmail); + cbUpdate = view.findViewById(R.id.cbUpdate); btnOAuth = view.findViewById(R.id.btnOAuth); pbOAuth = view.findViewById(R.id.pbOAuth); tvConfiguring = view.findViewById(R.id.tvConfiguring); @@ -231,6 +235,7 @@ public class FragmentOAuth extends FragmentBase { etName.setEnabled(false); etEmail.setEnabled(false); + cbUpdate.setEnabled(false); btnOAuth.setEnabled(false); pbOAuth.setVisibility(View.VISIBLE); hideError(); @@ -318,6 +323,7 @@ public class FragmentOAuth extends FragmentBase { try { etName.setEnabled(true); etEmail.setEnabled(true); + cbUpdate.setEnabled(true); AuthorizationResponse auth = AuthorizationResponse.fromIntent(data); if (auth == null) @@ -385,6 +391,7 @@ public class FragmentOAuth extends FragmentBase { args.putBoolean("askAccount", askAccount); args.putString("personal", etName.getText().toString().trim()); args.putString("address", etEmail.getText().toString().trim()); + args.putBoolean("update", cbUpdate.isChecked()); new SimpleTask() { @Override @@ -511,7 +518,9 @@ public class FragmentOAuth extends FragmentBase { try { db.beginTransaction(); - EntityAccount update = db.account().getAccount(username, AUTH_TYPE_OAUTH); + EntityAccount update = null; + if (args.getBoolean("update")) + update = db.account().getAccount(username, AUTH_TYPE_OAUTH); if (update == null) { EntityAccount primary = db.account().getPrimaryAccount(); @@ -589,7 +598,7 @@ public class FragmentOAuth extends FragmentBase { EntityLog.log(context, "OAuth identity=" + ident.name + " email=" + ident.email); } } else { - args.putLong("account", update.id); + args.putLong("account", -1); EntityLog.log(context, "OAuth update account=" + update.name); db.account().setAccountPassword(update.id, state); db.identity().setIdentityPassword(update.id, update.user, state, update.auth_type); @@ -609,10 +618,15 @@ public class FragmentOAuth extends FragmentBase { protected void onExecuted(Bundle args, Void data) { pbOAuth.setVisibility(View.GONE); - FragmentReview fragment = new FragmentReview(); - fragment.setArguments(args); - fragment.setTargetFragment(FragmentOAuth.this, ActivitySetup.REQUEST_DONE); - fragment.show(getParentFragmentManager(), "oauth:review"); + if (args.getLong("account") < 0) { + finish(); + ToastEx.makeText(getContext(), R.string.title_setup_oauth_updated, Toast.LENGTH_LONG).show(); + } else { + FragmentReview fragment = new FragmentReview(); + fragment.setArguments(args); + fragment.setTargetFragment(FragmentOAuth.this, ActivitySetup.REQUEST_DONE); + fragment.show(getParentFragmentManager(), "oauth:review"); + } } @Override @@ -625,6 +639,7 @@ public class FragmentOAuth extends FragmentBase { private void onHandleCancel() { etName.setEnabled(true); etEmail.setEnabled(true); + cbUpdate.setEnabled(true); btnOAuth.setEnabled(true); pbOAuth.setVisibility(View.GONE); } @@ -655,6 +670,7 @@ public class FragmentOAuth extends FragmentBase { etName.setEnabled(true); etEmail.setEnabled(true); + cbUpdate.setEnabled(true); btnOAuth.setEnabled(true); pbOAuth.setVisibility(View.GONE); diff --git a/app/src/main/res/layout/fragment_gmail.xml b/app/src/main/res/layout/fragment_gmail.xml index 36c240720f..9b9325bf90 100644 --- a/app/src/main/res/layout/fragment_gmail.xml +++ b/app/src/main/res/layout/fragment_gmail.xml @@ -63,6 +63,16 @@ + +