Link to privacy policies

pull/199/head
M66B 4 years ago
parent 749d791639
commit 6eed965e73

@ -3740,8 +3740,8 @@ For more information, please see [this article](https://en.wikipedia.org/wiki/Do
FairEmail currently uses the following block lists:
* [Spamhaus zen](https://www.spamhaus.org/zen/) - [Terms of Use](https://www.spamhaus.org/organization/dnsblusage/) - [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) - [Legal info](https://www.spamcop.net/fom-serve/cache/297.html) - [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
* [Spamhaus zen](https://www.spamhaus.org/zen/) – [Terms of Use](https://www.spamhaus.org/organization/dnsblusage/) — [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) – [Legal info](https://www.spamcop.net/fom-serve/cache/297.html) — [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
<br />

@ -20,4 +20,17 @@ and therefore adheres to the [Google API Services User Data Policy](https://deve
including the Limited Use requirements.
Google API Services are used only to authenticate Gmail accounts though OAuth.
FairEmail **can use** these services if they are explicitly enabled (off by default) or are explicitly used by you:
* [ipinfo.io](https://ipinfo.io/) &#8211; [Privacy policy](https://ipinfo.io/privacy-policy)
* [Gravatar](https://gravatar.com/) &#8211; [Privacy policy](https://automattic.com/privacy/)
* [Spamhaus zen](https://www.spamhaus.org/zen/) &#8211; [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) &#8211; [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
* [Thunderbird autoconfiguration](https://developer.mozilla.org/docs/Mozilla/Thunderbird/Autoconfiguration) &#8211; [Privacy policy](https://www.mozilla.org/privacy/)
FairEmail **can access** the websites at the domain names of email addresses
if [favicons](https://en.wikipedia.org/wiki/Favicon) are explicitly enabled (off by default).
<br />
Copyright &copy; 2018-2021 Marcel Bokhorst.

@ -20,4 +20,17 @@ and therefore adheres to the [Google API Services User Data Policy](https://deve
including the Limited Use requirements.
Google API Services are used only to authenticate Gmail accounts though OAuth.
FairEmail **can use** these services if they are explicitly enabled (off by default) or are explicitly used by you:
* [ipinfo.io](https://ipinfo.io/) &#8211; [Privacy policy](https://ipinfo.io/privacy-policy)
* [Gravatar](https://gravatar.com/) &#8211; [Privacy policy](https://automattic.com/privacy/)
* [Spamhaus zen](https://www.spamhaus.org/zen/) &#8211; [Privacy policy](https://www.spamhaus.org/organization/privacy/)
* [Spamcop](https://www.spamcop.net/) &#8211; [Privacy policy](https://www.spamcop.net/fom-serve/cache/168.html)
* [Thunderbird autoconfiguration](https://developer.mozilla.org/docs/Mozilla/Thunderbird/Autoconfiguration) &#8211; [Privacy policy](https://www.mozilla.org/privacy/)
FairEmail **can access** the websites at the domain names of email addresses
if [favicons](https://en.wikipedia.org/wiki/Favicon) are explicitly enabled (off by default).
<br />
Copyright &copy; 2018-2021 Marcel Bokhorst.

@ -172,6 +172,7 @@ public class EmailProvider implements Parcelable {
provider.oauth.authorizationEndpoint = xml.getAttributeValue(null, "authorizationEndpoint");
provider.oauth.tokenEndpoint = xml.getAttributeValue(null, "tokenEndpoint");
provider.oauth.redirectUri = xml.getAttributeValue(null, "redirectUri");
provider.oauth.privacy = xml.getAttributeValue(null, "privacy");
} else
throw new IllegalAccessException(name);
} else if (eventType == XmlPullParser.END_TAG) {
@ -802,5 +803,6 @@ public class EmailProvider implements Parcelable {
String authorizationEndpoint;
String tokenEndpoint;
String redirectUri;
String privacy;
}
}

@ -32,6 +32,7 @@ import android.database.Cursor;
import android.graphics.Paint;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.TextUtils;
@ -66,6 +67,8 @@ public class FragmentGmail extends FragmentBase {
private ViewGroup view;
private ScrollView scroll;
private TextView tvTitle;
private TextView tvPrivacy;
private Button btnGrant;
private TextView tvGranted;
private EditText etName;
@ -80,6 +83,8 @@ public class FragmentGmail extends FragmentBase {
private Group grpError;
private static final String PRIVACY_URI = "https://policies.google.com/privacy";
@Override
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -90,6 +95,8 @@ public class FragmentGmail extends FragmentBase {
scroll = view.findViewById(R.id.scroll);
// Get controls
tvTitle = view.findViewById(R.id.tvTitle);
tvPrivacy = view.findViewById(R.id.tvPrivacy);
btnGrant = view.findViewById(R.id.btnGrant);
tvGranted = view.findViewById(R.id.tvGranted);
etName = view.findViewById(R.id.etName);
@ -106,6 +113,14 @@ public class FragmentGmail extends FragmentBase {
// Wire controls
tvPrivacy.setPaintFlags(tvPrivacy.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvPrivacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.view(v.getContext(), Uri.parse(PRIVACY_URI), false);
}
});
btnGrant.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -170,6 +185,7 @@ public class FragmentGmail extends FragmentBase {
// Initialize
Helper.setViewsEnabled(view, false);
tvTitle.setText(getString(R.string.title_setup_oauth_rationale, "Gmail"));
pbSelect.setVisibility(View.GONE);
grpError.setVisibility(View.GONE);

@ -25,6 +25,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Paint;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
@ -92,12 +93,14 @@ import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_OAUTH;
public class FragmentOAuth extends FragmentBase {
private String id;
private String name;
private String privacy;
private boolean askAccount;
private ViewGroup view;
private ScrollView scroll;
private TextView tvGrantHint;
private TextView tvTitle;
private TextView tvPrivacy;
private EditText etName;
private EditText etEmail;
private CheckBox cbUpdate;
@ -122,6 +125,7 @@ public class FragmentOAuth extends FragmentBase {
Bundle args = getArguments();
id = args.getString("id");
name = args.getString("name");
privacy = args.getString("privacy");
askAccount = args.getBoolean("askAccount", false);
}
@ -135,7 +139,8 @@ public class FragmentOAuth extends FragmentBase {
scroll = view.findViewById(R.id.scroll);
// Get controls
tvGrantHint = view.findViewById(R.id.tvGrantHint);
tvTitle = view.findViewById(R.id.tvTitle);
tvPrivacy = view.findViewById(R.id.tvPrivacy);
etName = view.findViewById(R.id.etName);
etEmail = view.findViewById(R.id.etEmail);
cbUpdate = view.findViewById(R.id.cbUpdate);
@ -153,6 +158,15 @@ public class FragmentOAuth extends FragmentBase {
// Wire controls
tvPrivacy.setVisibility(TextUtils.isEmpty(privacy) ? View.GONE : View.VISIBLE);
tvPrivacy.setPaintFlags(tvPrivacy.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvPrivacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.view(v.getContext(), Uri.parse(privacy), false);
}
});
btnOAuth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -168,7 +182,7 @@ public class FragmentOAuth extends FragmentBase {
});
// Initialize
tvGrantHint.setText(getString(R.string.title_setup_oauth_rationale, name));
tvTitle.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);

@ -21,6 +21,7 @@ package eu.faircode.email;
import android.content.Context;
import android.content.Intent;
import android.graphics.Paint;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
@ -60,6 +61,7 @@ public class FragmentQuickSetup extends FragmentBase {
private ViewGroup view;
private ScrollView scroll;
private TextView tvPrivacy;
private EditText etName;
private EditText etEmail;
private TextInputLayout tilPassword;
@ -83,6 +85,8 @@ public class FragmentQuickSetup extends FragmentBase {
private Group grpSetup;
private Group grpError;
private static final String PRIVACY_URI = "https://www.mozilla.org/privacy/";
@Override
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -93,6 +97,7 @@ public class FragmentQuickSetup extends FragmentBase {
scroll = view.findViewById(R.id.scroll);
// Get controls
tvPrivacy = view.findViewById(R.id.tvPrivacy);
etName = view.findViewById(R.id.etName);
etEmail = view.findViewById(R.id.etEmail);
tilPassword = view.findViewById(R.id.tilPassword);
@ -118,6 +123,14 @@ public class FragmentQuickSetup extends FragmentBase {
// Wire controls
tvPrivacy.setPaintFlags(tvPrivacy.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvPrivacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.view(v.getContext(), Uri.parse(PRIVACY_URI), false);
}
});
tilPassword.setHintEnabled(false);
tilPassword.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {

@ -195,6 +195,7 @@ public class FragmentSetup extends FragmentBase {
.setIntent(new Intent(ActivitySetup.ACTION_QUICK_OAUTH)
.putExtra("id", provider.id)
.putExtra("name", provider.description)
.putExtra("privacy", provider.oauth.privacy)
.putExtra("askAccount", provider.oauth.askAccount));
int resid = context.getResources()
.getIdentifier("provider_" + provider.id, "drawable", context.getPackageName());

@ -13,15 +13,40 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_setup_oauth_rationale"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:drawableEnd="@drawable/twotone_open_in_new_12"
android:drawablePadding="6dp"
android:drawableTint="?android:attr/textColorLink"
android:text="@string/title_privacy_policy"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:attr/textColorLink"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvGrantHint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_setup_gmail_rationale"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@id/tvPrivacy" />
<Button
android:id="@+id/btnGrant"

@ -14,7 +14,7 @@
android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView
android:id="@+id/tvGrantHint"
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_setup_oauth_rationale"
@ -23,10 +23,25 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:drawableEnd="@drawable/twotone_open_in_new_12"
android:drawablePadding="6dp"
android:drawableTint="?android:attr/textColorLink"
android:text="@string/title_privacy_policy"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:attr/textColorLink"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<eu.faircode.email.EditTextPlain
android:id="@+id/etName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:autofillHints="name"
android:hint="@string/title_identity_name"
android:imeOptions="actionNext"
@ -34,7 +49,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvGrantHint">
app:layout_constraintTop_toBottomOf="@id/tvPrivacy">
<requestFocus />
</eu.faircode.email.EditTextPlain>

@ -13,10 +13,35 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<eu.faircode.email.FixedTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_setup_quick_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:drawableEnd="@drawable/twotone_open_in_new_12"
android:drawablePadding="6dp"
android:drawableTint="?android:attr/textColorLink"
android:text="@string/title_privacy_policy"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:attr/textColorLink"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<eu.faircode.email.EditTextPlain
android:id="@+id/etName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:autofillHints="name"
android:hint="@string/title_identity_name"
android:imeOptions="actionNext"
@ -24,7 +49,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toBottomOf="@id/tvPrivacy">
<requestFocus />
</eu.faircode.email.EditTextPlain>
@ -83,17 +108,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCharacters" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvHint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_setup_quick_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCaseSensitiveHint" />
<Button
android:id="@+id/btnCheck"
android:layout_width="wrap_content"
@ -102,7 +116,7 @@
android:tag="disable"
android:text="@string/title_check"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvHint" />
app:layout_constraintTop_toBottomOf="@id/tvCaseSensitiveHint" />
<eu.faircode.email.ContentLoadingProgressBar
android:id="@+id/pbCheck"

@ -144,6 +144,7 @@
<string name="title_disagree">I disagree</string>
<string name="title_version">Version %1$s</string>
<string name="title_privacy_policy">Privacy policy</string>
<string name="title_list_accounts">Accounts</string>
<string name="title_list_identities">Identities</string>

@ -97,6 +97,7 @@
clientId="3514cf2c-e7a3-45a2-80d4-6a3c3498eca0"
clientSecret="r=o4@SlzU:MA6MlXM6mPG[44i4gYPq[@"
enabled="true"
privacy="https://privacy.microsoft.com/privacystatement"
redirectUri="https://oauth.faircode.eu/"
scopes="openid,email,offline_access,https://outlook.office.com/IMAP.AccessAsUser.All,https://outlook.office.com/SMTP.Send"
tokenEndpoint="https://login.microsoftonline.com/common/oauth2/v2.0/token" />
@ -139,6 +140,7 @@
clientSecret="261a91fbbdb2852c4e80fdd3d1db4a8ebfa4c42b"
enabled="true"
pcke="true"
privacy="https://www.verizonmedia.com/policies/us/en/verizonmedia/privacy/index.html"
redirectUri="https://oauth.faircode.eu/"
scopes="mail-w"
tokenEndpoint="https://api.login.yahoo.com/oauth2/get_token" />
@ -327,6 +329,7 @@
clientId="a41b1a433d5041c39edebda5b866d2fc"
clientSecret="03e6fb9c27374d5b81c612add522f6a0"
enabled="true"
privacy="https://yandex.com/legal/confidential/"
redirectUri="https://oauth.faircode.eu/"
scopes="mail:imap_full,mail:smtp"
tokenEndpoint="https://oauth.yandex.com/token" />
@ -501,6 +504,7 @@
clientId="ce54d27dc1574b3a8b50e6789cd1a44a"
clientSecret="5f1525783e1d4defb3bc9c2c4b7d0c54"
enabled="true"
privacy="https://help.mail.ru/legal/terms/common/privacy"
redirectUri="https://oauth.faircode.eu/"
scopes="userinfo mail.imap"
tokenEndpoint="https://oauth.mail.ru/token" />

Loading…
Cancel
Save