diff --git a/res/values/strings.xml b/res/values/strings.xml index 47916fce5..edd4c6500 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -485,6 +485,10 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin All except 2nd Class folders Folder settings + + Show in top group + Show near the top of the folder list + Folder display class None 1st Class diff --git a/res/xml/folder_settings_preferences.xml b/res/xml/folder_settings_preferences.xml index f464e466c..b30aeb9c9 100644 --- a/res/xml/folder_settings_preferences.xml +++ b/res/xml/folder_settings_preferences.xml @@ -19,6 +19,11 @@ + + newFolders) + public void newFolders(final List newFolders) { runOnUiThread(new Runnable() { @@ -806,7 +808,8 @@ public class FolderList extends K9ListActivity return; } - ArrayList newFolders = new ArrayList(); + List newFolders = new LinkedList(); + List topFolders = new LinkedList(); Account.FolderMode aMode = account.getFolderDisplayMode(); @@ -859,11 +862,19 @@ public class FolderList extends K9ListActivity holder.populate(folder, unreadMessageCount); } - - newFolders.add(holder); + if (folder.isInTopGroup()) + { + topFolders.add(holder); + } + else + { + newFolders.add(holder); + } } Collections.sort(newFolders); - mHandler.newFolders(newFolders); + Collections.sort(topFolders); + topFolders.addAll(newFolders); + mHandler.newFolders(topFolders); mHandler.refreshTitle(); } @@ -1279,29 +1290,14 @@ public class FolderList extends K9ListActivity String s1 = this.name; String s2 = o.name; - if (K9.INBOX.equalsIgnoreCase(s1) && K9.INBOX.equalsIgnoreCase(s2)) + int ret = s1.compareToIgnoreCase(s2); + if (ret != 0) { - return 0; - } - else if (K9.INBOX.equalsIgnoreCase(s1)) - { - return -1; - } - else if (K9.INBOX.equalsIgnoreCase(s2)) - { - return 1; + return ret; } else { - int ret = s1.compareToIgnoreCase(s2); - if (ret != 0) - { - return ret; - } - else - { - return s1.compareTo(s2); - } + return s1.compareTo(s2); } } diff --git a/src/com/fsck/k9/activity/setup/FolderSettings.java b/src/com/fsck/k9/activity/setup/FolderSettings.java index ad112ea8c..7b444a97d 100644 --- a/src/com/fsck/k9/activity/setup/FolderSettings.java +++ b/src/com/fsck/k9/activity/setup/FolderSettings.java @@ -4,6 +4,7 @@ package com.fsck.k9.activity.setup; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.util.Log; @@ -26,9 +27,11 @@ public class FolderSettings extends K9PreferenceActivity private static final String PREFERENCE_DISPLAY_CLASS = "folder_settings_folder_display_mode"; private static final String PREFERENCE_SYNC_CLASS = "folder_settings_folder_sync_mode"; private static final String PREFERENCE_PUSH_CLASS = "folder_settings_folder_push_mode"; + private static final String PREFERENCE_IN_TOP_GROUP = "folder_settings_in_top_group"; private LocalFolder mFolder; + private CheckBoxPreference mInTopGroup; private ListPreference mDisplayClass; private ListPreference mSyncClass; private ListPreference mPushClass; @@ -79,6 +82,10 @@ public class FolderSettings extends K9PreferenceActivity Preference category = findPreference(PREFERENCE_TOP_CATERGORY); category.setTitle(folderName); + + mInTopGroup = (CheckBoxPreference)findPreference(PREFERENCE_IN_TOP_GROUP); + mInTopGroup.setChecked(mFolder.isInTopGroup()); + mDisplayClass = (ListPreference) findPreference(PREFERENCE_DISPLAY_CLASS); mDisplayClass.setValue(mFolder.getDisplayClass().name()); mDisplayClass.setSummary(mDisplayClass.getEntry()); @@ -142,6 +149,7 @@ public class FolderSettings extends K9PreferenceActivity private void saveSettings() { + mFolder.setInTopGroup(mInTopGroup.isChecked()); // We call getPushClass() because display class changes can affect push class when push class is set to inherit FolderClass oldPushClass = mFolder.getPushClass(); FolderClass oldDisplayClass = mFolder.getDisplayClass(); diff --git a/src/com/fsck/k9/mail/Folder.java b/src/com/fsck/k9/mail/Folder.java index 33cb72922..167d3c6bd 100644 --- a/src/com/fsck/k9/mail/Folder.java +++ b/src/com/fsck/k9/mail/Folder.java @@ -202,6 +202,11 @@ public abstract class Folder { } + + public boolean isInTopGroup() + { + return false; + } public String getStatus() { diff --git a/src/com/fsck/k9/mail/store/LocalStore.java b/src/com/fsck/k9/mail/store/LocalStore.java index 237027c32..cbb7b8321 100644 --- a/src/com/fsck/k9/mail/store/LocalStore.java +++ b/src/com/fsck/k9/mail/store/LocalStore.java @@ -671,6 +671,7 @@ public class LocalStore extends Store implements Serializable private FolderClass displayClass = FolderClass.NO_CLASS; private FolderClass syncClass = FolderClass.INHERITED; private FolderClass pushClass = FolderClass.SECOND_CLASS; + private boolean inTopGroup = false; private String prefId = null; private String mPushState = null; @@ -684,6 +685,7 @@ public class LocalStore extends Store implements Serializable { syncClass = FolderClass.FIRST_CLASS; pushClass = FolderClass.FIRST_CLASS; + inTopGroup = true; } @@ -1024,6 +1026,8 @@ public class LocalStore extends Store implements Serializable editor.remove(id + ".displayMode"); editor.remove(id + ".syncMode"); + editor.remove(id + ".pushMode"); + editor.remove(id + ".inTopGroup"); editor.commit(); } @@ -1060,6 +1064,7 @@ public class LocalStore extends Store implements Serializable { editor.putString(id + ".pushMode", pushClass.name()); } + editor.putBoolean(id + ".inTopGroup", inTopGroup); editor.commit(); } @@ -1108,9 +1113,11 @@ public class LocalStore extends Store implements Serializable } FolderClass defPushClass = FolderClass.SECOND_CLASS; + boolean defInTopGroup = false; if (K9.INBOX.equals(getName())) { defPushClass = FolderClass.FIRST_CLASS; + defInTopGroup = true; } try @@ -1128,6 +1135,7 @@ public class LocalStore extends Store implements Serializable { pushClass = FolderClass.INHERITED; } + inTopGroup = preferences.getPreferences().getBoolean(id + ".inTopGroup", defInTopGroup); } @@ -2102,6 +2110,17 @@ public class LocalStore extends Store implements Serializable return text; } + + @Override + public boolean isInTopGroup() + { + return inTopGroup; + } + + public void setInTopGroup(boolean inTopGroup) + { + this.inTopGroup = inTopGroup; + } } public class LocalTextBody extends TextBody