diff --git a/FAQ.md b/FAQ.md
index 029c4f7926..858506382a 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -160,7 +160,7 @@ FairEmail follows all the best practices for an email client as decribed in [thi
* [(83) What does 'User is authenticated but not connected' mean?](#user-content-faq83)
* [(84) What are local contacts for?](#user-content-faq84)
* [(85) Why is an identity not available?](#user-content-faq85)
-* [(86) What are 'extra privacy features'?](#user-content-faq86)
+* [~~(86) What are 'extra privacy features'?~~](#user-content-faq86)
* [(87) What does 'invalid credentials' mean?](#user-content-faq87)
* [(88) How can I use a Yahoo! account?](#user-content-faq88)
* [(89) How can I send plain text only messages?](#user-content-faq89)
@@ -1550,12 +1550,12 @@ FairEmail will try to select the best identity based on the *to* address of the
-**(86) What are 'extra privacy features'?**
+**~~(86) What are 'extra privacy features'?~~**
-The advanced option *extra privacy features* enables:
+~~The advanced option *extra privacy features* enables:~~
-* Looking up the owner of the IP address of a link
-* Detection and removal of [tracking images](#user-content-faq82)
+* ~~Looking up the owner of the IP address of a link~~
+* ~~Detection and removal of [tracking images](#user-content-faq82)~~
diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java
index 003da453b2..621eae7a1a 100644
--- a/app/src/main/java/eu/faircode/email/AdapterMessage.java
+++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java
@@ -117,7 +117,6 @@ import org.jsoup.nodes.Element;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
@@ -3371,9 +3370,6 @@ public class AdapterMessage extends RecyclerView.Adapter() {
+ @Override
+ protected void onPreExecute(Bundle args) {
+ btnOwner.setEnabled(false);
+ pbWait.setVisibility(View.VISIBLE);
+ grpOwner.setVisibility(View.GONE);
+ }
- new SimpleTask() {
- @Override
- protected void onPreExecute(Bundle args) {
- tvOwner.setText("…");
- grpOwner.setVisibility(View.VISIBLE);
- }
+ @Override
+ protected void onPostExecute(Bundle args) {
+ btnOwner.setEnabled(true);
+ pbWait.setVisibility(View.GONE);
+ grpOwner.setVisibility(View.VISIBLE);
+ }
- @Override
- protected String[] onExecute(Context context, Bundle args) throws Throwable {
- Uri uri = args.getParcelable("uri");
- return IPInfo.getOrganization(uri);
- }
+ @Override
+ protected String[] onExecute(Context context, Bundle args) throws Throwable {
+ Uri uri = args.getParcelable("uri");
+ return IPInfo.getOrganization(uri);
+ }
- @Override
- protected void onExecuted(Bundle args, String[] data) {
- String host = data[0];
- String organization = data[1];
- tvHost.setText(host);
- tvOwner.setText(organization == null ? "?" : organization);
- }
+ @Override
+ protected void onExecuted(Bundle args, String[] data) {
+ String host = data[0];
+ String organization = data[1];
+ tvHost.setText(host);
+ tvOwner.setText(organization == null ? "?" : organization);
+ }
- @Override
- protected void onException(Bundle args, Throwable ex) {
- if (ex instanceof UnknownHostException)
- grpOwner.setVisibility(View.GONE);
- else
+ @Override
+ protected void onException(Bundle args, Throwable ex) {
tvOwner.setText(ex.getMessage());
- }
- }.execute(getContext(), getActivity(), args, "link:domain");
- }
+ }
+ }.execute(getContext(), getActivity(), args, "link:owner");
+ }
+ });
return new AlertDialog.Builder(getContext())
.setView(view)
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
index 75c15d32b7..277b1f9b60 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
@@ -45,10 +45,11 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
private SwitchCompat swCollapse;
private SwitchCompat swAutoRead;
private SwitchCompat swAutoMove;
+ private SwitchCompat swDisableTracking;
private final static String[] RESET_OPTIONS = new String[]{
"pull", "autoscroll", "swipenav", "doubletap", "autoexpand", "autoclose", "autonext",
- "collapse", "autoread", "automove"
+ "collapse", "autoread", "automove", "disable_tracking"
};
@Override
@@ -71,6 +72,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
swCollapse = view.findViewById(R.id.swCollapse);
swAutoRead = view.findViewById(R.id.swAutoRead);
swAutoMove = view.findViewById(R.id.swAutoMove);
+ swDisableTracking = view.findViewById(R.id.swDisableTracking);
setOptions();
@@ -149,6 +151,13 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
}
});
+ swDisableTracking.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("disable_tracking", checked).apply();
+ }
+ });
+
PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this);
return view;
@@ -204,5 +213,6 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
swCollapse.setChecked(prefs.getBoolean("collapse", false));
swAutoRead.setChecked(prefs.getBoolean("autoread", false));
swAutoMove.setChecked(!prefs.getBoolean("automove", false));
+ swDisableTracking.setChecked(prefs.getBoolean("disable_tracking", true));
}
}
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index 12a7d8a61a..fab14ec909 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
@@ -24,7 +24,6 @@ import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -52,8 +51,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private SwitchCompat swSubscribedOnly;
private SwitchCompat swEnglish;
private SwitchCompat swAuthentication;
- private SwitchCompat swParanoid;
- private TextView tvParanoidHint;
private SwitchCompat swWatchdog;
private SwitchCompat swUpdates;
private SwitchCompat swCrashReports;
@@ -67,7 +64,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private Group grpDebug;
private final static String[] RESET_OPTIONS = new String[]{
- "badge", "subscriptions", "subscribed_only", "english", "authentication", "paranoid", "watchdog", "updates", "crash_reports", "debug"
+ "badge", "subscriptions", "subscribed_only", "english", "authentication", "watchdog", "updates", "crash_reports", "debug"
};
private final static String[] RESET_QUESTIONS = new String[]{
@@ -90,8 +87,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swSubscribedOnly = view.findViewById(R.id.swSubscribedOnly);
swEnglish = view.findViewById(R.id.swEnglish);
swAuthentication = view.findViewById(R.id.swAuthentication);
- swParanoid = view.findViewById(R.id.swParanoid);
- tvParanoidHint = view.findViewById(R.id.tvParanoidHint);
swWatchdog = view.findViewById(R.id.swWatchdog);
swUpdates = view.findViewById(R.id.swUpdates);
swCrashReports = view.findViewById(R.id.swCrashReports);
@@ -150,26 +145,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
- swParanoid.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("paranoid", checked).apply();
- }
- });
-
- final Intent faq = new Intent(Intent.ACTION_VIEW);
- faq.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq86"));
- faq.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (faq.resolveActivity(getContext().getPackageManager()) != null) {
- tvParanoidHint.getPaint().setUnderlineText(true);
- tvParanoidHint.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(faq);
- }
- });
- }
-
swWatchdog.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -269,7 +244,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swEnglish.setChecked(prefs.getBoolean("english", false));
swAuthentication.setChecked(prefs.getBoolean("authentication", false));
- swParanoid.setChecked(prefs.getBoolean("paranoid", true));
swWatchdog.setChecked(prefs.getBoolean("watchdog", true));
swUpdates.setChecked(prefs.getBoolean("updates", true));
swUpdates.setVisibility(Helper.isPlayStoreInstall(getContext()) ? View.GONE : View.VISIBLE);
diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java
index 342660f745..81a0368126 100644
--- a/app/src/main/java/eu/faircode/email/HtmlHelper.java
+++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java
@@ -85,9 +85,6 @@ public class HtmlHelper {
private static final ExecutorService executor = Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory);
static String sanitize(Context context, String html, boolean show_images) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- boolean paranoid = prefs.getBoolean("paranoid", true);
-
Document parsed = Jsoup.parse(html);
//
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/btnOwner" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml
index 7052d51c86..e3cc3b7a0b 100644
--- a/app/src/main/res/layout/fragment_options_misc.xml
+++ b/app/src/main/res/layout/fragment_options_misc.xml
@@ -22,6 +22,7 @@
android:id="@+id/swBadge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:checked="true"
android:text="@string/title_advanced_badge"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -116,37 +117,15 @@
app:layout_constraintTop_toBottomOf="@id/tvEnglishHint"
app:switchPadding="12dp" />
-
-
-
-
Automatically go to next conversation on close conversation
Automatically mark messages read on moving messages
Confirm moving messages
+ Automatically recognize and disable tracking images
Show message preview in notifications
Notification actions
@@ -239,7 +240,6 @@
Synchronize subscribed folders only
Force English language
Show a warning when the receiving server could not authenticate the message
- Extra privacy features
Periodically check if FairEmail is still active
Check for updates
Send error reports
@@ -274,7 +274,6 @@
Only available on supported launchers
Enabling this will delete all local folders without subscription
This will restart the app
- See the FAQ for details
Enable extra logging and show debug information at various places
Select …
@@ -704,6 +703,7 @@
Link is secure
Remove tracking parameters
This link is insecure
+ Check owner
Owner IP address
Select app
There is an update to version %1$s available