diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2a5bea351..ae2505019 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -263,7 +263,9 @@ Welcome to K-9 Mail setup. K-9 is an open source email client for Android based
Sent folder name
Trash folder name
Outbox folder name
-
+
+ Auto-expand folder
+
WebDav(Exchange) path
Optional
diff --git a/res/xml/account_settings_preferences.xml b/res/xml/account_settings_preferences.xml
index 0ddfec7d5..9affb8db5 100644
--- a/res/xml/account_settings_preferences.xml
+++ b/res/xml/account_settings_preferences.xml
@@ -45,6 +45,13 @@
android:entryValues="@array/account_settings_hide_buttons_values"
android:dialogTitle="@string/account_settings_hide_buttons_label" />
+
+
diff --git a/src/com/android/email/Account.java b/src/com/android/email/Account.java
index 97f41edf4..79cf722ed 100644
--- a/src/com/android/email/Account.java
+++ b/src/com/android/email/Account.java
@@ -47,6 +47,7 @@ public class Account implements Serializable {
String mSentFolderName;
String mTrashFolderName;
String mOutboxFolderName;
+ String mAutoExpandFolderName;
FolderMode mFolderDisplayMode;
FolderMode mFolderSyncMode;
FolderMode mFolderTargetMode;
@@ -128,6 +129,8 @@ public class Account implements Serializable {
"Trash");
mOutboxFolderName = preferences.mSharedPreferences.getString(mUuid + ".outboxFolderName",
"Outbox");
+ mAutoExpandFolderName = preferences.mSharedPreferences.getString(mUuid + ".autoExpandFolderName",
+ "Inbox");
mAccountNumber = preferences.mSharedPreferences.getInt(mUuid + ".accountNumber", 0);
mVibrate = preferences.mSharedPreferences.getBoolean(mUuid + ".vibrate", false);
@@ -282,6 +285,7 @@ public class Account implements Serializable {
editor.remove(mUuid + ".sentFolderName");
editor.remove(mUuid + ".trashFolderName");
editor.remove(mUuid + ".outboxFolderName");
+ editor.remove(mUuid + ".autoExpandFolderName");
editor.remove(mUuid + ".accountNumber");
editor.remove(mUuid + ".vibrate");
editor.remove(mUuid + ".ringtone");
@@ -349,6 +353,7 @@ public class Account implements Serializable {
editor.putString(mUuid + ".sentFolderName", mSentFolderName);
editor.putString(mUuid + ".trashFolderName", mTrashFolderName);
editor.putString(mUuid + ".outboxFolderName", mOutboxFolderName);
+ editor.putString(mUuid + ".autoExpandFolderName", mAutoExpandFolderName);
editor.putInt(mUuid + ".accountNumber", mAccountNumber);
editor.putBoolean(mUuid + ".vibrate", mVibrate);
editor.putString(mUuid + ".hideButtonsEnum", mHideMessageViewButtons.name());
@@ -518,6 +523,14 @@ public class Account implements Serializable {
mOutboxFolderName = outboxFolderName;
}
+ public String getAutoExpandFolderName() {
+ return mAutoExpandFolderName;
+ }
+
+ public void setAutoExpandFolderName(String autoExpandFolderName) {
+ mAutoExpandFolderName = autoExpandFolderName;
+ }
+
public int getAccountNumber() {
return mAccountNumber;
}
diff --git a/src/com/android/email/Email.java b/src/com/android/email/Email.java
index 004ce7f54..a5bf4e727 100644
--- a/src/com/android/email/Email.java
+++ b/src/com/android/email/Email.java
@@ -93,6 +93,11 @@ public class Email extends Application {
* the server refers to as the user's Inbox. Placed here to ease use.
*/
public static final String INBOX = "INBOX";
+
+ /**
+ * For use when displaying that no folder is selected
+ */
+ public static final String FOLDER_NONE = "-NONE-";
/**
* Specifies how many messages will be shown in a folder by default. This number is set
diff --git a/src/com/android/email/activity/Accounts.java b/src/com/android/email/activity/Accounts.java
index a7b20f779..6b4756686 100644
--- a/src/com/android/email/activity/Accounts.java
+++ b/src/com/android/email/activity/Accounts.java
@@ -358,9 +358,7 @@ public class Accounts extends ListActivity implements OnItemClickListener, OnCli
}
private void onOpenAccount(Account account) {
- //FolderMessageList.actionHandleAccount(this, account); // Dan's way
-
- FolderMessageList.actionHandleAccount(this, account, Email.INBOX); // Everbody else's way
+ FolderMessageList.actionHandleAccount(this, account);
}
public void onClick(View view) {
diff --git a/src/com/android/email/activity/ChooseFolder.java b/src/com/android/email/activity/ChooseFolder.java
index 2ab7b11ce..b497efed9 100644
--- a/src/com/android/email/activity/ChooseFolder.java
+++ b/src/com/android/email/activity/ChooseFolder.java
@@ -36,12 +36,16 @@ public class ChooseFolder extends ListActivity
private ChooseFolderHandler mHandler = new ChooseFolderHandler();
String heldInbox = null;
boolean hideCurrentFolder = true;
+ boolean showOptionNone = false;
+ boolean showDisplayableOnly = false;
public static final String EXTRA_ACCOUNT = "com.android.email.ChooseFolder_account";
public static final String EXTRA_CUR_FOLDER = "com.android.email.ChooseFolder_curfolder";
public static final String EXTRA_NEW_FOLDER = "com.android.email.ChooseFolder_newfolder";
public static final String EXTRA_MESSAGE_UID = "com.android.email.ChooseFolder_messageuid";
public static final String EXTRA_SHOW_CURRENT = "com.android.email.ChooseFolder_showcurrent";
+ public static final String EXTRA_SHOW_FOLDER_NONE = "com.android.email.ChooseFolder_showOptionNone";
+ public static final String EXTRA_SHOW_DISPLAYABLE_ONLY = "com.android.email.ChooseFolder_showDisplayableOnly";
@Override
public void onCreate(Bundle savedInstanceState)
@@ -60,6 +64,12 @@ public class ChooseFolder extends ListActivity
if (intent.getStringExtra(EXTRA_SHOW_CURRENT) != null) {
hideCurrentFolder = false;
}
+ if (intent.getStringExtra(EXTRA_SHOW_FOLDER_NONE) != null) {
+ showOptionNone = true;
+ }
+ if (intent.getStringExtra(EXTRA_SHOW_DISPLAYABLE_ONLY) != null) {
+ showDisplayableOnly = true;
+ }
if(mFolder == null)
mFolder = "";
@@ -88,9 +98,7 @@ public class ChooseFolder extends ListActivity
{
destFolderName = heldInbox;
}
-
intent.putExtra(EXTRA_NEW_FOLDER, destFolderName);
-
intent.putExtra(EXTRA_MESSAGE_UID, mUID);
setResult(RESULT_OK, intent);
finish();
@@ -105,6 +113,7 @@ public class ChooseFolder extends ListActivity
private static final int MSG_PROGRESS = 2;
private static final int MSG_DATA_CHANGED = 3;
+ private static final int MSG_SET_SELECTED_FOLDER = 4;
public void handleMessage(android.os.Message msg)
{
@@ -115,6 +124,12 @@ public class ChooseFolder extends ListActivity
break;
case MSG_DATA_CHANGED:
adapter.notifyDataSetChanged();
+ break;
+ case MSG_SET_SELECTED_FOLDER:
+ // TODO: I want this to highlight the chosen folder, but this doesn't work.
+// getListView().setSelection(msg.arg1);
+// getListView().setItemChecked(msg.arg1, true);
+ break;
}
}
@@ -125,6 +140,14 @@ public class ChooseFolder extends ListActivity
msg.arg1 = progress ? 1 : 0;
sendMessage(msg);
}
+
+ public void setSelectedFolder(int position)
+ {
+ android.os.Message msg = new android.os.Message();
+ msg.what = MSG_SET_SELECTED_FOLDER;
+ msg.arg1 = position;
+ sendMessage(msg);
+ }
public void dataChanged()
{
@@ -169,7 +192,15 @@ public class ChooseFolder extends ListActivity
{
return;
}
- Account.FolderMode aMode = account.getFolderTargetMode();
+ Account.FolderMode aMode = Account.FolderMode.ALL;
+ if (showDisplayableOnly)
+ {
+ aMode = account.getFolderDisplayMode();
+ }
+ else
+ {
+ aMode = account.getFolderTargetMode();
+ }
Preferences prefs = Preferences.getPreferences(getApplication().getApplicationContext());
ArrayList localFolders = new ArrayList();
@@ -204,6 +235,11 @@ public class ChooseFolder extends ListActivity
}
+ if (showOptionNone)
+ {
+ localFolders.add("-NONE-");
+ }
+
Collections.sort(localFolders, new Comparator() {
public int compare(String aName, String bName)
{
@@ -215,11 +251,22 @@ public class ChooseFolder extends ListActivity
{
return 1;
}
+ if (Email.FOLDER_NONE.equalsIgnoreCase(aName))
+ {
+ return 1;
+ }
+ if (Email.FOLDER_NONE.equalsIgnoreCase(bName))
+ {
+ return -1;
+ }
+
return aName.compareToIgnoreCase(bName);
}
});
adapter.setNotifyOnChange(false);
adapter.clear();
+ int selectedFolder = -1;
+ int position = 0;
for (String name : localFolders) {
if (Email.INBOX.equalsIgnoreCase(name))
{
@@ -229,8 +276,18 @@ public class ChooseFolder extends ListActivity
else {
adapter.add(name);
}
+
+ if((name.equals(mFolder) || (Email.INBOX.equalsIgnoreCase(mFolder) && Email.INBOX.equalsIgnoreCase(name)))) {
+ selectedFolder = position;
+ }
+ position++;
+ }
+ if (selectedFolder != -1)
+ {
+ mHandler.setSelectedFolder(selectedFolder);
}
mHandler.dataChanged();
+
}
};
}
diff --git a/src/com/android/email/activity/FolderMessageList.java b/src/com/android/email/activity/FolderMessageList.java
index 041ff86f7..089fbbaae 100644
--- a/src/com/android/email/activity/FolderMessageList.java
+++ b/src/com/android/email/activity/FolderMessageList.java
@@ -1,14 +1,9 @@
package com.android.email.activity;
-import java.lang.reflect.Array;
import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -46,12 +41,11 @@ import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.MessagingController;
-import static com.android.email.MessagingController.SORT_TYPE;
import com.android.email.MessagingListener;
+import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.Utility;
-import com.android.email.Preferences;
-import com.android.email.activity.Accounts;
+import com.android.email.MessagingController.SORT_TYPE;
import com.android.email.activity.FolderMessageList.FolderMessageListAdapter.FolderInfoHolder;
import com.android.email.activity.FolderMessageList.FolderMessageListAdapter.MessageInfoHolder;
import com.android.email.activity.setup.AccountSettings;
@@ -61,13 +55,11 @@ import com.android.email.mail.Flag;
import com.android.email.mail.Folder;
import com.android.email.mail.Message;
import com.android.email.mail.MessagingException;
-import com.android.email.mail.Part;
import com.android.email.mail.Store;
import com.android.email.mail.Message.RecipientType;
-import com.android.email.mail.internet.MimeUtility;
+import com.android.email.mail.store.LocalStore;
import com.android.email.mail.store.LocalStore.LocalFolder;
import com.android.email.mail.store.LocalStore.LocalMessage;
-import com.android.email.mail.store.LocalStore;
/**
* FolderMessageList is the primary user interface for the program. This
@@ -562,7 +554,12 @@ public class FolderMessageList extends ExpandableListActivity
if (savedInstanceState == null)
{
mInitialFolder = intent.getStringExtra(EXTRA_INITIAL_FOLDER);
- }
+ if (mInitialFolder == null)
+ {
+ mInitialFolder = mAccount.getAutoExpandFolderName();
+ }
+ }
+
/*
* Since the color chip is always the same color for a given account we just
@@ -669,33 +666,34 @@ public class FolderMessageList extends ExpandableListActivity
}
@Override
- public void onGroupExpand(int groupPosition)
- {
- super.onGroupExpand(groupPosition);
- if (mExpandedGroup != -1)
- {
- mListView.collapseGroup(mExpandedGroup);
- }
- mExpandedGroup = groupPosition;
+ public void onGroupExpand(int groupPosition)
+ {
- if (!mRestoringState)
- {
- /*
- * Scroll the selected item to the top of the screen.
- */
- int position = mListView.getFlatListPosition(ExpandableListView
- .getPackedPositionForGroup(groupPosition));
-
- mListView.setSelectionFromTop(position, 0);
- }
+ Log.i(Email.LOG_TAG, "onGroupExpand(" + groupPosition + "), mRestoringState = " + mRestoringState);
+ super.onGroupExpand(groupPosition);
+ if (mExpandedGroup != -1)
+ {
+ mListView.collapseGroup(mExpandedGroup);
+ }
+ mExpandedGroup = groupPosition;
- final FolderInfoHolder folder = (FolderInfoHolder) mAdapter
- .getGroup(groupPosition);
- if (folder.messages.size() == 0 || folder.needsRefresh)
- {
- folder.needsRefresh = false;
- new Thread(new FolderUpdateWorker(folder.name, false)).start();
- }
+ if (!mRestoringState)
+ {
+ /*
+ * Scroll the selected item to the top of the screen.
+ */
+ int position = mListView.getFlatListPosition(ExpandableListView
+ .getPackedPositionForGroup(groupPosition));
+
+ mListView.setSelectionFromTop(position, 0);
+ }
+
+ final FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getGroup(groupPosition);
+ if (folder.messages.size() == 0 || folder.needsRefresh)
+ {
+ folder.needsRefresh = false;
+ new Thread(new FolderUpdateWorker(folder.name, false)).start();
+ }
}
@@ -1456,23 +1454,25 @@ public class FolderMessageList extends ExpandableListActivity
}
@Override
- public void listFoldersFinished(Account account)
- {
- if (!account.equals(mAccount))
- {
- return;
+ public void listFoldersFinished(Account account)
+ {
+ if (!account.equals(mAccount))
+ {
+ return;
+ }
+ mHandler.progress(false);
+
+ mHandler.dataChanged();
+
+ if (mInitialFolder != null && Email.FOLDER_NONE.equals(mInitialFolder) == false)
+ {
+ int groupPosition = getFolderPosition(mInitialFolder);
+ mInitialFolder = null;
+ if (groupPosition != -1)
+ {
+ mHandler.expandGroup(groupPosition);
}
- mHandler.progress(false);
- if (mInitialFolder != null)
- {
- int groupPosition = getFolderPosition(mInitialFolder);
- mInitialFolder = null;
- if (groupPosition != -1)
- {
- mHandler.expandGroup(groupPosition);
- }
- }
- mHandler.dataChanged();
+ }
}
@Override
public void accountReset(Account account)
diff --git a/src/com/android/email/activity/setup/AccountSettings.java b/src/com/android/email/activity/setup/AccountSettings.java
index dc1c933fa..45b058d8c 100644
--- a/src/com/android/email/activity/setup/AccountSettings.java
+++ b/src/com/android/email/activity/setup/AccountSettings.java
@@ -6,20 +6,28 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
import android.preference.PreferenceActivity;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
+import android.preference.PreferenceScreen;
import android.preference.RingtonePreference;
+import android.preference.Preference.OnPreferenceClickListener;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.Preferences;
import com.android.email.R;
+import com.android.email.activity.ChooseFolder;
public class AccountSettings extends PreferenceActivity {
private static final String EXTRA_ACCOUNT = "account";
+
+ private static final int SELECT_AUTO_EXPAND_FOLDER = 1;
private static final String PREFERENCE_TOP_CATERGORY = "account_settings";
private static final String PREFERENCE_DESCRIPTION = "account_description";
@@ -38,6 +46,7 @@ public class AccountSettings extends PreferenceActivity {
private static final String PREFERENCE_SYNC_MODE = "folder_sync_mode";
private static final String PREFERENCE_TARGET_MODE = "folder_target_mode";
private static final String PREFERENCE_DELETE_POLICY = "delete_policy";
+ private static final String PREFERENCE_AUTO_EXPAND_FOLDER = "account_setup_auto_expand_folder";
private Account mAccount;
@@ -54,6 +63,7 @@ public class AccountSettings extends PreferenceActivity {
private ListPreference mSyncMode;
private ListPreference mTargetMode;
private ListPreference mDeletePolicy;
+ private Preference mAutoExpandFolder;
public static void actionSettings(Context context, Account account) {
Intent i = new Intent(context, AccountSettings.class);
@@ -196,7 +206,18 @@ public class AccountSettings extends PreferenceActivity {
mAccountVibrate = (CheckBoxPreference) findPreference(PREFERENCE_VIBRATE);
mAccountVibrate.setChecked(mAccount.isVibrate());
+ mAutoExpandFolder = (Preference)findPreference(PREFERENCE_AUTO_EXPAND_FOLDER);
+ mAutoExpandFolder.setSummary(translateFolder(mAccount.getAutoExpandFolderName()));
+
+ mAutoExpandFolder.setOnPreferenceClickListener(
+ new Preference.OnPreferenceClickListener() {
+ public boolean onPreferenceClick(Preference preference) {
+ onChooseAutoExpandFolder();
+ return false;
+ }
+ });
+
findPreference(PREFERENCE_COMPOSITION).setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
@@ -245,10 +266,22 @@ public class AccountSettings extends PreferenceActivity {
SharedPreferences prefs = mAccountRingtone.getPreferenceManager().getSharedPreferences();
mAccount.setRingtone(prefs.getString(PREFERENCE_RINGTONE, null));
mAccount.setHideMessageViewButtons(Account.HideButtons.valueOf(mAccountHideButtons.getValue()));
+ mAccount.setAutoExpandFolderName(reverseTranslateFolder(mAutoExpandFolder.getSummary().toString()));
mAccount.save(Preferences.getPreferences(this));
Email.setServicesEnabled(this);
// TODO: refresh folder list here
}
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case SELECT_AUTO_EXPAND_FOLDER:
+ mAutoExpandFolder.setSummary(translateFolder(data.getStringExtra(ChooseFolder.EXTRA_NEW_FOLDER)));
+ return;
+ }
+ }
+ }
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
@@ -270,4 +303,43 @@ public class AccountSettings extends PreferenceActivity {
AccountSetupOutgoing.actionEditOutgoingSettings(this, mAccount);
}
+ public void onChooseAutoExpandFolder()
+ {
+ Intent selectIntent = new Intent(this, ChooseFolder.class);
+ selectIntent.putExtra(ChooseFolder.EXTRA_ACCOUNT, mAccount);
+
+ selectIntent.putExtra(ChooseFolder.EXTRA_CUR_FOLDER, mAutoExpandFolder.getSummary());
+ selectIntent.putExtra(ChooseFolder.EXTRA_SHOW_CURRENT, "yes");
+ selectIntent.putExtra(ChooseFolder.EXTRA_SHOW_FOLDER_NONE, "yes");
+ selectIntent.putExtra(ChooseFolder.EXTRA_SHOW_DISPLAYABLE_ONLY, "yes");
+ startActivityForResult(selectIntent, SELECT_AUTO_EXPAND_FOLDER);
+
+ }
+
+ private String translateFolder(String in)
+ {
+
+ if (Email.INBOX.equalsIgnoreCase(in))
+ {
+ return getString(R.string.special_mailbox_name_inbox);
+ }
+ else
+ {
+ return in;
+ }
+ }
+
+ private String reverseTranslateFolder(String in)
+ {
+
+ if (getString(R.string.special_mailbox_name_inbox).equals(in))
+ {
+ return Email.INBOX;
+ }
+ else
+ {
+ return in;
+ }
+ }
+
}
diff --git a/src/com/android/email/service/MailService.java b/src/com/android/email/service/MailService.java
index 06e70168a..708047bad 100644
--- a/src/com/android/email/service/MailService.java
+++ b/src/com/android/email/service/MailService.java
@@ -272,12 +272,8 @@ public class MailService extends Service {
if (unreadMessageCount > 0)
{
notif.number = unreadMessageCount;
-
-// Dan's way
- //Intent i = FolderMessageList.actionHandleAccountIntent(context, thisAccount);
-// Everybody else's way
- Intent i = FolderMessageList.actionHandleAccountIntent(context, thisAccount, Email.INBOX);
-
+
+ Intent i = FolderMessageList.actionHandleAccountIntent(context, thisAccount);
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);