mirror of
https://github.com/moparisthebest/k-9
synced 2024-12-25 00:58:50 -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="compatDividerVertical" format="reference"/>
|
||||
<attr name="compatSelectableItemBackground" format="reference"/>
|
||||
<attr name="contactPictureFallbackDefaultBackgroundColor" format="reference|color"/>
|
||||
</declare-styleable>
|
||||
|
||||
</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="mark_all_as_read">Mark all as read</string>
|
||||
|
||||
<string name="global_settings_colorize_missing_contact_pictures">Colorize missing contact pictures</string>
|
||||
</resources>
|
||||
|
@ -51,6 +51,7 @@
|
||||
<item name="messageComposeAddContactImage">@drawable/ic_button_add_contact_light</item>
|
||||
<item name="compatDividerVertical">?attr/messageListDividerColor</item>
|
||||
<item name="compatSelectableItemBackground">@android:color/transparent</item>
|
||||
<item name="contactPictureFallbackDefaultBackgroundColor">#ffababab</item>
|
||||
</style>
|
||||
|
||||
<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="compatDividerVertical">?attr/messageListDividerColor</item>
|
||||
<item name="compatSelectableItemBackground">@android:color/transparent</item>
|
||||
<item name="contactPictureFallbackDefaultBackgroundColor">#ff606060</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.K9.Light" parent="Theme.K9.Light.Base">
|
||||
|
@ -178,6 +178,12 @@
|
||||
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
|
||||
android:persistent="false"
|
||||
android:key="messagelist_background_as_unread_indicator"
|
||||
|
@ -260,6 +260,7 @@ public class K9 extends Application {
|
||||
private static boolean sUseBackgroundAsUnreadIndicator = true;
|
||||
private static boolean sThreadedViewEnabled = true;
|
||||
private static SplitViewMode sSplitViewMode = SplitViewMode.NEVER;
|
||||
private static boolean sColorizeMissingContactPictures = true;
|
||||
|
||||
/**
|
||||
* @see #areDatabasesUpToDate()
|
||||
@ -537,6 +538,7 @@ public class K9 extends Application {
|
||||
editor.putBoolean("useBackgroundAsUnreadIndicator", sUseBackgroundAsUnreadIndicator);
|
||||
editor.putBoolean("threadedView", sThreadedViewEnabled);
|
||||
editor.putString("splitViewMode", sSplitViewMode.name());
|
||||
editor.putBoolean("colorizeMissingContactPictures", sColorizeMissingContactPictures);
|
||||
fontSizes.save(editor);
|
||||
}
|
||||
|
||||
@ -757,6 +759,8 @@ public class K9 extends Application {
|
||||
setBackgroundOps(BACKGROUND_OPS.WHEN_CHECKED);
|
||||
}
|
||||
|
||||
sColorizeMissingContactPictures = sprefs.getBoolean("colorizeMissingContactPictures", true);
|
||||
|
||||
K9.setK9Language(sprefs.getString("language", ""));
|
||||
|
||||
int themeValue = sprefs.getInt("theme", Theme.LIGHT.ordinal());
|
||||
@ -1302,6 +1306,15 @@ public class K9 extends Application {
|
||||
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.
|
||||
*
|
||||
|
@ -38,6 +38,8 @@ public class ContactPictureLoader {
|
||||
private Contacts mContactsHelper;
|
||||
private int mPictureSizeInPx;
|
||||
|
||||
private int mDefaultBackgroundColor;
|
||||
|
||||
/**
|
||||
* LRU cache of contact pictures.
|
||||
*/
|
||||
@ -59,7 +61,16 @@ public class ContactPictureLoader {
|
||||
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();
|
||||
mContentResolver = appContext.getContentResolver();
|
||||
mResources = appContext.getResources();
|
||||
@ -68,6 +79,8 @@ public class ContactPictureLoader {
|
||||
float scale = mResources.getDisplayMetrics().density;
|
||||
mPictureSizeInPx = (int) (PICTURE_SIZE * scale);
|
||||
|
||||
mDefaultBackgroundColor = defaultBackgroundColor;
|
||||
|
||||
ActivityManager activityManager =
|
||||
(ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
|
||||
int memClass = activityManager.getMemoryClass();
|
||||
@ -130,6 +143,10 @@ public class ContactPictureLoader {
|
||||
}
|
||||
|
||||
private int calcUnknownContactColor(Address address) {
|
||||
if (mDefaultBackgroundColor != 0) {
|
||||
return mDefaultBackgroundColor;
|
||||
}
|
||||
|
||||
int val = address.getAddress().toLowerCase().hashCode();
|
||||
int rgb = CONTACT_DUMMY_COLORS_ARGB[Math.abs(val) % CONTACT_DUMMY_COLORS_ARGB.length];
|
||||
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_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_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_RETURN_TO_LIST = "messageview_return_to_list";
|
||||
@ -118,6 +120,7 @@ public class Prefs extends K9PreferenceActivity {
|
||||
private CheckBoxPreference mShowContactName;
|
||||
private CheckBoxPreference mChangeContactNameColor;
|
||||
private CheckBoxPreference mShowContactPicture;
|
||||
private CheckBoxPreference mColorizeMissingContactPictures;
|
||||
private CheckBoxPreference mFixedWidth;
|
||||
private CheckBoxPreference mReturnToList;
|
||||
private CheckBoxPreference mShowNext;
|
||||
@ -247,6 +250,10 @@ public class Prefs extends K9PreferenceActivity {
|
||||
mShowContactPicture = (CheckBoxPreference)findPreference(PREFERENCE_MESSAGELIST_SHOW_CONTACT_PICTURE);
|
||||
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.setChecked(K9.useBackgroundAsUnreadIndicator());
|
||||
|
||||
@ -456,6 +463,7 @@ public class Prefs extends K9PreferenceActivity {
|
||||
K9.setMessageListSenderAboveSubject(mSenderAboveSubject.isChecked());
|
||||
K9.setShowContactName(mShowContactName.isChecked());
|
||||
K9.setShowContactPicture(mShowContactPicture.isChecked());
|
||||
K9.setColorizeMissingContactPictures(mColorizeMissingContactPictures.isChecked());
|
||||
K9.setUseBackgroundAsUnreadIndicator(mBackgroundAsUnreadIndicator.isChecked());
|
||||
K9.setThreadedViewEnabled(mThreadedView.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.controller.MessagingController;
|
||||
import com.fsck.k9.fragment.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
|
||||
import com.fsck.k9.helper.ContactPicture;
|
||||
import com.fsck.k9.helper.MergeCursorWithUniqueId;
|
||||
import com.fsck.k9.helper.MessageHelper;
|
||||
import com.fsck.k9.helper.StringUtils;
|
||||
@ -788,8 +789,7 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
|
||||
mCheckboxes = K9.messageListCheckboxes();
|
||||
|
||||
if (K9.showContactPicture()) {
|
||||
mContactsPictureLoader = new ContactPictureLoader(getActivity(),
|
||||
R.drawable.ic_contact_picture);
|
||||
mContactsPictureLoader = ContactPicture.getContactPictureLoader(getActivity());
|
||||
}
|
||||
|
||||
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(
|
||||
new V(28, new BooleanSetting(true))
|
||||
));
|
||||
s.put("colorizeMissingContactPictures", Settings.versions(
|
||||
new V(29, new BooleanSetting(true))
|
||||
));
|
||||
|
||||
SETTINGS = Collections.unmodifiableMap(s);
|
||||
|
||||
|
@ -24,6 +24,7 @@ import com.fsck.k9.FontSizes;
|
||||
import com.fsck.k9.K9;
|
||||
import com.fsck.k9.R;
|
||||
import com.fsck.k9.activity.misc.ContactPictureLoader;
|
||||
import com.fsck.k9.helper.ContactPicture;
|
||||
import com.fsck.k9.helper.Contacts;
|
||||
import com.fsck.k9.Account;
|
||||
import com.fsck.k9.helper.MessageHelper;
|
||||
@ -253,7 +254,7 @@ public class MessageHeader extends ScrollView implements OnClickListener {
|
||||
|
||||
if (K9.showContactPicture()) {
|
||||
mContactBadge.setVisibility(View.VISIBLE);
|
||||
mContactsPictureLoader = new ContactPictureLoader(mContext, R.drawable.ic_contact_picture);
|
||||
mContactsPictureLoader = ContactPicture.getContactPictureLoader(mContext);
|
||||
} else {
|
||||
mContactBadge.setVisibility(View.GONE);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user