From f0808fb3e06721fec74fd4376e09a2010bb74bf1 Mon Sep 17 00:00:00 2001 From: Daniel Applebaum Date: Sun, 7 Mar 2010 17:02:21 +0000 Subject: [PATCH] Fixes Issue 1291 Provides for the user to elect to have certain folders displayed first in the FolderList. Folders so elected are displayed in alphabetical order first, then folders not so elected are displayed alphabetical order. No special handling is done for Inbox any more, except that it is in "top group" by default, to preserve current behavior until the user changes the settings. --- res/values/strings.xml | 4 ++ res/xml/folder_settings_preferences.xml | 5 +++ src/com/fsck/k9/activity/FolderList.java | 44 +++++++++---------- .../k9/activity/setup/FolderSettings.java | 8 ++++ src/com/fsck/k9/mail/Folder.java | 5 +++ src/com/fsck/k9/mail/store/LocalStore.java | 19 ++++++++ 6 files changed, 61 insertions(+), 24 deletions(-) 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