diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java index f29d6ab5f6..d6ddf40fe8 100644 --- a/app/src/main/java/eu/faircode/email/EmailProvider.java +++ b/app/src/main/java/eu/faircode/email/EmailProvider.java @@ -136,6 +136,7 @@ public class EmailProvider { } else if ("oauth".equals(name)) { provider.oauth = new OAuth(); provider.oauth.enabled = xml.getAttributeBooleanValue(null, "enabled", false); + provider.oauth.askAccount = xml.getAttributeBooleanValue(null, "askAccount", false); provider.oauth.clientId = xml.getAttributeValue(null, "clientId"); provider.oauth.clientSecret = xml.getAttributeValue(null, "clientSecret"); provider.oauth.scopes = xml.getAttributeValue(null, "scopes").split(","); @@ -674,6 +675,7 @@ public class EmailProvider { public static class OAuth { boolean enabled; + boolean askAccount; String clientId; String clientSecret; String[] scopes; diff --git a/app/src/main/java/eu/faircode/email/FragmentOAuth.java b/app/src/main/java/eu/faircode/email/FragmentOAuth.java index 9ecd45a4a0..77f7abce2d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOAuth.java +++ b/app/src/main/java/eu/faircode/email/FragmentOAuth.java @@ -28,6 +28,7 @@ import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; import android.util.Pair; +import android.util.Patterns; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -35,6 +36,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.EditText; import android.widget.ScrollView; import android.widget.TextView; @@ -78,11 +80,14 @@ import static android.app.Activity.RESULT_OK; public class FragmentOAuth extends FragmentBase { private String id; private String name; + private boolean askAccount; private ViewGroup view; private ScrollView scroll; private TextView tvGrantHint; + private EditText etName; + private EditText etEmail; private Button btnOAuth; private ContentLoadingProgressBar pbOAuth; private TextView tvAuthorized; @@ -103,6 +108,7 @@ public class FragmentOAuth extends FragmentBase { Bundle args = getArguments(); id = args.getString("id"); name = args.getString("name"); + askAccount = args.getBoolean("askAccount", false); } @Override @@ -116,6 +122,8 @@ public class FragmentOAuth extends FragmentBase { // Get controls tvGrantHint = view.findViewById(R.id.tvGrantHint); + etName = view.findViewById(R.id.etName); + etEmail = view.findViewById(R.id.etEmail); btnOAuth = view.findViewById(R.id.btnOAuth); pbOAuth = view.findViewById(R.id.pbOAuth); tvAuthorized = view.findViewById(R.id.tvAuthorized); @@ -145,6 +153,8 @@ public class FragmentOAuth extends FragmentBase { // Initialize tvGrantHint.setText(getString(R.string.title_setup_oauth_rationale, name)); + etName.setVisibility(askAccount ? View.VISIBLE : View.GONE); + etEmail.setVisibility(askAccount ? View.VISIBLE : View.GONE); pbOAuth.setVisibility(View.GONE); tvAuthorized.setVisibility(View.GONE); tvGmailHint.setVisibility("gmail".equals(id) ? View.VISIBLE : View.GONE); @@ -198,6 +208,19 @@ public class FragmentOAuth extends FragmentBase { private void onAuthorize() { try { + if (askAccount) { + String name = etName.getText().toString().trim(); + String email = etEmail.getText().toString().trim(); + + if (TextUtils.isEmpty(name)) + throw new IllegalArgumentException(getString(R.string.title_no_name)); + + if (TextUtils.isEmpty(email)) + throw new IllegalArgumentException(getString(R.string.title_no_email)); + if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) + throw new IllegalArgumentException(getString(R.string.title_email_invalid, email)); + } + btnOAuth.setEnabled(false); pbOAuth.setVisibility(View.VISIBLE); hideError(); @@ -243,6 +266,9 @@ public class FragmentOAuth extends FragmentBase { .setState(provider.id) .setAdditionalParameters(params); + if (askAccount) + authRequestBuilder.setLoginHint(etEmail.getText().toString().trim()); + // For offline access if ("gmail".equals(provider.id)) authRequestBuilder.setPrompt("consent"); @@ -326,6 +352,8 @@ public class FragmentOAuth extends FragmentBase { args.putString("name", name); args.putString("token", accessToken); args.putString("state", state.jsonSerializeString()); + args.putString("personal", etName.getText().toString().trim()); + args.putString("address", etEmail.getText().toString().trim()); new SimpleTask() { @Override @@ -334,6 +362,8 @@ public class FragmentOAuth extends FragmentBase { String name = args.getString("name"); String token = args.getString("token"); String state = args.getString("state"); + String personal = args.getString("personal"); + String address = args.getString("address"); String primaryEmail = null; List> identities = new ArrayList<>(); @@ -413,6 +443,9 @@ public class FragmentOAuth extends FragmentBase { identities.add(new Pair<>(email, displayName)); } } + } else if ("yandex".equals(id)) { + primaryEmail = address; + identities.add(new Pair<>(address, personal)); } else throw new IllegalArgumentException("Unknown provider=" + id); diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 19430cab55..b28800f438 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -176,7 +176,8 @@ public class FragmentSetup extends FragmentBase { .add(Menu.NONE, -1, order++, getString(R.string.title_setup_oauth, provider.name)) .setIntent(new Intent(ActivitySetup.ACTION_QUICK_OAUTH) .putExtra("id", provider.id) - .putExtra("name", provider.name)); + .putExtra("name", provider.name) + .putExtra("askAccount", provider.oauth.askAccount)); popupMenu.getMenu().add(Menu.NONE, R.string.title_setup_activesync, order++, R.string.title_setup_activesync); popupMenu.getMenu().add(Menu.NONE, R.string.title_setup_other, order++, R.string.title_setup_other); diff --git a/app/src/main/res/layout/fragment_oauth.xml b/app/src/main/res/layout/fragment_oauth.xml index c6dd9efd53..b782fa0ea5 100644 --- a/app/src/main/res/layout/fragment_oauth.xml +++ b/app/src/main/res/layout/fragment_oauth.xml @@ -23,6 +23,35 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + + + +