1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-12-25 00:58:50 -05:00

Merge pull request #485 from haselwarter

Conflicts:
	src/com/fsck/k9/preferences/Settings.java
This commit is contained in:
cketti 2014-09-04 23:55:30 +02:00
commit 5f0f4e9c21
12 changed files with 193 additions and 12 deletions

View File

@ -231,6 +231,22 @@
<item>1000</item> <item>1000</item>
</string-array> </string-array>
<string-array name="account_settings_folder_notify_new_mail_mode_entries">
<item>@string/account_settings_folder_notify_new_mail_mode_all</item>
<item>@string/account_settings_folder_notify_new_mail_mode_first_class</item>
<item>@string/account_settings_folder_notify_new_mail_mode_first_and_second_class</item>
<item>@string/account_settings_folder_notify_new_mail_mode_not_second_class</item>
<item>@string/account_settings_folder_notify_new_mail_mode_none</item>
</string-array>
<string-array name="account_settings_folder_notify_new_mail_mode_values" translatable="false">
<item>ALL</item>
<item>FIRST_CLASS</item>
<item>FIRST_AND_SECOND_CLASS</item>
<item>NOT_SECOND_CLASS</item>
<item>NONE</item>
</string-array>
<string-array name="account_settings_folder_target_mode_entries"> <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_all</item>
<item>@string/account_settings_folder_target_mode_first_class</item> <item>@string/account_settings_folder_target_mode_first_class</item>
@ -285,6 +301,20 @@
<item>INHERITED</item> <item>INHERITED</item>
</string-array> </string-array>
<string-array name="folder_settings_folder_notify_mode_entries">
<item>@string/folder_settings_folder_notify_mode_normal</item>
<item>@string/folder_settings_folder_notify_mode_first_class</item>
<item>@string/folder_settings_folder_notify_mode_second_class</item>
<item>@string/folder_settings_folder_notify_mode_inherited</item>
</string-array>
<string-array name="folder_settings_folder_notify_mode_values" translatable="false">
<item>NO_CLASS</item>
<item>FIRST_CLASS</item>
<item>SECOND_CLASS</item>
<item>INHERITED</item>
</string-array>
<string-array name="account_setup_delete_policy_entries"> <string-array name="account_setup_delete_policy_entries">
<item>@string/account_setup_incoming_delete_policy_never_label</item> <item>@string/account_setup_incoming_delete_policy_never_label</item>
<item>@string/account_setup_incoming_delete_policy_delete_label</item> <item>@string/account_setup_incoming_delete_policy_delete_label</item>

View File

@ -509,6 +509,14 @@ Please submit bug reports, contribute new features and ask questions at
<string name="account_settings_default_label">Default account</string> <string name="account_settings_default_label">Default account</string>
<string name="account_settings_default_summary">Send mail from this account by default</string> <string name="account_settings_default_summary">Send mail from this account by default</string>
<string name="account_settings_notify_label">New mail notifications</string> <string name="account_settings_notify_label">New mail notifications</string>
<string name="account_settings_folder_notify_new_mail_mode_label">Notifications folders</string>
<string name="account_settings_folder_notify_new_mail_mode_all">All</string>
<string name="account_settings_folder_notify_new_mail_mode_first_class">Only 1st Class folders</string>
<string name="account_settings_folder_notify_new_mail_mode_first_and_second_class">1st and 2nd Class folders</string>
<string name="account_settings_folder_notify_new_mail_mode_not_second_class">All except 2nd Class folders</string>
<string name="account_settings_folder_notify_new_mail_mode_none">None</string>
<string name="account_settings_notify_sync_label">Sync notifications</string> <string name="account_settings_notify_sync_label">Sync notifications</string>
<string name="account_settings_email_label">Your email address</string> <string name="account_settings_email_label">Your email address</string>
<string name="account_settings_notify_summary">Notify in status bar when mail arrives</string> <string name="account_settings_notify_summary">Notify in status bar when mail arrives</string>
@ -658,6 +666,12 @@ Please submit bug reports, contribute new features and ask questions at
<string name="folder_settings_folder_push_mode_second_class">2nd Class</string> <string name="folder_settings_folder_push_mode_second_class">2nd Class</string>
<string name="folder_settings_folder_push_mode_inherited">Same as sync class</string> <string name="folder_settings_folder_push_mode_inherited">Same as sync class</string>
<string name="folder_settings_folder_notify_mode_label">Folder notification class</string>
<string name="folder_settings_folder_notify_mode_normal">None</string>
<string name="folder_settings_folder_notify_mode_first_class">1st Class</string>
<string name="folder_settings_folder_notify_mode_second_class">2nd Class</string>
<string name="folder_settings_folder_notify_mode_inherited">Same as push class</string>
<string name="account_settings_incoming_label">Incoming server</string> <string name="account_settings_incoming_label">Incoming server</string>
<string name="account_settings_incoming_summary">Configure the incoming mail server</string> <string name="account_settings_incoming_summary">Configure the incoming mail server</string>
<string name="account_settings_outgoing_label">Outgoing server</string> <string name="account_settings_outgoing_label">Outgoing server</string>

View File

@ -343,6 +343,15 @@
android:defaultValue="true" android:defaultValue="true"
android:summary="@string/account_settings_notify_summary" /> android:summary="@string/account_settings_notify_summary" />
<ListPreference
android:persistent="false"
android:key="folder_notify_new_mail_mode"
android:dependency="account_notify"
android:title="@string/account_settings_folder_notify_new_mail_mode_label"
android:entries="@array/account_settings_folder_notify_new_mail_mode_entries"
android:entryValues="@array/account_settings_folder_notify_new_mail_mode_values"
android:dialogTitle="@string/account_settings_folder_notify_new_mail_mode_label" />
<CheckBoxPreference <CheckBoxPreference
android:persistent="false" android:persistent="false"
android:key="account_notify_self" android:key="account_notify_self"

View File

@ -58,6 +58,14 @@
android:entryValues="@array/folder_settings_folder_push_mode_values" android:entryValues="@array/folder_settings_folder_push_mode_values"
android:dialogTitle="@string/folder_settings_folder_push_mode_label" /> android:dialogTitle="@string/folder_settings_folder_push_mode_label" />
<ListPreference
android:persistent="false"
android:key="folder_settings_folder_notify_mode"
android:title="@string/folder_settings_folder_notify_mode_label"
android:entries="@array/folder_settings_folder_notify_mode_entries"
android:entryValues="@array/folder_settings_folder_notify_mode_values"
android:dialogTitle="@string/folder_settings_folder_notify_mode_label" />
<CheckBoxPreference <CheckBoxPreference
android:persistent="false" android:persistent="false"
android:key="folder_settings_include_in_integrated_inbox" android:key="folder_settings_include_in_integrated_inbox"

View File

@ -164,6 +164,7 @@ public class Account implements BaseAccount {
private long mLastAutomaticCheckTime; private long mLastAutomaticCheckTime;
private long mLatestOldMessageSeenTime; private long mLatestOldMessageSeenTime;
private boolean mNotifyNewMail; private boolean mNotifyNewMail;
private FolderMode mFolderNotifyNewMailMode;
private boolean mNotifySelfNewMail; private boolean mNotifySelfNewMail;
private String mInboxFolderName; private String mInboxFolderName;
private String mDraftsFolderName; private String mDraftsFolderName;
@ -274,6 +275,7 @@ public class Account implements BaseAccount {
mDisplayCount = K9.DEFAULT_VISIBLE_LIMIT; mDisplayCount = K9.DEFAULT_VISIBLE_LIMIT;
mAccountNumber = -1; mAccountNumber = -1;
mNotifyNewMail = true; mNotifyNewMail = true;
mFolderNotifyNewMailMode = FolderMode.ALL;
mNotifySync = true; mNotifySync = true;
mNotifySelfNewMail = true; mNotifySelfNewMail = true;
mFolderDisplayMode = FolderMode.NOT_SECOND_CLASS; mFolderDisplayMode = FolderMode.NOT_SECOND_CLASS;
@ -382,6 +384,12 @@ public class Account implements BaseAccount {
mLastAutomaticCheckTime = prefs.getLong(mUuid + ".lastAutomaticCheckTime", 0); mLastAutomaticCheckTime = prefs.getLong(mUuid + ".lastAutomaticCheckTime", 0);
mLatestOldMessageSeenTime = prefs.getLong(mUuid + ".latestOldMessageSeenTime", 0); mLatestOldMessageSeenTime = prefs.getLong(mUuid + ".latestOldMessageSeenTime", 0);
mNotifyNewMail = prefs.getBoolean(mUuid + ".notifyNewMail", false); mNotifyNewMail = prefs.getBoolean(mUuid + ".notifyNewMail", false);
try {
mFolderNotifyNewMailMode = FolderMode.valueOf(prefs.getString(mUuid + ".folderNotifyNewMailMode",
FolderMode.ALL.name()));
} catch (Exception e) {
mFolderNotifyNewMailMode = FolderMode.ALL;
}
mNotifySelfNewMail = prefs.getBoolean(mUuid + ".notifySelfNewMail", true); mNotifySelfNewMail = prefs.getBoolean(mUuid + ".notifySelfNewMail", true);
mNotifySync = prefs.getBoolean(mUuid + ".notifyMailCheck", false); mNotifySync = prefs.getBoolean(mUuid + ".notifyMailCheck", false);
mDeletePolicy = prefs.getInt(mUuid + ".deletePolicy", 0); mDeletePolicy = prefs.getInt(mUuid + ".deletePolicy", 0);
@ -703,6 +711,7 @@ public class Account implements BaseAccount {
editor.putLong(mUuid + ".lastAutomaticCheckTime", mLastAutomaticCheckTime); editor.putLong(mUuid + ".lastAutomaticCheckTime", mLastAutomaticCheckTime);
editor.putLong(mUuid + ".latestOldMessageSeenTime", mLatestOldMessageSeenTime); editor.putLong(mUuid + ".latestOldMessageSeenTime", mLatestOldMessageSeenTime);
editor.putBoolean(mUuid + ".notifyNewMail", mNotifyNewMail); editor.putBoolean(mUuid + ".notifyNewMail", mNotifyNewMail);
editor.putString(mUuid + ".folderNotifyNewMailMode", mFolderNotifyNewMailMode.name());
editor.putBoolean(mUuid + ".notifySelfNewMail", mNotifySelfNewMail); editor.putBoolean(mUuid + ".notifySelfNewMail", mNotifySelfNewMail);
editor.putBoolean(mUuid + ".notifyMailCheck", mNotifySync); editor.putBoolean(mUuid + ".notifyMailCheck", mNotifySync);
editor.putInt(mUuid + ".deletePolicy", mDeletePolicy); editor.putInt(mUuid + ".deletePolicy", mDeletePolicy);
@ -1057,6 +1066,14 @@ public class Account implements BaseAccount {
this.mNotifyNewMail = notifyNewMail; this.mNotifyNewMail = notifyNewMail;
} }
public synchronized FolderMode getFolderNotifyNewMailMode() {
return mFolderNotifyNewMailMode;
}
public synchronized void setFolderNotifyNewMailMode(FolderMode folderNotifyNewMailMode) {
this.mFolderNotifyNewMailMode = folderNotifyNewMailMode;
}
public synchronized int getDeletePolicy() { public synchronized int getDeletePolicy() {
return mDeletePolicy; return mDeletePolicy;
} }

View File

@ -71,6 +71,7 @@ public class AccountSettings extends K9PreferenceActivity {
private static final String PREFERENCE_DEFAULT = "account_default"; private static final String PREFERENCE_DEFAULT = "account_default";
private static final String PREFERENCE_SHOW_PICTURES = "show_pictures_enum"; private static final String PREFERENCE_SHOW_PICTURES = "show_pictures_enum";
private static final String PREFERENCE_NOTIFY = "account_notify"; private static final String PREFERENCE_NOTIFY = "account_notify";
private static final String PREFERENCE_NOTIFY_NEW_MAIL_MODE = "folder_notify_new_mail_mode";
private static final String PREFERENCE_NOTIFY_SELF = "account_notify_self"; private static final String PREFERENCE_NOTIFY_SELF = "account_notify_self";
private static final String PREFERENCE_NOTIFY_SYNC = "account_notify_sync"; private static final String PREFERENCE_NOTIFY_SYNC = "account_notify_sync";
private static final String PREFERENCE_VIBRATE = "account_vibrate"; private static final String PREFERENCE_VIBRATE = "account_vibrate";
@ -139,6 +140,7 @@ public class AccountSettings extends K9PreferenceActivity {
private ListPreference mMessageSize; private ListPreference mMessageSize;
private CheckBoxPreference mAccountDefault; private CheckBoxPreference mAccountDefault;
private CheckBoxPreference mAccountNotify; private CheckBoxPreference mAccountNotify;
private ListPreference mAccountNotifyNewMailMode;
private CheckBoxPreference mAccountNotifySelf; private CheckBoxPreference mAccountNotifySelf;
private ListPreference mAccountShowPictures; private ListPreference mAccountShowPictures;
private CheckBoxPreference mAccountNotifySync; private CheckBoxPreference mAccountNotifySync;
@ -569,6 +571,19 @@ public class AccountSettings extends K9PreferenceActivity {
mAccountNotify = (CheckBoxPreference) findPreference(PREFERENCE_NOTIFY); mAccountNotify = (CheckBoxPreference) findPreference(PREFERENCE_NOTIFY);
mAccountNotify.setChecked(mAccount.isNotifyNewMail()); mAccountNotify.setChecked(mAccount.isNotifyNewMail());
mAccountNotifyNewMailMode = (ListPreference) findPreference(PREFERENCE_NOTIFY_NEW_MAIL_MODE);
mAccountNotifyNewMailMode.setValue(mAccount.getFolderNotifyNewMailMode().name());
mAccountNotifyNewMailMode.setSummary(mAccountNotifyNewMailMode.getEntry());
mAccountNotifyNewMailMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
final String summary = newValue.toString();
int index = mAccountNotifyNewMailMode.findIndexOfValue(summary);
mAccountNotifyNewMailMode.setSummary(mAccountNotifyNewMailMode.getEntries()[index]);
mAccountNotifyNewMailMode.setValue(summary);
return false;
}
});
mAccountNotifySelf = (CheckBoxPreference) findPreference(PREFERENCE_NOTIFY_SELF); mAccountNotifySelf = (CheckBoxPreference) findPreference(PREFERENCE_NOTIFY_SELF);
mAccountNotifySelf.setChecked(mAccount.isNotifySelfNewMail()); mAccountNotifySelf.setChecked(mAccount.isNotifySelfNewMail());
@ -747,6 +762,7 @@ public class AccountSettings extends K9PreferenceActivity {
mAccount.setDescription(mAccountDescription.getText()); mAccount.setDescription(mAccountDescription.getText());
mAccount.setMarkMessageAsReadOnView(mMarkMessageAsReadOnView.isChecked()); mAccount.setMarkMessageAsReadOnView(mMarkMessageAsReadOnView.isChecked());
mAccount.setNotifyNewMail(mAccountNotify.isChecked()); mAccount.setNotifyNewMail(mAccountNotify.isChecked());
mAccount.setFolderNotifyNewMailMode(Account.FolderMode.valueOf(mAccountNotifyNewMailMode.getValue()));
mAccount.setNotifySelfNewMail(mAccountNotifySelf.isChecked()); mAccount.setNotifySelfNewMail(mAccountNotifySelf.isChecked());
mAccount.setShowOngoing(mAccountNotifySync.isChecked()); mAccount.setShowOngoing(mAccountNotifySync.isChecked());
mAccount.setDisplayCount(Integer.parseInt(mDisplayCount.getValue())); mAccount.setDisplayCount(Integer.parseInt(mDisplayCount.getValue()));

View File

@ -29,6 +29,7 @@ public class FolderSettings extends K9PreferenceActivity {
private static final String PREFERENCE_DISPLAY_CLASS = "folder_settings_folder_display_mode"; 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_SYNC_CLASS = "folder_settings_folder_sync_mode";
private static final String PREFERENCE_PUSH_CLASS = "folder_settings_folder_push_mode"; private static final String PREFERENCE_PUSH_CLASS = "folder_settings_folder_push_mode";
private static final String PREFERENCE_NOTIFY_CLASS = "folder_settings_folder_notify_mode";
private static final String PREFERENCE_IN_TOP_GROUP = "folder_settings_in_top_group"; private static final String PREFERENCE_IN_TOP_GROUP = "folder_settings_in_top_group";
private static final String PREFERENCE_INTEGRATE = "folder_settings_include_in_integrated_inbox"; private static final String PREFERENCE_INTEGRATE = "folder_settings_include_in_integrated_inbox";
@ -39,6 +40,7 @@ public class FolderSettings extends K9PreferenceActivity {
private ListPreference mDisplayClass; private ListPreference mDisplayClass;
private ListPreference mSyncClass; private ListPreference mSyncClass;
private ListPreference mPushClass; private ListPreference mPushClass;
private ListPreference mNotifyClass;
public static void actionSettings(Context context, Account account, String folderName) { public static void actionSettings(Context context, Account account, String folderName) {
Intent i = new Intent(context, FolderSettings.class); Intent i = new Intent(context, FolderSettings.class);
@ -124,6 +126,19 @@ public class FolderSettings extends K9PreferenceActivity {
return false; return false;
} }
}); });
mNotifyClass = (ListPreference) findPreference(PREFERENCE_NOTIFY_CLASS);
mNotifyClass.setValue(mFolder.getRawNotifyClass().name());
mNotifyClass.setSummary(mNotifyClass.getEntry());
mNotifyClass.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
final String summary = newValue.toString();
int index = mNotifyClass.findIndexOfValue(summary);
mNotifyClass.setSummary(mNotifyClass.getEntries()[index]);
mNotifyClass.setValue(summary);
return false;
}
});
} }
private void saveSettings() throws MessagingException { private void saveSettings() throws MessagingException {
@ -135,6 +150,7 @@ public class FolderSettings extends K9PreferenceActivity {
mFolder.setDisplayClass(FolderClass.valueOf(mDisplayClass.getValue())); mFolder.setDisplayClass(FolderClass.valueOf(mDisplayClass.getValue()));
mFolder.setSyncClass(FolderClass.valueOf(mSyncClass.getValue())); mFolder.setSyncClass(FolderClass.valueOf(mSyncClass.getValue()));
mFolder.setPushClass(FolderClass.valueOf(mPushClass.getValue())); mFolder.setPushClass(FolderClass.valueOf(mPushClass.getValue()));
mFolder.setNotifyClass(FolderClass.valueOf(mNotifyClass.getValue()));
mFolder.save(); mFolder.save();

View File

@ -4616,6 +4616,21 @@ public class MessagingController implements Runnable {
return false; return false;
} }
Account.FolderMode aDisplayMode = account.getFolderDisplayMode();
Account.FolderMode aNotifyMode = account.getFolderNotifyNewMailMode();
Folder.FolderClass fDisplayClass = localFolder.getDisplayClass();
Folder.FolderClass fNotifyClass = localFolder.getNotifyClass();
if (modeMismatch(aDisplayMode, fDisplayClass)) {
// Never notify a folder that isn't displayed
return false;
}
if (modeMismatch(aNotifyMode, fNotifyClass)) {
// Do not notify folders in the wrong class
return false;
}
// If the account is a POP3 account and the message is older than the oldest message we've // If the account is a POP3 account and the message is older than the oldest message we've
// previously seen, then don't notify about it. // previously seen, then don't notify about it.
if (account.getStoreUri().startsWith("pop3") && if (account.getStoreUri().startsWith("pop3") &&

View File

@ -108,7 +108,7 @@ public class LocalStore extends Store implements Serializable {
private static final String GET_FOLDER_COLS = private static final String GET_FOLDER_COLS =
"folders.id, name, visible_limit, last_updated, status, push_state, last_pushed, " + "folders.id, name, visible_limit, last_updated, status, push_state, last_pushed, " +
"integrate, top_group, poll_class, push_class, display_class"; "integrate, top_group, poll_class, push_class, display_class, notify_class";
private static final int FOLDER_ID_INDEX = 0; private static final int FOLDER_ID_INDEX = 0;
private static final int FOLDER_NAME_INDEX = 1; private static final int FOLDER_NAME_INDEX = 1;
@ -122,6 +122,7 @@ public class LocalStore extends Store implements Serializable {
private static final int FOLDER_SYNC_CLASS_INDEX = 9; private static final int FOLDER_SYNC_CLASS_INDEX = 9;
private static final int FOLDER_PUSH_CLASS_INDEX = 10; private static final int FOLDER_PUSH_CLASS_INDEX = 10;
private static final int FOLDER_DISPLAY_CLASS_INDEX = 11; private static final int FOLDER_DISPLAY_CLASS_INDEX = 11;
private static final int FOLDER_NOTIFY_CLASS_INDEX = 12;
private static final String[] UID_CHECK_PROJECTION = { "uid" }; private static final String[] UID_CHECK_PROJECTION = { "uid" };
@ -146,7 +147,7 @@ public class LocalStore extends Store implements Serializable {
*/ */
private static final int THREAD_FLAG_UPDATE_BATCH_SIZE = 500; private static final int THREAD_FLAG_UPDATE_BATCH_SIZE = 500;
public static final int DB_VERSION = 49; public static final int DB_VERSION = 50;
public static String getColumnNameForFlag(Flag flag) { public static String getColumnNameForFlag(Flag flag) {
@ -238,7 +239,7 @@ public class LocalStore extends Store implements Serializable {
db.execSQL("CREATE TABLE folders (id INTEGER PRIMARY KEY, name TEXT, " db.execSQL("CREATE TABLE folders (id INTEGER PRIMARY KEY, name TEXT, "
+ "last_updated INTEGER, unread_count INTEGER, visible_limit INTEGER, status TEXT, " + "last_updated INTEGER, unread_count INTEGER, visible_limit INTEGER, status TEXT, "
+ "push_state TEXT, last_pushed INTEGER, flagged_count INTEGER default 0, " + "push_state TEXT, last_pushed INTEGER, flagged_count INTEGER default 0, "
+ "integrate INTEGER, top_group INTEGER, poll_class TEXT, push_class TEXT, display_class TEXT" + "integrate INTEGER, top_group INTEGER, poll_class TEXT, push_class TEXT, display_class TEXT, notify_class TEXT"
+ ")"); + ")");
db.execSQL("CREATE INDEX IF NOT EXISTS folder_name ON folders (name)"); db.execSQL("CREATE INDEX IF NOT EXISTS folder_name ON folders (name)");
@ -424,10 +425,9 @@ public class LocalStore extends Store implements Serializable {
throw e; throw e;
} }
} }
Cursor cursor = null; Cursor cursor = null;
try { try {
SharedPreferences prefs = getPreferences(); SharedPreferences prefs = getPreferences();
cursor = db.rawQuery("SELECT id, name FROM folders", null); cursor = db.rawQuery("SELECT id, name FROM folders", null);
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
@ -439,12 +439,8 @@ public class LocalStore extends Store implements Serializable {
Log.e(K9.LOG_TAG, " error trying to ugpgrade a folder class", e); Log.e(K9.LOG_TAG, " error trying to ugpgrade a folder class", e);
} }
} }
} } catch (SQLiteException e) {
catch (SQLiteException e) {
Log.e(K9.LOG_TAG, "Exception while upgrading database to v41. folder classes may have vanished", e); Log.e(K9.LOG_TAG, "Exception while upgrading database to v41. folder classes may have vanished", e);
} finally { } finally {
Utility.closeQuietly(cursor); Utility.closeQuietly(cursor);
} }
@ -703,6 +699,22 @@ public class LocalStore extends Store implements Serializable {
db.execSQL("CREATE INDEX IF NOT EXISTS msg_composite ON messages (deleted, empty,folder_id,flagged,read)"); db.execSQL("CREATE INDEX IF NOT EXISTS msg_composite ON messages (deleted, empty,folder_id,flagged,read)");
} }
if (db.getVersion() < 50) {
try {
db.execSQL("ALTER TABLE folders ADD notify_class TEXT default '" +
Folder.FolderClass.INHERITED.name() + "'");
} catch (SQLiteException e) {
if (! e.getMessage().startsWith("duplicate column name:")) {
throw e;
}
}
ContentValues cv = new ContentValues();
cv.put("notify_class", Folder.FolderClass.FIRST_CLASS.name());
db.update("folders", cv, "name = ?",
new String[] { getAccount().getInboxFolderName() });
}
} }
db.setVersion(DB_VERSION); db.setVersion(DB_VERSION);
@ -1274,6 +1286,7 @@ public class LocalStore extends Store implements Serializable {
prefHolder.displayClass = LocalFolder.FolderClass.FIRST_CLASS; prefHolder.displayClass = LocalFolder.FolderClass.FIRST_CLASS;
if (name.equalsIgnoreCase(mAccount.getInboxFolderName())) { if (name.equalsIgnoreCase(mAccount.getInboxFolderName())) {
prefHolder.integrate = true; prefHolder.integrate = true;
prefHolder.notifyClass = LocalFolder.FolderClass.FIRST_CLASS;
prefHolder.pushClass = LocalFolder.FolderClass.FIRST_CLASS; prefHolder.pushClass = LocalFolder.FolderClass.FIRST_CLASS;
} else { } else {
prefHolder.pushClass = LocalFolder.FolderClass.INHERITED; prefHolder.pushClass = LocalFolder.FolderClass.INHERITED;
@ -1288,12 +1301,13 @@ public class LocalStore extends Store implements Serializable {
} }
folder.refresh(name, prefHolder); // Recover settings from Preferences folder.refresh(name, prefHolder); // Recover settings from Preferences
db.execSQL("INSERT INTO folders (name, visible_limit, top_group, display_class, poll_class, push_class, integrate) VALUES (?, ?, ?, ?, ?, ?, ?)", new Object[] { db.execSQL("INSERT INTO folders (name, visible_limit, top_group, display_class, poll_class, notify_class, push_class, integrate) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", new Object[] {
name, name,
visibleLimit, visibleLimit,
prefHolder.inTopGroup ? 1 : 0, prefHolder.inTopGroup ? 1 : 0,
prefHolder.displayClass.name(), prefHolder.displayClass.name(),
prefHolder.syncClass.name(), prefHolder.syncClass.name(),
prefHolder.notifyClass.name(),
prefHolder.pushClass.name(), prefHolder.pushClass.name(),
prefHolder.integrate ? 1 : 0, prefHolder.integrate ? 1 : 0,
}); });
@ -1338,6 +1352,7 @@ public class LocalStore extends Store implements Serializable {
private FolderClass mDisplayClass = FolderClass.NO_CLASS; private FolderClass mDisplayClass = FolderClass.NO_CLASS;
private FolderClass mSyncClass = FolderClass.INHERITED; private FolderClass mSyncClass = FolderClass.INHERITED;
private FolderClass mPushClass = FolderClass.SECOND_CLASS; private FolderClass mPushClass = FolderClass.SECOND_CLASS;
private FolderClass mNotifyClass = FolderClass.INHERITED;
private boolean mInTopGroup = false; private boolean mInTopGroup = false;
private String mPushState = null; private String mPushState = null;
private boolean mIntegrate = false; private boolean mIntegrate = false;
@ -1431,6 +1446,8 @@ public class LocalStore extends Store implements Serializable {
String noClass = FolderClass.NO_CLASS.toString(); String noClass = FolderClass.NO_CLASS.toString();
String displayClass = cursor.getString(FOLDER_DISPLAY_CLASS_INDEX); String displayClass = cursor.getString(FOLDER_DISPLAY_CLASS_INDEX);
mDisplayClass = Folder.FolderClass.valueOf((displayClass == null) ? noClass : displayClass); mDisplayClass = Folder.FolderClass.valueOf((displayClass == null) ? noClass : displayClass);
String notifyClass = cursor.getString(FOLDER_NOTIFY_CLASS_INDEX);
mNotifyClass = Folder.FolderClass.valueOf((notifyClass == null) ? noClass : notifyClass);
String pushClass = cursor.getString(FOLDER_PUSH_CLASS_INDEX); String pushClass = cursor.getString(FOLDER_PUSH_CLASS_INDEX);
mPushClass = Folder.FolderClass.valueOf((pushClass == null) ? noClass : pushClass); mPushClass = Folder.FolderClass.valueOf((pushClass == null) ? noClass : pushClass);
String syncClass = cursor.getString(FOLDER_SYNC_CLASS_INDEX); String syncClass = cursor.getString(FOLDER_SYNC_CLASS_INDEX);
@ -1496,6 +1513,7 @@ public class LocalStore extends Store implements Serializable {
private class PreferencesHolder { private class PreferencesHolder {
FolderClass displayClass = mDisplayClass; FolderClass displayClass = mDisplayClass;
FolderClass syncClass = mSyncClass; FolderClass syncClass = mSyncClass;
FolderClass notifyClass = mNotifyClass;
FolderClass pushClass = mPushClass; FolderClass pushClass = mPushClass;
boolean inTopGroup = mInTopGroup; boolean inTopGroup = mInTopGroup;
boolean integrate = mIntegrate; boolean integrate = mIntegrate;
@ -1678,6 +1696,7 @@ public class LocalStore extends Store implements Serializable {
public String getPushState() { public String getPushState() {
return mPushState; return mPushState;
} }
@Override @Override
public FolderClass getDisplayClass() { public FolderClass getDisplayClass() {
return mDisplayClass; return mDisplayClass;
@ -1692,6 +1711,14 @@ public class LocalStore extends Store implements Serializable {
return mSyncClass; return mSyncClass;
} }
public FolderClass getNotifyClass() {
return (FolderClass.INHERITED == mNotifyClass) ? getPushClass() : mNotifyClass;
}
public FolderClass getRawNotifyClass() {
return mNotifyClass;
}
@Override @Override
public FolderClass getPushClass() { public FolderClass getPushClass() {
return (FolderClass.INHERITED == mPushClass) ? getSyncClass() : mPushClass; return (FolderClass.INHERITED == mPushClass) ? getSyncClass() : mPushClass;
@ -1711,14 +1738,21 @@ public class LocalStore extends Store implements Serializable {
mSyncClass = syncClass; mSyncClass = syncClass;
updateFolderColumn("poll_class", mSyncClass.name()); updateFolderColumn("poll_class", mSyncClass.name());
} }
public void setPushClass(FolderClass pushClass) throws MessagingException { public void setPushClass(FolderClass pushClass) throws MessagingException {
mPushClass = pushClass; mPushClass = pushClass;
updateFolderColumn("push_class", mPushClass.name()); updateFolderColumn("push_class", mPushClass.name());
} }
public void setNotifyClass(FolderClass notifyClass) throws MessagingException {
mNotifyClass = notifyClass;
updateFolderColumn("notify_class", mNotifyClass.name());
}
public boolean isIntegrate() { public boolean isIntegrate() {
return mIntegrate; return mIntegrate;
} }
public void setIntegrate(boolean integrate) throws MessagingException { public void setIntegrate(boolean integrate) throws MessagingException {
mIntegrate = integrate; mIntegrate = integrate;
updateFolderColumn("integrate", mIntegrate ? 1 : 0); updateFolderColumn("integrate", mIntegrate ? 1 : 0);
@ -1774,6 +1808,12 @@ public class LocalStore extends Store implements Serializable {
editor.putString(id + ".syncMode", mSyncClass.name()); editor.putString(id + ".syncMode", mSyncClass.name());
} }
if (mNotifyClass == FolderClass.INHERITED && !mAccount.getInboxFolderName().equals(getName())) {
editor.remove(id + ".notifyMode");
} else {
editor.putString(id + ".notifyMode", mNotifyClass.name());
}
if (mPushClass == FolderClass.SECOND_CLASS && !mAccount.getInboxFolderName().equals(getName())) { if (mPushClass == FolderClass.SECOND_CLASS && !mAccount.getInboxFolderName().equals(getName())) {
editor.remove(id + ".pushMode"); editor.remove(id + ".pushMode");
} else { } else {
@ -1811,6 +1851,16 @@ public class LocalStore extends Store implements Serializable {
prefHolder.syncClass = FolderClass.INHERITED; prefHolder.syncClass = FolderClass.INHERITED;
} }
try {
prefHolder.notifyClass = FolderClass.valueOf(preferences.getString(id + ".notifyMode",
prefHolder.notifyClass.name()));
} catch (Exception e) {
Log.e(K9.LOG_TAG, "Unable to load notifyMode for " + getName(), e);
}
if (prefHolder.notifyClass == FolderClass.NONE) {
prefHolder.notifyClass = FolderClass.INHERITED;
}
try { try {
prefHolder.pushClass = FolderClass.valueOf(preferences.getString(id + ".pushMode", prefHolder.pushClass = FolderClass.valueOf(preferences.getString(id + ".pushMode",
prefHolder.pushClass.name())); prefHolder.pushClass.name()));

View File

@ -135,6 +135,9 @@ public class AccountSettings {
s.put("notifyNewMail", Settings.versions( s.put("notifyNewMail", Settings.versions(
new V(1, new BooleanSetting(false)) new V(1, new BooleanSetting(false))
)); ));
s.put("folderNotifyNewMailMode", Settings.versions(
new V(34, new EnumSetting<FolderMode>(FolderMode.class, FolderMode.ALL))
));
s.put("notifySelfNewMail", Settings.versions( s.put("notifySelfNewMail", Settings.versions(
new V(1, new BooleanSetting(true)) new V(1, new BooleanSetting(true))
)); ));

View File

@ -28,6 +28,9 @@ public class FolderSettings {
s.put("displayMode", Settings.versions( s.put("displayMode", Settings.versions(
new V(1, new EnumSetting<FolderClass>(FolderClass.class, FolderClass.NO_CLASS)) new V(1, new EnumSetting<FolderClass>(FolderClass.class, FolderClass.NO_CLASS))
)); ));
s.put("notifyMode", Settings.versions(
new V(34, new EnumSetting<FolderClass>(FolderClass.class, FolderClass.INHERITED))
));
s.put("syncMode", Settings.versions( s.put("syncMode", Settings.versions(
new V(1, new EnumSetting<FolderClass>(FolderClass.class, FolderClass.INHERITED)) new V(1, new EnumSetting<FolderClass>(FolderClass.class, FolderClass.INHERITED))
)); ));

View File

@ -35,7 +35,7 @@ public class Settings {
* *
* @see SettingsExporter * @see SettingsExporter
*/ */
public static final int VERSION = 33; public static final int VERSION = 34;
public static Map<String, Object> validate(int version, Map<String, public static Map<String, Object> validate(int version, Map<String,
TreeMap<Integer, SettingsDescription>> settings, TreeMap<Integer, SettingsDescription>> settings,