diff --git a/src/com/fsck/k9/Account.java b/src/com/fsck/k9/Account.java index aa8aa8fcc..f28570e4d 100644 --- a/src/com/fsck/k9/Account.java +++ b/src/com/fsck/k9/Account.java @@ -732,9 +732,21 @@ public class Account implements Serializable /** * @param automaticCheckIntervalMinutes or -1 for never. */ - public void setAutomaticCheckIntervalMinutes(int automaticCheckIntervalMinutes) + public boolean setAutomaticCheckIntervalMinutes(int automaticCheckIntervalMinutes) { + int oldInterval = this.mAutomaticCheckIntervalMinutes; + int newInterval = automaticCheckIntervalMinutes; this.mAutomaticCheckIntervalMinutes = automaticCheckIntervalMinutes; + + if (oldInterval == -1 && newInterval != -1) + { + return true; + } + if (newInterval < oldInterval) + { + return true; + } + return false; } /** @@ -863,9 +875,11 @@ public class Account implements Serializable return mFolderDisplayMode; } - public void setFolderDisplayMode(FolderMode displayMode) + public boolean setFolderDisplayMode(FolderMode displayMode) { + FolderMode oldDisplayMode = mFolderDisplayMode; mFolderDisplayMode = displayMode; + return oldDisplayMode != displayMode; } public FolderMode getFolderSyncMode() @@ -873,9 +887,20 @@ public class Account implements Serializable return mFolderSyncMode; } - public void setFolderSyncMode(FolderMode syncMode) + public boolean setFolderSyncMode(FolderMode syncMode) { + FolderMode oldSyncMode = mFolderSyncMode; mFolderSyncMode = syncMode; + + if (syncMode == FolderMode.NONE && oldSyncMode != FolderMode.NONE) + { + return true; + } + if (syncMode != FolderMode.NONE && oldSyncMode == FolderMode.NONE) + { + return true; + } + return false; } public FolderMode getFolderPushMode() @@ -883,9 +908,12 @@ public class Account implements Serializable return mFolderPushMode; } - public void setFolderPushMode(FolderMode syncMode) + public boolean setFolderPushMode(FolderMode pushMode) { - mFolderPushMode = syncMode; + FolderMode oldPushMode = mFolderPushMode; + + mFolderPushMode = pushMode; + return pushMode != oldPushMode; } public boolean isShowOngoing() @@ -953,9 +981,11 @@ public class Account implements Serializable return mMaxPushFolders; } - public void setMaxPushFolders(int maxPushFolders) + public boolean setMaxPushFolders(int maxPushFolders) { + int oldMaxPushFolders = mMaxPushFolders; mMaxPushFolders = maxPushFolders; + return oldMaxPushFolders != maxPushFolders; } public boolean isRing() diff --git a/src/com/fsck/k9/K9.java b/src/com/fsck/k9/K9.java index 21f4148f9..6aa84c649 100644 --- a/src/com/fsck/k9/K9.java +++ b/src/com/fsck/k9/K9.java @@ -246,7 +246,6 @@ public class K9 extends Application */ public static void setServicesEnabled(Context context) { - int acctLength = Preferences.getPreferences(context).getAccounts().length; setServicesEnabled(context, acctLength > 0, null); @@ -270,7 +269,7 @@ public class K9 extends Application * If no accounts now exist but the service is still enabled we're about to disable it * so we'll reschedule to kill off any existing alarms. */ - MailService.actionReschedule(context, wakeLockId); + MailService.actionReset(context, wakeLockId); } Class[] classes = { MessageCompose.class, BootReceiver.class, MailService.class }; @@ -297,7 +296,7 @@ public class K9 extends Application * And now if accounts do exist then we've just enabled the service and we want to * schedule alarms for the new accounts. */ - MailService.actionReschedule(context, wakeLockId); + MailService.actionReset(context, wakeLockId); } } @@ -427,14 +426,16 @@ public class K9 extends Application return backgroundOps; } - public static void setBackgroundOps(BACKGROUND_OPS backgroundOps) + public static boolean setBackgroundOps(BACKGROUND_OPS backgroundOps) { + BACKGROUND_OPS oldBackgroundOps = K9.backgroundOps; K9.backgroundOps = backgroundOps; + return backgroundOps != oldBackgroundOps; } - public static void setBackgroundOps(String nbackgroundOps) + public static boolean setBackgroundOps(String nbackgroundOps) { - K9.backgroundOps = BACKGROUND_OPS.valueOf(nbackgroundOps); + return setBackgroundOps(BACKGROUND_OPS.valueOf(nbackgroundOps)); } public static boolean isAnimations() diff --git a/src/com/fsck/k9/activity/FolderList.java b/src/com/fsck/k9/activity/FolderList.java index 9f052c88c..402d0ee4f 100644 --- a/src/com/fsck/k9/activity/FolderList.java +++ b/src/com/fsck/k9/activity/FolderList.java @@ -413,7 +413,10 @@ public class FolderList extends K9ListActivity { mAccount.setFolderDisplayMode(newMode); mAccount.save(Preferences.getPreferences(this)); - MailService.actionReschedule(this, null); // TODO: really should just refresh pushers + if (mAccount.getFolderPushMode() != FolderMode.NONE) + { + MailService.actionRestartPushers(this, null); + } onRefresh(false); } diff --git a/src/com/fsck/k9/activity/setup/AccountSettings.java b/src/com/fsck/k9/activity/setup/AccountSettings.java index b26cb906f..2fbc94ac8 100644 --- a/src/com/fsck/k9/activity/setup/AccountSettings.java +++ b/src/com/fsck/k9/activity/setup/AccountSettings.java @@ -12,10 +12,12 @@ import android.util.Log; import android.view.KeyEvent; import android.widget.Toast; import com.fsck.k9.*; +import com.fsck.k9.Account.FolderMode; import com.fsck.k9.activity.ChooseFolder; import com.fsck.k9.activity.ChooseIdentity; import com.fsck.k9.activity.ManageIdentities; import com.fsck.k9.mail.Store; +import com.fsck.k9.service.MailService; public class AccountSettings extends K9PreferenceActivity { @@ -72,6 +74,7 @@ public class AccountSettings extends K9PreferenceActivity private ListPreference mExpungePolicy; private Preference mAutoExpandFolder; private CheckBoxPreference mStoreAttachmentsOnSdCard; + private boolean mIncomingChanged = false; public static void actionSettings(Context context, Account account) @@ -87,7 +90,7 @@ public class AccountSettings extends K9PreferenceActivity super.onCreate(savedInstanceState); mAccount = (Account)getIntent().getSerializableExtra(EXTRA_ACCOUNT); - mAccount.refresh(Preferences.getPreferences(this)); + mAccount.refresh(Preferences.getPreferences(this)); boolean isPushCapable = false; boolean isExpungeCapable = false; @@ -341,6 +344,7 @@ public class AccountSettings extends K9PreferenceActivity { public boolean onPreferenceClick(Preference preference) { + mIncomingChanged = true; onIncomingSettings(); return true; } @@ -392,22 +396,29 @@ public class AccountSettings extends K9PreferenceActivity { Preferences.getPreferences(this).setDefaultAccount(mAccount); } + mAccount.setDescription(mAccountDescription.getText()); mAccount.setNotifyNewMail(mAccountNotify.isChecked()); mAccount.setNotifySelfNewMail(mAccountNotifySelf.isChecked()); mAccount.setShowOngoing(mAccountNotifySync.isChecked()); - mAccount.setAutomaticCheckIntervalMinutes(Integer.parseInt(mCheckFrequency.getValue())); mAccount.setDisplayCount(Integer.parseInt(mDisplayCount.getValue())); mAccount.setVibrate(mAccountVibrate.isChecked()); - 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()); mAccount.setStoreAttachmentOnSdCard(mStoreAttachmentsOnSdCard.isChecked()); - + + boolean needsRefresh = mAccount.setAutomaticCheckIntervalMinutes(Integer.parseInt(mCheckFrequency.getValue())); + needsRefresh |= mAccount.setFolderSyncMode(Account.FolderMode.valueOf(mSyncMode.getValue())); + + boolean needsPushRestart = mAccount.setFolderPushMode(Account.FolderMode.valueOf(mPushMode.getValue())); + if (mAccount.getFolderPushMode() != FolderMode.NONE) + { + needsPushRestart |= mAccount.setFolderDisplayMode(Account.FolderMode.valueOf(mDisplayMode.getValue())); + needsPushRestart |= mAccount.setMaxPushFolders(Integer.parseInt(mPushLimit.getValue())); + needsPushRestart |= mIncomingChanged; + } + SharedPreferences prefs = mAccountRingtone.getPreferenceManager().getSharedPreferences(); String newRingtone = prefs.getString(PREFERENCE_RINGTONE, null); if (newRingtone != null) @@ -426,7 +437,18 @@ public class AccountSettings extends K9PreferenceActivity mAccount.setHideMessageViewButtons(Account.HideButtons.valueOf(mAccountHideButtons.getValue())); mAccount.setAutoExpandFolderName(reverseTranslateFolder(mAutoExpandFolder.getSummary().toString())); mAccount.save(Preferences.getPreferences(this)); - K9.setServicesEnabled(this); + if (needsRefresh && needsPushRestart) + { + MailService.actionReset(this, null); + } + else if (needsRefresh) + { + MailService.actionReschedulePoll(this, null); + } + else if (needsPushRestart) + { + MailService.actionRestartPushers(this, null); + } // TODO: refresh folder list here } diff --git a/src/com/fsck/k9/activity/setup/FolderSettings.java b/src/com/fsck/k9/activity/setup/FolderSettings.java index 8dfc7c219..ffe655d87 100644 --- a/src/com/fsck/k9/activity/setup/FolderSettings.java +++ b/src/com/fsck/k9/activity/setup/FolderSettings.java @@ -13,6 +13,7 @@ import com.fsck.k9.mail.Folder.FolderClass; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Store; import com.fsck.k9.mail.store.LocalStore.LocalFolder; +import com.fsck.k9.service.MailService; public class FolderSettings extends K9PreferenceActivity { @@ -140,14 +141,24 @@ public class FolderSettings extends K9PreferenceActivity private void saveSettings() { + // 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(); mFolder.setDisplayClass(FolderClass.valueOf(mDisplayClass.getValue())); mFolder.setSyncClass(FolderClass.valueOf(mSyncClass.getValue())); mFolder.setPushClass(FolderClass.valueOf(mPushClass.getValue())); - + + FolderClass newPushClass = mFolder.getPushClass(); + FolderClass newDisplayClass = mFolder.getDisplayClass(); + try { mFolder.save(Preferences.getPreferences(this)); - K9.setServicesEnabled(this); + if (oldPushClass != newPushClass + || (newPushClass != FolderClass.NO_CLASS && oldDisplayClass != newDisplayClass)) + { + MailService.actionRestartPushers(getApplication(), null); + } } catch (MessagingException me) { diff --git a/src/com/fsck/k9/activity/setup/Prefs.java b/src/com/fsck/k9/activity/setup/Prefs.java index 19b1757ef..d8f9c813a 100644 --- a/src/com/fsck/k9/activity/setup/Prefs.java +++ b/src/com/fsck/k9/activity/setup/Prefs.java @@ -148,8 +148,7 @@ public class Prefs extends K9PreferenceActivity K9.setK9Theme(mTheme.getValue().equals("dark") ? android.R.style.Theme : android.R.style.Theme_Light); K9.DEBUG = mDebugLogging.isChecked(); K9.DEBUG_SENSITIVE = mSensitiveLogging.isChecked(); - String newBackgroundOps = mBackgroundOps.getValue(); - K9.setBackgroundOps(newBackgroundOps); + boolean needsRefresh = K9.setBackgroundOps(mBackgroundOps.getValue()); K9.setAnimations(mAnimations.isChecked()); K9.setMessageListStars(mStars.isChecked()); @@ -161,9 +160,9 @@ public class Prefs extends K9PreferenceActivity K9.save(editor); DateFormatter.setDateFormat(editor, mDateFormat.getValue()); editor.commit(); - if (newBackgroundOps.equals(initBackgroundOps) == false) + if (needsRefresh) { - MailService.backgroundDataChanged(this, null); + MailService.actionRestartPushers(this, null); } } diff --git a/src/com/fsck/k9/service/BootReceiver.java b/src/com/fsck/k9/service/BootReceiver.java index 805aa6835..f3513cc0d 100644 --- a/src/com/fsck/k9/service/BootReceiver.java +++ b/src/com/fsck/k9/service/BootReceiver.java @@ -40,7 +40,7 @@ public class BootReceiver extends CoreReceiver } else if (Intent.ACTION_DEVICE_STORAGE_OK.equals(intent.getAction())) { - MailService.actionReschedule(context, tmpWakeLockId); + MailService.actionReset(context, tmpWakeLockId); tmpWakeLockId = null; } else if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) @@ -51,7 +51,7 @@ public class BootReceiver extends CoreReceiver } else if (ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED.equals(intent.getAction())) { - MailService.backgroundDataChanged(context, tmpWakeLockId); + MailService.actionRestartPushers(context, tmpWakeLockId); tmpWakeLockId = null; } else if (FIRE_INTENT.equals(intent.getAction())) diff --git a/src/com/fsck/k9/service/MailService.java b/src/com/fsck/k9/service/MailService.java index 9b22e67d2..822cf58fc 100644 --- a/src/com/fsck/k9/service/MailService.java +++ b/src/com/fsck/k9/service/MailService.java @@ -1,6 +1,9 @@ package com.fsck.k9.service; +import java.util.Collection; +import java.util.Date; + import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; @@ -10,40 +13,36 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.os.IBinder; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.util.Config; import android.util.Log; -import com.fsck.k9.*; -import com.fsck.k9.mail.Pusher; -import java.util.Collection; -import java.util.Date; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import com.fsck.k9.Account; +import com.fsck.k9.K9; +import com.fsck.k9.MessagingController; +import com.fsck.k9.Preferences; +import com.fsck.k9.R; +import com.fsck.k9.Account.FolderMode; +import com.fsck.k9.mail.Pusher; /** */ public class MailService extends CoreService { private static final String ACTION_CHECK_MAIL = "com.fsck.k9.intent.action.MAIL_SERVICE_WAKEUP"; - private static final String ACTION_RESCHEDULE = "com.fsck.k9.intent.action.MAIL_SERVICE_RESCHEDULE"; - private static final String ACTION_RESCHEDULE_CHECK = "com.fsck.k9.intent.action.MAIL_SERVICE_RESCHEDULE_CHECK"; + private static final String ACTION_RESET = "com.fsck.k9.intent.action.MAIL_SERVICE_RESET"; + private static final String ACTION_RESCHEDULE_POLL = "com.fsck.k9.intent.action.MAIL_SERVICE_RESCHEDULE_POLL"; private static final String ACTION_CANCEL = "com.fsck.k9.intent.action.MAIL_SERVICE_CANCEL"; private static final String ACTION_REFRESH_PUSHERS = "com.fsck.k9.intent.action.MAIL_SERVICE_REFRESH_PUSHERS"; + private static final String ACTION_RESTART_PUSHERS = "com.fsck.k9.intent.action.MAIL_SERVICE_RESTART_PUSHERS"; private static final String CONNECTIVITY_CHANGE = "com.fsck.k9.intent.action.MAIL_SERVICE_CONNECTIVITY_CHANGE"; - private static final String BACKGROUND_DATA_CHANGED = "com.fsck.k9.intent.action.MAIL_SERVICE_BACKGROUND_DATA_CHANGED"; private static final String CANCEL_CONNECTIVITY_NOTICE = "com.fsck.k9.intent.action.MAIL_SERVICE_CANCEL_CONNECTIVITY_NOTICE"; private static final String HAS_CONNECTIVITY = "com.fsck.k9.intent.action.MAIL_SERVICE_HAS_CONNECTIVITY"; - - - public static void actionReschedule(Context context, Integer wakeLockId) + public static void actionReset(Context context, Integer wakeLockId) { Intent i = new Intent(); i.setClass(context, MailService.class); - i.setAction(MailService.ACTION_RESCHEDULE); + i.setAction(MailService.ACTION_RESET); addWakeLockId(i, wakeLockId); if (wakeLockId == null) { @@ -51,13 +50,30 @@ public class MailService extends CoreService } context.startService(i); } - - public static void rescheduleCheck(Context context, Integer wakeLockId) + + public static void actionRestartPushers(Context context, Integer wakeLockId) { Intent i = new Intent(); i.setClass(context, MailService.class); - i.setAction(MailService.ACTION_RESCHEDULE_CHECK); + i.setAction(MailService.ACTION_RESTART_PUSHERS); addWakeLockId(i, wakeLockId); + if (wakeLockId == null) + { + addWakeLock(context, i); + } + context.startService(i); + } + + public static void actionReschedulePoll(Context context, Integer wakeLockId) + { + Intent i = new Intent(); + i.setClass(context, MailService.class); + i.setAction(MailService.ACTION_RESCHEDULE_POLL); + addWakeLockId(i, wakeLockId); + if (wakeLockId == null) + { + addWakeLock(context, i); + } context.startService(i); } @@ -80,15 +96,6 @@ public class MailService extends CoreService context.startService(i); } - public static void backgroundDataChanged(Context context, Integer wakeLockId) - { - Intent i = new Intent(); - i.setClass(context, MailService.class); - i.setAction(MailService.BACKGROUND_DATA_CHANGED); - addWakeLockId(i, wakeLockId); - context.startService(i); - } - @Override public void onCreate() { @@ -149,7 +156,7 @@ public class MailService extends CoreService cancel(); } - else if (ACTION_RESCHEDULE.equals(intent.getAction())) + else if (ACTION_RESET.equals(intent.getAction())) { if (K9.DEBUG) Log.v(K9.LOG_TAG, "***** MailService *****: reschedule"); @@ -158,11 +165,18 @@ public class MailService extends CoreService startIdObj = null; } - else if (ACTION_RESCHEDULE_CHECK.equals(intent.getAction())) + else if (ACTION_RESTART_PUSHERS.equals(intent.getAction())) { if (K9.DEBUG) - Log.v(K9.LOG_TAG, "***** MailService *****: reschedule check"); + Log.v(K9.LOG_TAG, "***** MailService *****: restarting pushers"); + reschedulePushers(hasConnectivity, doBackground, startIdObj); + startIdObj = null; + } + else if (ACTION_RESCHEDULE_POLL.equals(intent.getAction())) + { + if (K9.DEBUG) + Log.v(K9.LOG_TAG, "***** MailService *****: rescheduling poll"); reschedule(startIdObj); startIdObj = null; @@ -176,8 +190,7 @@ public class MailService extends CoreService startIdObj = null; } } - else if (CONNECTIVITY_CHANGE.equals(intent.getAction()) || - BACKGROUND_DATA_CHANGED.equals(intent.getAction())) + else if (CONNECTIVITY_CHANGE.equals(intent.getAction()) ) { notifyConnectionStatus(hasConnectivity); rescheduleAll(hasConnectivity, doBackground, startIdObj); @@ -206,12 +219,9 @@ public class MailService extends CoreService if (hasConnectivity && doBackground) { reschedule(null); - reschedulePushers(startId); - } - else - { - stopPushers(startId); } + reschedulePushers(hasConnectivity, doBackground, startId); + } private void notifyConnectionStatus(boolean hasConnectivity) @@ -273,6 +283,7 @@ public class MailService extends CoreService for (Account account : Preferences.getPreferences(MailService.this).getAccounts()) { if (account.getAutomaticCheckIntervalMinutes() != -1 + && account.getFolderSyncMode() != FolderMode.NONE && (account.getAutomaticCheckIntervalMinutes() < shortestInterval || shortestInterval == -1)) { shortestInterval = account.getAutomaticCheckIntervalMinutes(); @@ -282,7 +293,7 @@ public class MailService extends CoreService if (shortestInterval == -1) { if (K9.DEBUG) - Log.v(K9.LOG_TAG, "No next check scheduled for package " + getApplication().getPackageName()); + Log.i(K9.LOG_TAG, "No next check scheduled for package " + getApplication().getPackageName()); cancel(); } else @@ -325,7 +336,7 @@ public class MailService extends CoreService , K9.MAIL_SERVICE_WAKE_LOCK_TIMEOUT, startId); } - private void reschedulePushers(final Integer startId) + private void reschedulePushers(final boolean hasConnectivity, final boolean doBackground, final Integer startId) { execute(getApplication(), new Runnable() { @@ -335,8 +346,11 @@ public class MailService extends CoreService if (K9.DEBUG) Log.i(K9.LOG_TAG, "Rescheduling pushers"); stopPushers(null); - setupPushers(null); - schedulePushers(startId); + if (hasConnectivity && doBackground) + { + setupPushers(null); + schedulePushers(startId); + } } } diff --git a/src/com/fsck/k9/service/PollService.java b/src/com/fsck/k9/service/PollService.java index 26d4e0d4a..98f5314b0 100644 --- a/src/com/fsck/k9/service/PollService.java +++ b/src/com/fsck/k9/service/PollService.java @@ -142,7 +142,7 @@ public class PollService extends CoreService { MessagingController controller = MessagingController.getInstance(getApplication()); controller.setCheckMailListener(null); - MailService.rescheduleCheck(PollService.this, null); + MailService.actionReschedulePoll(PollService.this, null); wakeLockRelease(); if (K9.DEBUG) Log.i(K9.LOG_TAG, "PollService stopping with startId = " + startId); diff --git a/src/com/fsck/k9/service/RemoteControlService.java b/src/com/fsck/k9/service/RemoteControlService.java index d3624ea13..8b44dc7ef 100644 --- a/src/com/fsck/k9/service/RemoteControlService.java +++ b/src/com/fsck/k9/service/RemoteControlService.java @@ -20,6 +20,7 @@ import android.widget.Toast; public class RemoteControlService extends CoreService { private final static String RESCHEDULE_ACTION = "com.fsck.k9.service.RemoteControlService.RESCHEDULE_ACTION"; + private final static String PUSH_RESTART_ACTION = "com.fsck.k9.service.RemoteControlService.PUSH_RESTART_ACTION"; private final static String SET_ACTION = "com.fsck.k9.service.RemoteControlService.SET_ACTION"; @@ -48,8 +49,14 @@ public class RemoteControlService extends CoreService if (RESCHEDULE_ACTION.equals(intent.getAction())) { if (K9.DEBUG) - Log.i(K9.LOG_TAG, "RemoteControlService requesting MailService reschedule"); - MailService.actionReschedule(this, null); + Log.i(K9.LOG_TAG, "RemoteControlService requesting MailService poll reschedule"); + MailService.actionReschedulePoll(this, null); + } + if (PUSH_RESTART_ACTION.equals(intent.getAction())) + { + if (K9.DEBUG) + Log.i(K9.LOG_TAG, "RemoteControlService requesting MailService push restart"); + MailService.actionRestartPushers(this, null); } else if (RemoteControlService.SET_ACTION.equals(intent.getAction())) { @@ -62,6 +69,7 @@ public class RemoteControlService extends CoreService try { boolean needsReschedule = false; + boolean needsPushRestart = false; String uuid = intent.getStringExtra(K9_ACCOUNT_UUID); boolean allAccounts = intent.getBooleanExtra(K9_ALL_ACCOUNTS, false); if (K9.DEBUG) @@ -105,17 +113,11 @@ public class RemoteControlService extends CoreService } if (pushClasses != null) { - FolderMode newClasses = FolderMode.valueOf(pushClasses); - if (newClasses.equals(account.getFolderPushMode()) == false) - { - account.setFolderPushMode(newClasses); - needsReschedule = true; - } - + needsPushRestart |= account.setFolderPushMode(FolderMode.valueOf(pushClasses)); } if (pollClasses != null) { - account.setFolderSyncMode(FolderMode.valueOf(pollClasses)); + needsReschedule |= account.setFolderSyncMode(FolderMode.valueOf(pollClasses)); } if (pollFrequency != null) { @@ -125,11 +127,7 @@ public class RemoteControlService extends CoreService if (allowedFrequency.equals(pollFrequency)) { Integer newInterval = Integer.parseInt(allowedFrequency); - if (newInterval.equals(account.getAutomaticCheckIntervalMinutes()) == false) - { - account.setAutomaticCheckIntervalMinutes(newInterval); - needsReschedule = true; - } + needsReschedule |= account.setAutomaticCheckIntervalMinutes(newInterval); } } } @@ -145,11 +143,7 @@ public class RemoteControlService extends CoreService || K9RemoteControl.K9_BACKGROUND_OPERATIONS_WHEN_CHECKED.equals(backgroundOps)) { BACKGROUND_OPS newBackgroundOps = BACKGROUND_OPS.valueOf(backgroundOps); - if (K9.getBackgroundOps().equals(newBackgroundOps) == false) - { - K9.setBackgroundOps(newBackgroundOps); - needsReschedule = true; - } + needsPushRestart |= K9.setBackgroundOps(newBackgroundOps); } String theme = intent.getStringExtra(K9_THEME); @@ -172,6 +166,14 @@ public class RemoteControlService extends CoreService long nextTime = System.currentTimeMillis() + 10000; BootReceiver.scheduleIntent(RemoteControlService.this, nextTime, i); } + if (needsPushRestart) + { + Intent i = new Intent(); + i.setClassName(getApplication().getPackageName(), "com.fsck.k9.service.RemoteControlService"); + i.setAction(PUSH_RESTART_ACTION); + long nextTime = System.currentTimeMillis() + 10000; + BootReceiver.scheduleIntent(RemoteControlService.this, nextTime, i); + } } catch (Exception e) {