mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-23 18:02:15 -05:00
Add setting to toggle colored background of fallback contact pictures
This commit is contained in:
parent
3064d8ab31
commit
20fcd6f63d
@ -51,6 +51,7 @@
|
|||||||
<attr name="composerBackgroundColor" format="color"/>
|
<attr name="composerBackgroundColor" format="color"/>
|
||||||
<attr name="compatDividerVertical" format="reference"/>
|
<attr name="compatDividerVertical" format="reference"/>
|
||||||
<attr name="compatSelectableItemBackground" format="reference"/>
|
<attr name="compatSelectableItemBackground" format="reference"/>
|
||||||
|
<attr name="contactPictureFallbackDefaultBackgroundColor" format="reference|color"/>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1147,4 +1147,6 @@ Please submit bug reports, contribute new features and ask questions at
|
|||||||
<string name="preposition_for_date">on <xliff:g id="date">%s</xliff:g></string>
|
<string name="preposition_for_date">on <xliff:g id="date">%s</xliff:g></string>
|
||||||
|
|
||||||
<string name="mark_all_as_read">Mark all as read</string>
|
<string name="mark_all_as_read">Mark all as read</string>
|
||||||
|
|
||||||
|
<string name="global_settings_colorize_missing_contact_pictures">Colorize missing contact pictures</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
<item name="messageComposeAddContactImage">@drawable/ic_button_add_contact_light</item>
|
<item name="messageComposeAddContactImage">@drawable/ic_button_add_contact_light</item>
|
||||||
<item name="compatDividerVertical">?attr/messageListDividerColor</item>
|
<item name="compatDividerVertical">?attr/messageListDividerColor</item>
|
||||||
<item name="compatSelectableItemBackground">@android:color/transparent</item>
|
<item name="compatSelectableItemBackground">@android:color/transparent</item>
|
||||||
|
<item name="contactPictureFallbackDefaultBackgroundColor">#ffababab</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.K9.Dark.Base" parent="Theme.Sherlock">
|
<style name="Theme.K9.Dark.Base" parent="Theme.Sherlock">
|
||||||
@ -101,6 +102,7 @@
|
|||||||
<item name="messageComposeAddContactImage">@drawable/ic_button_add_contact_dark</item>
|
<item name="messageComposeAddContactImage">@drawable/ic_button_add_contact_dark</item>
|
||||||
<item name="compatDividerVertical">?attr/messageListDividerColor</item>
|
<item name="compatDividerVertical">?attr/messageListDividerColor</item>
|
||||||
<item name="compatSelectableItemBackground">@android:color/transparent</item>
|
<item name="compatSelectableItemBackground">@android:color/transparent</item>
|
||||||
|
<item name="contactPictureFallbackDefaultBackgroundColor">#ff606060</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.K9.Light" parent="Theme.K9.Light.Base">
|
<style name="Theme.K9.Light" parent="Theme.K9.Light.Base">
|
||||||
|
@ -178,6 +178,12 @@
|
|||||||
android:summary="@string/global_settings_show_contact_picture_summary"
|
android:summary="@string/global_settings_show_contact_picture_summary"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:persistent="false"
|
||||||
|
android:key="messagelist_colorize_missing_contact_pictures"
|
||||||
|
android:title="@string/global_settings_colorize_missing_contact_pictures"
|
||||||
|
/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:key="messagelist_background_as_unread_indicator"
|
android:key="messagelist_background_as_unread_indicator"
|
||||||
|
@ -260,6 +260,7 @@ public class K9 extends Application {
|
|||||||
private static boolean sUseBackgroundAsUnreadIndicator = true;
|
private static boolean sUseBackgroundAsUnreadIndicator = true;
|
||||||
private static boolean sThreadedViewEnabled = true;
|
private static boolean sThreadedViewEnabled = true;
|
||||||
private static SplitViewMode sSplitViewMode = SplitViewMode.NEVER;
|
private static SplitViewMode sSplitViewMode = SplitViewMode.NEVER;
|
||||||
|
private static boolean sColorizeMissingContactPictures = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #areDatabasesUpToDate()
|
* @see #areDatabasesUpToDate()
|
||||||
@ -537,6 +538,7 @@ public class K9 extends Application {
|
|||||||
editor.putBoolean("useBackgroundAsUnreadIndicator", sUseBackgroundAsUnreadIndicator);
|
editor.putBoolean("useBackgroundAsUnreadIndicator", sUseBackgroundAsUnreadIndicator);
|
||||||
editor.putBoolean("threadedView", sThreadedViewEnabled);
|
editor.putBoolean("threadedView", sThreadedViewEnabled);
|
||||||
editor.putString("splitViewMode", sSplitViewMode.name());
|
editor.putString("splitViewMode", sSplitViewMode.name());
|
||||||
|
editor.putBoolean("colorizeMissingContactPictures", sColorizeMissingContactPictures);
|
||||||
fontSizes.save(editor);
|
fontSizes.save(editor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -757,6 +759,8 @@ public class K9 extends Application {
|
|||||||
setBackgroundOps(BACKGROUND_OPS.WHEN_CHECKED);
|
setBackgroundOps(BACKGROUND_OPS.WHEN_CHECKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sColorizeMissingContactPictures = sprefs.getBoolean("colorizeMissingContactPictures", true);
|
||||||
|
|
||||||
K9.setK9Language(sprefs.getString("language", ""));
|
K9.setK9Language(sprefs.getString("language", ""));
|
||||||
|
|
||||||
int themeValue = sprefs.getInt("theme", Theme.LIGHT.ordinal());
|
int themeValue = sprefs.getInt("theme", Theme.LIGHT.ordinal());
|
||||||
@ -1302,6 +1306,15 @@ public class K9 extends Application {
|
|||||||
sShowContactPicture = show;
|
sShowContactPicture = show;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isColorizeMissingContactPictures() {
|
||||||
|
return sColorizeMissingContactPictures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setColorizeMissingContactPictures(boolean enabled) {
|
||||||
|
sColorizeMissingContactPictures = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if we already know whether all databases are using the current database schema.
|
* Check if we already know whether all databases are using the current database schema.
|
||||||
*
|
*
|
||||||
|
@ -38,6 +38,8 @@ public class ContactPictureLoader {
|
|||||||
private Contacts mContactsHelper;
|
private Contacts mContactsHelper;
|
||||||
private int mPictureSizeInPx;
|
private int mPictureSizeInPx;
|
||||||
|
|
||||||
|
private int mDefaultBackgroundColor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LRU cache of contact pictures.
|
* LRU cache of contact pictures.
|
||||||
*/
|
*/
|
||||||
@ -59,7 +61,16 @@ public class ContactPictureLoader {
|
|||||||
0xffCC0000
|
0xffCC0000
|
||||||
};
|
};
|
||||||
|
|
||||||
public ContactPictureLoader(Context context, int defaultPictureResource) {
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* A {@link Context} instance.
|
||||||
|
* @param defaultBackgroundColor
|
||||||
|
* The ARGB value to be used as background color for the fallback picture. {@code 0} to
|
||||||
|
* use a dynamically calculated background color.
|
||||||
|
*/
|
||||||
|
public ContactPictureLoader(Context context, int defaultBackgroundColor) {
|
||||||
Context appContext = context.getApplicationContext();
|
Context appContext = context.getApplicationContext();
|
||||||
mContentResolver = appContext.getContentResolver();
|
mContentResolver = appContext.getContentResolver();
|
||||||
mResources = appContext.getResources();
|
mResources = appContext.getResources();
|
||||||
@ -68,6 +79,8 @@ public class ContactPictureLoader {
|
|||||||
float scale = mResources.getDisplayMetrics().density;
|
float scale = mResources.getDisplayMetrics().density;
|
||||||
mPictureSizeInPx = (int) (PICTURE_SIZE * scale);
|
mPictureSizeInPx = (int) (PICTURE_SIZE * scale);
|
||||||
|
|
||||||
|
mDefaultBackgroundColor = defaultBackgroundColor;
|
||||||
|
|
||||||
ActivityManager activityManager =
|
ActivityManager activityManager =
|
||||||
(ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
|
(ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
|
||||||
int memClass = activityManager.getMemoryClass();
|
int memClass = activityManager.getMemoryClass();
|
||||||
@ -130,6 +143,10 @@ public class ContactPictureLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int calcUnknownContactColor(Address address) {
|
private int calcUnknownContactColor(Address address) {
|
||||||
|
if (mDefaultBackgroundColor != 0) {
|
||||||
|
return mDefaultBackgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
int val = address.getAddress().toLowerCase().hashCode();
|
int val = address.getAddress().toLowerCase().hashCode();
|
||||||
int rgb = CONTACT_DUMMY_COLORS_ARGB[Math.abs(val) % CONTACT_DUMMY_COLORS_ARGB.length];
|
int rgb = CONTACT_DUMMY_COLORS_ARGB[Math.abs(val) % CONTACT_DUMMY_COLORS_ARGB.length];
|
||||||
return rgb;
|
return rgb;
|
||||||
|
@ -72,6 +72,8 @@ public class Prefs extends K9PreferenceActivity {
|
|||||||
private static final String PREFERENCE_MESSAGELIST_SHOW_CONTACT_NAME = "messagelist_show_contact_name";
|
private static final String PREFERENCE_MESSAGELIST_SHOW_CONTACT_NAME = "messagelist_show_contact_name";
|
||||||
private static final String PREFERENCE_MESSAGELIST_CONTACT_NAME_COLOR = "messagelist_contact_name_color";
|
private static final String PREFERENCE_MESSAGELIST_CONTACT_NAME_COLOR = "messagelist_contact_name_color";
|
||||||
private static final String PREFERENCE_MESSAGELIST_SHOW_CONTACT_PICTURE = "messagelist_show_contact_picture";
|
private static final String PREFERENCE_MESSAGELIST_SHOW_CONTACT_PICTURE = "messagelist_show_contact_picture";
|
||||||
|
private static final String PREFERENCE_MESSAGELIST_COLORIZE_MISSING_CONTACT_PICTURES =
|
||||||
|
"messagelist_colorize_missing_contact_pictures";
|
||||||
private static final String PREFERENCE_MESSAGEVIEW_FIXEDWIDTH = "messageview_fixedwidth_font";
|
private static final String PREFERENCE_MESSAGEVIEW_FIXEDWIDTH = "messageview_fixedwidth_font";
|
||||||
|
|
||||||
private static final String PREFERENCE_MESSAGEVIEW_RETURN_TO_LIST = "messageview_return_to_list";
|
private static final String PREFERENCE_MESSAGEVIEW_RETURN_TO_LIST = "messageview_return_to_list";
|
||||||
@ -118,6 +120,7 @@ public class Prefs extends K9PreferenceActivity {
|
|||||||
private CheckBoxPreference mShowContactName;
|
private CheckBoxPreference mShowContactName;
|
||||||
private CheckBoxPreference mChangeContactNameColor;
|
private CheckBoxPreference mChangeContactNameColor;
|
||||||
private CheckBoxPreference mShowContactPicture;
|
private CheckBoxPreference mShowContactPicture;
|
||||||
|
private CheckBoxPreference mColorizeMissingContactPictures;
|
||||||
private CheckBoxPreference mFixedWidth;
|
private CheckBoxPreference mFixedWidth;
|
||||||
private CheckBoxPreference mReturnToList;
|
private CheckBoxPreference mReturnToList;
|
||||||
private CheckBoxPreference mShowNext;
|
private CheckBoxPreference mShowNext;
|
||||||
@ -247,6 +250,10 @@ public class Prefs extends K9PreferenceActivity {
|
|||||||
mShowContactPicture = (CheckBoxPreference)findPreference(PREFERENCE_MESSAGELIST_SHOW_CONTACT_PICTURE);
|
mShowContactPicture = (CheckBoxPreference)findPreference(PREFERENCE_MESSAGELIST_SHOW_CONTACT_PICTURE);
|
||||||
mShowContactPicture.setChecked(K9.showContactPicture());
|
mShowContactPicture.setChecked(K9.showContactPicture());
|
||||||
|
|
||||||
|
mColorizeMissingContactPictures = (CheckBoxPreference)findPreference(
|
||||||
|
PREFERENCE_MESSAGELIST_COLORIZE_MISSING_CONTACT_PICTURES);
|
||||||
|
mColorizeMissingContactPictures.setChecked(K9.isColorizeMissingContactPictures());
|
||||||
|
|
||||||
mBackgroundAsUnreadIndicator = (CheckBoxPreference)findPreference(PREFERENCE_BACKGROUND_AS_UNREAD_INDICATOR);
|
mBackgroundAsUnreadIndicator = (CheckBoxPreference)findPreference(PREFERENCE_BACKGROUND_AS_UNREAD_INDICATOR);
|
||||||
mBackgroundAsUnreadIndicator.setChecked(K9.useBackgroundAsUnreadIndicator());
|
mBackgroundAsUnreadIndicator.setChecked(K9.useBackgroundAsUnreadIndicator());
|
||||||
|
|
||||||
@ -456,6 +463,7 @@ public class Prefs extends K9PreferenceActivity {
|
|||||||
K9.setMessageListSenderAboveSubject(mSenderAboveSubject.isChecked());
|
K9.setMessageListSenderAboveSubject(mSenderAboveSubject.isChecked());
|
||||||
K9.setShowContactName(mShowContactName.isChecked());
|
K9.setShowContactName(mShowContactName.isChecked());
|
||||||
K9.setShowContactPicture(mShowContactPicture.isChecked());
|
K9.setShowContactPicture(mShowContactPicture.isChecked());
|
||||||
|
K9.setColorizeMissingContactPictures(mColorizeMissingContactPictures.isChecked());
|
||||||
K9.setUseBackgroundAsUnreadIndicator(mBackgroundAsUnreadIndicator.isChecked());
|
K9.setUseBackgroundAsUnreadIndicator(mBackgroundAsUnreadIndicator.isChecked());
|
||||||
K9.setThreadedViewEnabled(mThreadedView.isChecked());
|
K9.setThreadedViewEnabled(mThreadedView.isChecked());
|
||||||
K9.setChangeContactNameColor(mChangeContactNameColor.isChecked());
|
K9.setChangeContactNameColor(mChangeContactNameColor.isChecked());
|
||||||
|
@ -78,6 +78,7 @@ import com.fsck.k9.activity.misc.ContactPictureLoader;
|
|||||||
import com.fsck.k9.cache.EmailProviderCache;
|
import com.fsck.k9.cache.EmailProviderCache;
|
||||||
import com.fsck.k9.controller.MessagingController;
|
import com.fsck.k9.controller.MessagingController;
|
||||||
import com.fsck.k9.fragment.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
|
import com.fsck.k9.fragment.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
|
||||||
|
import com.fsck.k9.helper.ContactPicture;
|
||||||
import com.fsck.k9.helper.MergeCursorWithUniqueId;
|
import com.fsck.k9.helper.MergeCursorWithUniqueId;
|
||||||
import com.fsck.k9.helper.MessageHelper;
|
import com.fsck.k9.helper.MessageHelper;
|
||||||
import com.fsck.k9.helper.StringUtils;
|
import com.fsck.k9.helper.StringUtils;
|
||||||
@ -788,8 +789,7 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
|||||||
mCheckboxes = K9.messageListCheckboxes();
|
mCheckboxes = K9.messageListCheckboxes();
|
||||||
|
|
||||||
if (K9.showContactPicture()) {
|
if (K9.showContactPicture()) {
|
||||||
mContactsPictureLoader = new ContactPictureLoader(getActivity(),
|
mContactsPictureLoader = ContactPicture.getContactPictureLoader(getActivity());
|
||||||
R.drawable.ic_contact_picture);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
restoreInstanceState(savedInstanceState);
|
restoreInstanceState(savedInstanceState);
|
||||||
|
25
src/com/fsck/k9/helper/ContactPicture.java
Normal file
25
src/com/fsck/k9/helper/ContactPicture.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package com.fsck.k9.helper;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
|
||||||
|
import com.fsck.k9.K9;
|
||||||
|
import com.fsck.k9.R;
|
||||||
|
import com.fsck.k9.activity.misc.ContactPictureLoader;
|
||||||
|
|
||||||
|
public class ContactPicture {
|
||||||
|
|
||||||
|
public static ContactPictureLoader getContactPictureLoader(Context context) {
|
||||||
|
final int defaultBgColor;
|
||||||
|
if (!K9.isColorizeMissingContactPictures()) {
|
||||||
|
TypedValue outValue = new TypedValue();
|
||||||
|
context.getTheme().resolveAttribute(R.attr.contactPictureFallbackDefaultBackgroundColor,
|
||||||
|
outValue, true);
|
||||||
|
defaultBgColor = outValue.data;
|
||||||
|
} else {
|
||||||
|
defaultBgColor = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ContactPictureLoader(context, defaultBgColor);
|
||||||
|
}
|
||||||
|
}
|
@ -225,6 +225,9 @@ public class GlobalSettings {
|
|||||||
s.put("autofitWidth", Settings.versions(
|
s.put("autofitWidth", Settings.versions(
|
||||||
new V(28, new BooleanSetting(true))
|
new V(28, new BooleanSetting(true))
|
||||||
));
|
));
|
||||||
|
s.put("colorizeMissingContactPictures", Settings.versions(
|
||||||
|
new V(29, new BooleanSetting(true))
|
||||||
|
));
|
||||||
|
|
||||||
SETTINGS = Collections.unmodifiableMap(s);
|
SETTINGS = Collections.unmodifiableMap(s);
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ import com.fsck.k9.FontSizes;
|
|||||||
import com.fsck.k9.K9;
|
import com.fsck.k9.K9;
|
||||||
import com.fsck.k9.R;
|
import com.fsck.k9.R;
|
||||||
import com.fsck.k9.activity.misc.ContactPictureLoader;
|
import com.fsck.k9.activity.misc.ContactPictureLoader;
|
||||||
|
import com.fsck.k9.helper.ContactPicture;
|
||||||
import com.fsck.k9.helper.Contacts;
|
import com.fsck.k9.helper.Contacts;
|
||||||
import com.fsck.k9.Account;
|
import com.fsck.k9.Account;
|
||||||
import com.fsck.k9.helper.MessageHelper;
|
import com.fsck.k9.helper.MessageHelper;
|
||||||
@ -253,7 +254,7 @@ public class MessageHeader extends ScrollView implements OnClickListener {
|
|||||||
|
|
||||||
if (K9.showContactPicture()) {
|
if (K9.showContactPicture()) {
|
||||||
mContactBadge.setVisibility(View.VISIBLE);
|
mContactBadge.setVisibility(View.VISIBLE);
|
||||||
mContactsPictureLoader = new ContactPictureLoader(mContext, R.drawable.ic_contact_picture);
|
mContactsPictureLoader = ContactPicture.getContactPictureLoader(mContext);
|
||||||
} else {
|
} else {
|
||||||
mContactBadge.setVisibility(View.GONE);
|
mContactBadge.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user