1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-27 11:42:16 -05:00

Allow user to set a limit on the number of folders to be handled with

push technology.  This provide a layer of safety in case of
misconfiguration (accidentally setting too many folders to push using
classes), which can bog down the device till it is unusable.  On a G1,
25 folders is a very large load.  Fixes Issue 871.

Also, move some pending commands to the background to make way for
more important user interface activity.
This commit is contained in:
Daniel Applebaum 2009-12-24 18:08:23 +00:00
parent 022b0241a1
commit 070fd635d4
6 changed files with 90 additions and 12 deletions

View File

@ -124,6 +124,26 @@
<item>NONE</item>
</string-array>
<string-array name="account_settings_push_limit_entries">
<item>@string/account_setup_push_limit_10</item>
<item>@string/account_setup_push_limit_25</item>
<item>@string/account_setup_push_limit_50</item>
<item>@string/account_setup_push_limit_100</item>
<item>@string/account_setup_push_limit_250</item>
<item>@string/account_setup_push_limit_500</item>
<item>@string/account_setup_push_limit_1000</item>
</string-array>
<string-array name="account_settings_push_limit_values">
<item>10</item>
<item>25</item>
<item>50</item>
<item>100</item>
<item>250</item>
<item>500</item>
<item>1000</item>
</string-array>
<string-array name="account_settings_folder_target_mode_entries">
<item>@string/account_settings_folder_target_mode_all</item>
<item>@string/account_settings_folder_target_mode_first_class</item>

View File

@ -618,4 +618,13 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin
<string name="batch_select_all">Select all</string>
<string name="batch_deselect_all">Deselect all</string>
<string name="account_setup_push_limit_label">Max folders to check with push</string>
<string name="account_setup_push_limit_10">10 folders</string>
<string name="account_setup_push_limit_25">25 folders</string>
<string name="account_setup_push_limit_50">50 folders</string>
<string name="account_setup_push_limit_100">100 folders</string>
<string name="account_setup_push_limit_250">250 folders</string>
<string name="account_setup_push_limit_500">500 folders</string>
<string name="account_setup_push_limit_1000">1000 folders</string>
</resources>

View File

@ -80,6 +80,13 @@
android:entryValues="@array/account_settings_folder_push_mode_values"
android:dialogTitle="@string/account_settings_folder_push_mode_label" />
<ListPreference
android:key="folder_push_limit"
android:title="@string/account_setup_push_limit_label"
android:entries="@array/account_settings_push_limit_entries"
android:entryValues="@array/account_settings_push_limit_values"
android:dialogTitle="@string/account_setup_push_limit_label" />
<ListPreference
android:key="delete_policy"
android:title="@string/account_setup_incoming_delete_policy_label"

View File

@ -58,7 +58,8 @@ public class Account implements Serializable
HideButtons mHideMessageViewButtons;
boolean mIsSignatureBeforeQuotedText;
boolean mLeftHanded;
public String mExpungePolicy = EXPUNGE_IMMEDIATELY;
private String mExpungePolicy = EXPUNGE_IMMEDIATELY;
private int mMaxPushFolders;
List<Identity> identities;
@ -105,8 +106,9 @@ public class Account implements Serializable
mHideMessageViewButtons = HideButtons.NEVER;
mRingtoneUri = "content://settings/system/notification_sound";
mIsSignatureBeforeQuotedText = false;
mExpungePolicy = EXPUNGE_IMMEDIATELY;
mAutoExpandFolderName = "INBOX";
mMaxPushFolders = 10;
identities = new ArrayList<Identity>();
@ -201,6 +203,8 @@ public class Account implements Serializable
"Outbox");
mExpungePolicy = preferences.getPreferences().getString(mUuid + ".expungePolicy", EXPUNGE_IMMEDIATELY);
mMaxPushFolders = preferences.getPreferences().getInt(mUuid + ".maxPushFolders", 10);
// Between r418 and r431 (version 0.103), folder names were set empty if the Incoming settings were
// opened for non-IMAP accounts. 0.103 was never a market release, so perhaps this code
// should be deleted sometime soon
@ -536,6 +540,7 @@ public class Account implements Serializable
editor.remove(mUuid + ".hideButtonsEnum");
editor.remove(mUuid + ".signatureBeforeQuotedText");
editor.remove(mUuid + ".expungePolicy");
editor.remove(mUuid + ".maxPushFolders");
deleteIdentities(preferences.getPreferences(), editor);
editor.commit();
}
@ -607,7 +612,7 @@ public class Account implements Serializable
editor.putString(mUuid + ".folderTargetMode", mFolderTargetMode.name());
editor.putBoolean(mUuid + ".signatureBeforeQuotedText", this.mIsSignatureBeforeQuotedText);
editor.putString(mUuid + ".expungePolicy", mExpungePolicy);
editor.putInt(mUuid + ".maxPushFolders", mMaxPushFolders);
saveIdentities(preferences.getPreferences(), editor);
editor.commit();
@ -951,4 +956,14 @@ public class Account implements Serializable
mExpungePolicy = expungePolicy;
}
public int getMaxPushFolders()
{
return mMaxPushFolders;
}
public void setMaxPushFolders(int maxPushFolders)
{
mMaxPushFolders = maxPushFolders;
}
}

View File

@ -1535,7 +1535,7 @@ public class MessagingController implements Runnable
private void processPendingCommands(final Account account)
{
put("processPendingCommands", null, new Runnable()
putBackground("processPendingCommands", null, new Runnable()
{
public void run()
{
@ -1963,7 +1963,7 @@ public class MessagingController implements Runnable
private void queueSetFlag(final Account account, final String folderName, final String newState, final String flag, final String[] uids)
{
put("queueSetFlag " + account.getDescription() + ":" + folderName, null, new Runnable()
putBackground("queueSetFlag " + account.getDescription() + ":" + folderName, null, new Runnable()
{
public void run()
{
@ -2086,7 +2086,7 @@ public class MessagingController implements Runnable
}
private void queueExpunge(final Account account, final String folderName)
{
put("queueExpunge " + account.getDescription() + ":" + folderName, null, new Runnable()
putBackground("queueExpunge " + account.getDescription() + ":" + folderName, null, new Runnable()
{
public void run()
{
@ -3278,7 +3278,7 @@ public class MessagingController implements Runnable
if (!message.getUid().startsWith(K9.LOCAL_UID_PREFIX))
{
suppressMessage(account, srcFolder, message);
put("moveMessage", null, new Runnable()
putBackground("moveMessage", null, new Runnable()
{
public void run()
{
@ -3357,7 +3357,7 @@ public class MessagingController implements Runnable
{
if (!message.getUid().startsWith(K9.LOCAL_UID_PREFIX))
{
put("copyMessage", null, new Runnable()
putBackground("copyMessage", null, new Runnable()
{
public void run()
{
@ -3429,7 +3429,7 @@ public class MessagingController implements Runnable
public void expunge(final Account account, final String folder, final MessagingListener listener)
{
put("expunge", null, new Runnable()
putBackground("expunge", null, new Runnable()
{
public void run()
{
@ -3446,7 +3446,7 @@ public class MessagingController implements Runnable
suppressMessage(account, folder, message);
}
put("deleteMessages", null, new Runnable()
putBackground("deleteMessages", null, new Runnable()
{
public void run()
{
@ -3613,7 +3613,7 @@ public class MessagingController implements Runnable
public void emptyTrash(final Account account, MessagingListener listener)
{
put("emptyTrash", listener, new Runnable()
putBackground("emptyTrash", listener, new Runnable()
{
public void run()
{
@ -4277,6 +4277,14 @@ public class MessagingController implements Runnable
if (names.size() > 0)
{
PushReceiver receiver = new MessagingControllerPushReceiver(mApplication, account, this);
int maxPushFolders = account.getMaxPushFolders();
if (names.size() > maxPushFolders)
{
Log.i(K9.LOG_TAG, "Count of folders to push for account " + account.getDescription() + " is " + names.size()
+ ", greater than limit of " + maxPushFolders + ", truncating");
names = names.subList(0, maxPushFolders);
}
try
{

View File

@ -40,6 +40,7 @@ public class AccountSettings extends K9PreferenceActivity
private static final String PREFERENCE_DISPLAY_MODE = "folder_display_mode";
private static final String PREFERENCE_SYNC_MODE = "folder_sync_mode";
private static final String PREFERENCE_PUSH_MODE = "folder_push_mode";
private static final String PREFERENCE_PUSH_LIMIT = "folder_push_limit";
private static final String PREFERENCE_TARGET_MODE = "folder_target_mode";
private static final String PREFERENCE_DELETE_POLICY = "delete_policy";
private static final String PREFERENCE_EXPUNGE_POLICY = "expunge_policy";
@ -62,6 +63,7 @@ public class AccountSettings extends K9PreferenceActivity
private ListPreference mDisplayMode;
private ListPreference mSyncMode;
private ListPreference mPushMode;
private ListPreference mPushLimit;
private ListPreference mTargetMode;
private ListPreference mDeletePolicy;
private ListPreference mExpungePolicy;
@ -179,6 +181,22 @@ public class AccountSettings extends K9PreferenceActivity
}
});
mPushLimit = (ListPreference) findPreference(PREFERENCE_PUSH_LIMIT);
mPushLimit.setEnabled(isPushCapable);
mPushLimit.setValue(String.valueOf(mAccount.getMaxPushFolders()));
mPushLimit.setSummary(mPushLimit.getEntry());
mPushLimit.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{
public boolean onPreferenceChange(Preference preference, Object newValue)
{
final String summary = newValue.toString();
int index = mPushLimit.findIndexOfValue(summary);
mPushLimit.setSummary(mPushLimit.getEntries()[index]);
mPushLimit.setValue(summary);
return false;
}
});
mTargetMode = (ListPreference) findPreference(PREFERENCE_TARGET_MODE);
mTargetMode.setValue(mAccount.getFolderTargetMode().name());
mTargetMode.setSummary(mTargetMode.getEntry());
@ -361,6 +379,7 @@ public class AccountSettings extends K9PreferenceActivity
mAccount.setFolderDisplayMode(Account.FolderMode.valueOf(mDisplayMode.getValue()));
mAccount.setFolderSyncMode(Account.FolderMode.valueOf(mSyncMode.getValue()));
mAccount.setFolderPushMode(Account.FolderMode.valueOf(mPushMode.getValue()));
mAccount.setMaxPushFolders(Integer.parseInt(mPushLimit.getValue()));
mAccount.setFolderTargetMode(Account.FolderMode.valueOf(mTargetMode.getValue()));
mAccount.setDeletePolicy(Integer.parseInt(mDeletePolicy.getValue()));
mAccount.setExpungePolicy(mExpungePolicy.getValue());