diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 8608cb367..cc96d658c 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -149,6 +149,24 @@ NOT_SECOND_CLASS + + @string/sort_by_date + @string/sort_by_subject + @string/sort_by_sender + @string/sort_by_unread + @string/sort_by_flag + @string/sort_by_attach + + + + SORT_DATE + SORT_SUBJECT + SORT_SENDER + SORT_UNREAD + SORT_FLAGGED + SORT_ATTACHMENT + + @string/account_settings_show_pictures_never @string/account_settings_show_pictures_only_from_contacts diff --git a/res/values/strings.xml b/res/values/strings.xml index 51ea0c50f..a1e668f7d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -553,6 +553,10 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin Enable refile buttons Show the Archive, Move, and Spam buttons. + Default Sort Type + Sort order + Sort in ascending order + Always show images No From contacts diff --git a/res/xml/account_settings_preferences.xml b/res/xml/account_settings_preferences.xml index 9fa5a11a6..0356280ed 100644 --- a/res/xml/account_settings_preferences.xml +++ b/res/xml/account_settings_preferences.xml @@ -56,6 +56,21 @@ android:title="@string/account_settings_color_label" android:summary="@string/account_settings_color_summary" /> + + + + @@ -121,6 +125,8 @@ public class Account implements BaseAccount { private boolean mSaveAllHeaders; private boolean mPushPollOnConnect; private boolean mNotifySync; + private SORT_TYPE mSortType; + private boolean mSortAscending; private ShowPictures mShowPictures; private boolean mEnableMoveButtons; private boolean mIsSignatureBeforeQuotedText; @@ -210,6 +216,8 @@ public class Account implements BaseAccount { mFolderSyncMode = FolderMode.FIRST_CLASS; mFolderPushMode = FolderMode.FIRST_CLASS; mFolderTargetMode = FolderMode.NOT_SECOND_CLASS; + mSortType = DEFAULT_SORT_TYPE; + mSortAscending = DEFAULT_SORT_ASCENDING; mShowPictures = ShowPictures.NEVER; mEnableMoveButtons = false; mIsSignatureBeforeQuotedText = false; @@ -331,6 +339,15 @@ public class Account implements BaseAccount { (random.nextInt(0x70) * 0xffff) + 0xff000000); + try { + mSortType = SORT_TYPE.valueOf(prefs.getString(mUuid + ".sortTypeEnum", + SORT_TYPE.SORT_DATE.name())); + } catch (Exception e) { + mSortType = SORT_TYPE.SORT_DATE; + } + + mSortAscending = prefs.getBoolean(mUuid + ".sortAscending", false); + try { mShowPictures = ShowPictures.valueOf(prefs.getString(mUuid + ".showPicturesEnum", ShowPictures.NEVER.name())); @@ -463,6 +480,8 @@ public class Account implements BaseAccount { editor.remove(mUuid + ".messageFormatAuto"); editor.remove(mUuid + ".quoteStyle"); editor.remove(mUuid + ".quotePrefix"); + editor.remove(mUuid + ".sortTypeEnum"); + editor.remove(mUuid + ".sortAscending"); editor.remove(mUuid + ".showPicturesEnum"); editor.remove(mUuid + ".replyAfterQuote"); editor.remove(mUuid + ".stripSignature"); @@ -595,6 +614,8 @@ public class Account implements BaseAccount { editor.putString(mUuid + ".spamFolderName", mSpamFolderName); editor.putString(mUuid + ".autoExpandFolderName", mAutoExpandFolderName); editor.putInt(mUuid + ".accountNumber", mAccountNumber); + editor.putString(mUuid + ".sortTypeEnum", mSortType.name()); + editor.putBoolean(mUuid + ".sortAscending", mSortAscending); editor.putString(mUuid + ".showPicturesEnum", mShowPictures.name()); editor.putBoolean(mUuid + ".enableMoveButtons", mEnableMoveButtons); editor.putString(mUuid + ".folderDisplayMode", mFolderDisplayMode.name()); @@ -1000,6 +1021,22 @@ public class Account implements BaseAccount { this.mNotifySync = showOngoing; } + public synchronized SORT_TYPE getSortType() { + return mSortType; + } + + public synchronized void setSortType(SORT_TYPE sortType) { + mSortType = sortType; + } + + public synchronized boolean isSortAscending() { + return mSortAscending; + } + + public synchronized void setSortAscending(boolean sortAscending) { + mSortAscending = sortAscending; + } + public synchronized ShowPictures getShowPictures() { return mShowPictures; } diff --git a/src/com/fsck/k9/activity/MessageList.java b/src/com/fsck/k9/activity/MessageList.java index f874267f9..d2238a27e 100644 --- a/src/com/fsck/k9/activity/MessageList.java +++ b/src/com/fsck/k9/activity/MessageList.java @@ -809,8 +809,10 @@ public class MessageList mStars = K9.messageListStars(); mCheckboxes = K9.messageListCheckboxes(); - sortType = mController.getSortType(); - sortAscending = mController.isSortAscending(sortType); + sortType = mAccount.getSortType(); + mController.setSortType(sortType); + sortAscending = mAccount.isSortAscending(); + mController.setSortAscending(sortType, sortAscending); sortDateAscending = mController.isSortAscending(SORT_TYPE.SORT_DATE); mController.addListener(mAdapter.mListener); diff --git a/src/com/fsck/k9/activity/setup/AccountSettings.java b/src/com/fsck/k9/activity/setup/AccountSettings.java index 9ac8f7058..140fb0f9c 100644 --- a/src/com/fsck/k9/activity/setup/AccountSettings.java +++ b/src/com/fsck/k9/activity/setup/AccountSettings.java @@ -28,6 +28,7 @@ import com.fsck.k9.activity.ChooseIdentity; import com.fsck.k9.activity.ColorPickerDialog; import com.fsck.k9.activity.K9PreferenceActivity; import com.fsck.k9.activity.ManageIdentities; +import com.fsck.k9.controller.MessagingController.SORT_TYPE; import com.fsck.k9.crypto.Apg; import com.fsck.k9.mail.Store; import com.fsck.k9.service.MailService; @@ -53,6 +54,8 @@ public class AccountSettings extends K9PreferenceActivity { private static final String PREFERENCE_FREQUENCY = "account_check_frequency"; private static final String PREFERENCE_DISPLAY_COUNT = "account_display_count"; private static final String PREFERENCE_DEFAULT = "account_default"; + private static final String PREFERENCE_SORT_TYPE = "sort_type_enum"; + private static final String PREFERENCE_SORT_ASCENDING = "sort_ascending"; private static final String PREFERENCE_SHOW_PICTURES = "show_pictures_enum"; private static final String PREFERENCE_ENABLE_MOVE_BUTTONS = "enable_move_buttons"; private static final String PREFERENCE_NOTIFY = "account_notify"; @@ -121,6 +124,8 @@ public class AccountSettings extends K9PreferenceActivity { private CheckBoxPreference mAccountDefault; private CheckBoxPreference mAccountNotify; private CheckBoxPreference mAccountNotifySelf; + private ListPreference mAccountSortType; + private CheckBoxPreference mAccountSortAscending; private ListPreference mAccountShowPictures; private CheckBoxPreference mAccountEnableMoveButtons; private CheckBoxPreference mAccountNotifySync; @@ -427,6 +432,22 @@ public class AccountSettings extends K9PreferenceActivity { mAccountEnableMoveButtons.setEnabled(mIsMoveCapable); mAccountEnableMoveButtons.setChecked(mAccount.getEnableMoveButtons()); + mAccountSortType = (ListPreference) findPreference(PREFERENCE_SORT_TYPE); + mAccountSortType.setValue("" + mAccount.getSortType()); + mAccountSortType.setSummary(mAccountSortType.getEntry()); + mAccountSortType.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + public boolean onPreferenceChange(Preference preference, Object newValue) { + final String summary = newValue.toString(); + int index = mAccountSortType.findIndexOfValue(summary); + mAccountSortType.setSummary(mAccountSortType.getEntries()[index]); + mAccountSortType.setValue(summary); + return false; + } + }); + + mAccountSortAscending = (CheckBoxPreference) findPreference(PREFERENCE_SORT_ASCENDING); + mAccountSortAscending.setChecked(mAccount.isSortAscending()); + mAccountShowPictures = (ListPreference) findPreference(PREFERENCE_SHOW_PICTURES); mAccountShowPictures.setValue("" + mAccount.getShowPictures()); mAccountShowPictures.setSummary(mAccountShowPictures.getEntry()); @@ -750,6 +771,9 @@ public class AccountSettings extends K9PreferenceActivity { } } + mAccount.setSortType(SORT_TYPE.valueOf(mAccountSortType.getValue())); + mAccount.setSortAscending(mAccountSortAscending.isChecked()); + mAccount.setShowPictures(Account.ShowPictures.valueOf(mAccountShowPictures.getValue())); if (mIsPushCapable) { diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java index 1b2b47a6b..c23a02162 100644 --- a/src/com/fsck/k9/controller/MessagingController.java +++ b/src/com/fsck/k9/controller/MessagingController.java @@ -173,7 +173,7 @@ public class MessagingController implements Runnable { } } - private SORT_TYPE sortType = SORT_TYPE.SORT_DATE; + private SORT_TYPE sortType = Account.DEFAULT_SORT_TYPE; private MessagingListener checkMailListener = null; diff --git a/src/com/fsck/k9/preferences/AccountSettings.java b/src/com/fsck/k9/preferences/AccountSettings.java index fdc311820..67c55c0cf 100644 --- a/src/com/fsck/k9/preferences/AccountSettings.java +++ b/src/com/fsck/k9/preferences/AccountSettings.java @@ -12,6 +12,7 @@ import com.fsck.k9.Account; import com.fsck.k9.K9; import com.fsck.k9.R; import com.fsck.k9.Account.FolderMode; +import com.fsck.k9.controller.MessagingController.SORT_TYPE; import com.fsck.k9.crypto.Apg; import com.fsck.k9.mail.store.StorageManager; import com.fsck.k9.preferences.Settings.*; @@ -156,6 +157,12 @@ public class AccountSettings { s.put("sentFolderName", Settings.versions( new V(1, new StringSetting("Sent")) )); + s.put("sortTypeEnum", Settings.versions( + new V(1, new EnumSetting(SORT_TYPE.class, Account.DEFAULT_SORT_TYPE)) + )); + s.put("sortAscending", Settings.versions( + new V(1, new BooleanSetting(Account.DEFAULT_SORT_ASCENDING)) + )); s.put("showPicturesEnum", Settings.versions( new V(1, new EnumSetting(Account.ShowPictures.class, Account.ShowPictures.NEVER)) ));