mirror of https://github.com/M66B/FairEmail.git
Added setting to automatically show images for known contacts
This commit is contained in:
parent
0a84a6c6f8
commit
8c5d26643e
3
FAQ.md
3
FAQ.md
|
@ -226,6 +226,7 @@ In the display section of the advanced settings you can enable or disable:
|
|||
* *Show message preview*: to show two lines of the message text
|
||||
* *Show address details by default*: to collapse the addresses section by default
|
||||
* *Conversation action bar*: to disable the bottom navigation bar
|
||||
* *Automatically show images for known contacts*: to automatically show images for contacts on your device, please read [this FAQ](#user-content-faq35)
|
||||
|
||||
Note that messages can be previewed only when the message text was downloaded.
|
||||
Larger message texts are not downloaded by default on metered (generally mobile) networks.
|
||||
|
@ -641,6 +642,8 @@ but will also leak your IP address.
|
|||
Opening attachments or viewing an original message might execute scripts,
|
||||
that might not only cause privacy sensitive information to leak, but can also be a security risk.
|
||||
|
||||
Note that your contacts could unknowingly send malicious messages if they got infected with malware.
|
||||
|
||||
<br />
|
||||
|
||||
<a name="faq36"></a>
|
||||
|
|
|
@ -133,6 +133,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
private boolean avatars;
|
||||
private boolean preview;
|
||||
private boolean confirm;
|
||||
private boolean autoimages;
|
||||
private boolean debug;
|
||||
|
||||
private float textSize;
|
||||
|
@ -499,9 +500,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
new SimpleTask<ContactInfo>() {
|
||||
@Override
|
||||
protected void onPreExecute(Bundle args) {
|
||||
ivAvatar.setTag(message.id);
|
||||
tvFrom.setTag(message.id);
|
||||
|
||||
itemView.setTag(message.id);
|
||||
ivAvatar.setVisibility(avatars ? View.INVISIBLE : View.GONE);
|
||||
tvFrom.setText(MessageHelper.formatAddresses(addresses, !compact, false));
|
||||
}
|
||||
|
@ -515,17 +514,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
@Override
|
||||
protected void onExecuted(Bundle args, ContactInfo info) {
|
||||
Long id = args.getLong("id");
|
||||
|
||||
if (id.equals(ivAvatar.getTag())) {
|
||||
if (info.hasPhoto())
|
||||
ivAvatar.setImageBitmap(info.getPhotoBitmap());
|
||||
else
|
||||
ivAvatar.setImageResource(R.drawable.baseline_person_24);
|
||||
ivAvatar.setVisibility(avatars ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
if (id.equals(tvFrom.getTag()))
|
||||
tvFrom.setText(info.getDisplayName(compact));
|
||||
if (id != null && id.equals(itemView.getTag()))
|
||||
showContactInfo(info, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -533,14 +523,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
Helper.unexpectedError(context, owner, ex);
|
||||
}
|
||||
}.execute(context, owner, aargs, "message:avatar");
|
||||
} else {
|
||||
if (info.hasPhoto())
|
||||
ivAvatar.setImageBitmap(info.getPhotoBitmap());
|
||||
else
|
||||
ivAvatar.setImageResource(R.drawable.baseline_person_24);
|
||||
ivAvatar.setVisibility(avatars ? View.VISIBLE : View.GONE);
|
||||
tvFrom.setText(info.getDisplayName(compact));
|
||||
}
|
||||
} else
|
||||
showContactInfo(info, message);
|
||||
|
||||
vwColor.setBackgroundColor(message.accountColor == null ? Color.TRANSPARENT : message.accountColor);
|
||||
vwColor.setVisibility(View.VISIBLE);
|
||||
|
@ -864,6 +848,19 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
itemView.setActivated(selectionTracker != null && selectionTracker.isSelected(message.id));
|
||||
}
|
||||
|
||||
private void showContactInfo(ContactInfo info, TupleMessageEx message) {
|
||||
if (info.hasPhoto())
|
||||
ivAvatar.setImageBitmap(info.getPhotoBitmap());
|
||||
else
|
||||
ivAvatar.setImageResource(R.drawable.baseline_person_24);
|
||||
ivAvatar.setVisibility(avatars ? View.VISIBLE : View.GONE);
|
||||
tvFrom.setText(info.getDisplayName(compact));
|
||||
|
||||
if (info.hasLookupUri() && autoimages &&
|
||||
!properties.getValue("images", message.id))
|
||||
onShowImagesConfirmed(message);
|
||||
}
|
||||
|
||||
void unbind() {
|
||||
if (liveAttachments != null) {
|
||||
liveAttachments.removeObserver(observerAttachments);
|
||||
|
@ -2218,6 +2215,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
prefs.getBoolean("identicons", false));
|
||||
this.preview = prefs.getBoolean("preview", false);
|
||||
this.confirm = prefs.getBoolean("confirm", false);
|
||||
this.autoimages = prefs.getBoolean("autoimages", false);
|
||||
this.debug = prefs.getBoolean("debug", false);
|
||||
|
||||
this.textSize = Helper.getTextSize(context, zoom);
|
||||
|
|
|
@ -69,6 +69,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O
|
|||
private SwitchCompat swIdenticons;
|
||||
private SwitchCompat swPreview;
|
||||
private SwitchCompat swAddresses;
|
||||
private SwitchCompat swImages;
|
||||
|
||||
private SwitchCompat swPull;
|
||||
private SwitchCompat swActionbar;
|
||||
|
@ -90,7 +91,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O
|
|||
private Group grpNotification;
|
||||
|
||||
static String[] OPTIONS_RESTART = new String[]{
|
||||
"unified", "date", "threading", "avatars", "identicons", "preview", "addresses",
|
||||
"unified", "date", "threading", "avatars", "identicons", "preview", "addresses", "autoimages",
|
||||
"pull", "actionbar", "autoclose", "autonext", "confirm", "debug"
|
||||
};
|
||||
|
||||
|
@ -129,6 +130,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O
|
|||
swIdenticons = view.findViewById(R.id.swIdenticons);
|
||||
swPreview = view.findViewById(R.id.swPreview);
|
||||
swAddresses = view.findViewById(R.id.swAddresses);
|
||||
swImages = view.findViewById(R.id.swImages);
|
||||
|
||||
swPull = view.findViewById(R.id.swPull);
|
||||
swActionbar = view.findViewById(R.id.swActionbar);
|
||||
|
@ -266,6 +268,13 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O
|
|||
}
|
||||
});
|
||||
|
||||
swImages.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||
prefs.edit().putBoolean("autoimages", checked).apply();
|
||||
}
|
||||
});
|
||||
|
||||
swPull.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||
|
@ -454,6 +463,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O
|
|||
swIdenticons.setChecked(prefs.getBoolean("identicons", false));
|
||||
swPreview.setChecked(prefs.getBoolean("preview", false));
|
||||
swAddresses.setChecked(prefs.getBoolean("addresses", true));
|
||||
swImages.setChecked(prefs.getBoolean("autoimages", false));
|
||||
|
||||
swPull.setChecked(prefs.getBoolean("pull", true));
|
||||
swActionbar.setChecked(prefs.getBoolean("actionbar", true));
|
||||
|
|
|
@ -305,6 +305,18 @@
|
|||
app:layout_constraintTop_toBottomOf="@id/tvPreviewHint"
|
||||
app:switchPadding="12dp" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/swImages"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginEnd="12dp"
|
||||
android:text="@string/title_advanced_images"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/swAddresses"
|
||||
app:switchPadding="12dp" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/swActionbar"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -314,7 +326,7 @@
|
|||
android:layout_marginEnd="12dp"
|
||||
android:text="@string/title_advanced_actionbar"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/swAddresses"
|
||||
app:layout_constraintTop_toBottomOf="@id/swImages"
|
||||
app:switchPadding="12dp" />
|
||||
|
||||
<TextView
|
||||
|
|
|
@ -144,6 +144,7 @@
|
|||
<string name="title_advanced_identicons">Show identicons</string>
|
||||
<string name="title_advanced_preview">Show message preview</string>
|
||||
<string name="title_advanced_addresses">Show address details by default</string>
|
||||
<string name="title_advanced_images">Automatically show images for known contacts</string>
|
||||
<string name="title_advanced_actionbar">Conversation action bar</string>
|
||||
|
||||
<string name="title_advanced_light">Use notification light</string>
|
||||
|
|
Loading…
Reference in New Issue