diff --git a/app/src/main/java/eu/faircode/email/AdapterImage.java b/app/src/main/java/eu/faircode/email/AdapterImage.java index f1082a89c9..f0ef844e3f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterImage.java +++ b/app/src/main/java/eu/faircode/email/AdapterImage.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.AnimatedImageDrawable; @@ -40,6 +41,7 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.OnLifecycleEvent; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListUpdateCallback; import androidx.recyclerview.widget.RecyclerView; @@ -106,6 +108,14 @@ public class AdapterImage extends RecyclerView.Adapter String type = args.getString("type"); int max = args.getInt("max"); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean webp = prefs.getBoolean("webp", true); + + if ("image/webp".equalsIgnoreCase(type) && !webp) { + args.putBoolean("nowebp", true); + return null; + } + args.putLong("size", file.length()); try { @@ -142,7 +152,10 @@ public class AdapterImage extends RecyclerView.Adapter @Override protected void onExecuted(Bundle args, Drawable image) { if (image == null) - ivImage.setImageResource(R.drawable.twotone_broken_image_24); + if (args.getBoolean("nowebp")) + ivImage.setImageResource(R.drawable.twotone_warning_24); + else + ivImage.setImageResource(R.drawable.twotone_broken_image_24); else ivImage.setImageDrawable(image); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 4dced1a2cb..140f9b1ce6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -240,6 +240,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private SwitchCompat swNativeDkim; private SwitchCompat swNativeArc; private EditText etNativeArcWhitelist; + private SwitchCompat swWebp; private SwitchCompat swEasyCorrect; private SwitchCompat swInfra; private SwitchCompat swTldFlags; @@ -311,7 +312,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "max_backoff_power", "logarithmic_backoff", "exact_alarms", "native_dkim", "native_arc", "native_arc_whitelist", - "easy_correct", "infra", "tld_flags", "dup_msgids", "thread_byref", "mdn", "app_chooser", "delete_confirmation", "global_keywords", "test_iab" + "webp", "easy_correct", "infra", "tld_flags", "dup_msgids", "thread_byref", "mdn", + "app_chooser", "delete_confirmation", "global_keywords", "test_iab" }; private final static String[] RESET_QUESTIONS = new String[]{ @@ -500,6 +502,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swNativeDkim = view.findViewById(R.id.swNativeDkim); swNativeArc = view.findViewById(R.id.swNativeArc); etNativeArcWhitelist = view.findViewById(R.id.etNativeArcWhitelist); + swWebp = view.findViewById(R.id.swWebp); swEasyCorrect = view.findViewById(R.id.swEasyCorrect); swInfra = view.findViewById(R.id.swInfra); swTldFlags = view.findViewById(R.id.swTldFlags); @@ -1883,6 +1886,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + swWebp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("webp", checked).apply(); + } + }); + swEasyCorrect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -2706,6 +2716,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swNativeArc.setChecked(prefs.getBoolean("native_arc", true)); etNativeArcWhitelist.setEnabled(swNativeDkim.isEnabled() && swNativeDkim.isChecked()); etNativeArcWhitelist.setText(prefs.getString("native_arc_whitelist", null)); + swWebp.setChecked(prefs.getBoolean("webp", true)); swEasyCorrect.setChecked(prefs.getBoolean("easy_correct", false)); swInfra.setChecked(prefs.getBoolean("infra", false)); swTldFlags.setChecked(prefs.getBoolean("tld_flags", false)); diff --git a/app/src/main/java/eu/faircode/email/ImageHelper.java b/app/src/main/java/eu/faircode/email/ImageHelper.java index bd11f7e316..4038e191b6 100644 --- a/app/src/main/java/eu/faircode/email/ImageHelper.java +++ b/app/src/main/java/eu/faircode/email/ImageHelper.java @@ -318,6 +318,7 @@ class ImageHelper { boolean show, int zoom, final float scale, final TextView view) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean inline = prefs.getBoolean("inline_images", false); + boolean webp = prefs.getBoolean("webp", true); final int px = Helper.dp2pixels(context, (zoom + 1) * 24); final Resources res = context.getResources(); @@ -345,6 +346,10 @@ class ImageHelper { Drawable d = ContextCompat.getDrawable(context, R.drawable.twotone_broken_image_24); d.setBounds(0, 0, px, px); return d; + } else if ("image/webp".equalsIgnoreCase(attachment.type) && !webp) { + Drawable d = ContextCompat.getDrawable(context, R.drawable.twotone_warning_24); + d.setBounds(0, 0, px, px); + return d; } else if (!attachment.available) { Log.i("Image not available CID=" + cid); Drawable d = ContextCompat.getDrawable(context, R.drawable.twotone_photo_library_24); diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index da95236836..02fbaf777a 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -2066,6 +2066,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swNativeArc" /> + + Use exact timers Native DKIM verification Native ARC verification + Webp Easy correct Show infrastructure Show TLD flags