am 2ac94a9c
: Update Star and Read/Unread from IMAP server
Merge commit '2ac94a9cc254ff0a4c17407eb1bda31d433ef651' * commit '2ac94a9cc254ff0a4c17407eb1bda31d433ef651': Update Star and Read/Unread from IMAP server
This commit is contained in:
commit
d37ba18434
@ -17,6 +17,7 @@
|
|||||||
package com.android.email;
|
package com.android.email;
|
||||||
|
|
||||||
import com.android.email.mail.Address;
|
import com.android.email.mail.Address;
|
||||||
|
import com.android.email.mail.Flag;
|
||||||
import com.android.email.mail.Message;
|
import com.android.email.mail.Message;
|
||||||
import com.android.email.mail.MessagingException;
|
import com.android.email.mail.MessagingException;
|
||||||
import com.android.email.mail.Part;
|
import com.android.email.mail.Part;
|
||||||
@ -70,7 +71,7 @@ public class LegacyConversions {
|
|||||||
localMessage.mSubject = subject;
|
localMessage.mSubject = subject;
|
||||||
}
|
}
|
||||||
// public String mPreview;
|
// public String mPreview;
|
||||||
// public boolean mFlagRead = false;
|
localMessage.mFlagRead = message.isSet(Flag.SEEN);
|
||||||
|
|
||||||
// Keep the message in the "unloaded" state until it has (at least) a display name.
|
// Keep the message in the "unloaded" state until it has (at least) a display name.
|
||||||
// This prevents early flickering of empty messages in POP download.
|
// This prevents early flickering of empty messages in POP download.
|
||||||
@ -81,8 +82,7 @@ public class LegacyConversions {
|
|||||||
localMessage.mFlagLoaded = EmailContent.Message.PARTIALLY_LOADED;
|
localMessage.mFlagLoaded = EmailContent.Message.PARTIALLY_LOADED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO handle flags, favorites, and read/unread
|
localMessage.mFlagFavorite = message.isSet(Flag.FLAGGED);
|
||||||
// public boolean mFlagFavorite = false;
|
|
||||||
// public boolean mFlagAttachment = false;
|
// public boolean mFlagAttachment = false;
|
||||||
// public int mFlags = 0;
|
// public int mFlags = 0;
|
||||||
//
|
//
|
||||||
|
@ -517,19 +517,19 @@ public class MessagingController implements Runnable {
|
|||||||
private static class LocalMessageInfo {
|
private static class LocalMessageInfo {
|
||||||
private static final int COLUMN_ID = 0;
|
private static final int COLUMN_ID = 0;
|
||||||
private static final int COLUMN_FLAG_READ = 1;
|
private static final int COLUMN_FLAG_READ = 1;
|
||||||
private static final int COLUMN_FLAG_LOADED = 2;
|
private static final int COLUMN_FLAG_FAVORITE = 2;
|
||||||
private static final int COLUMN_SERVER_ID = 3;
|
private static final int COLUMN_FLAG_LOADED = 3;
|
||||||
private static final int COLUMN_MAILBOX_KEY = 4;
|
private static final int COLUMN_SERVER_ID = 4;
|
||||||
private static final int COLUMN_ACCOUNT_KEY = 5;
|
|
||||||
private static final String[] PROJECTION = new String[] {
|
private static final String[] PROJECTION = new String[] {
|
||||||
EmailContent.RECORD_ID,
|
EmailContent.RECORD_ID,
|
||||||
MessageColumns.FLAG_READ, MessageColumns.FLAG_LOADED,
|
MessageColumns.FLAG_READ, MessageColumns.FLAG_FAVORITE, MessageColumns.FLAG_LOADED,
|
||||||
SyncColumns.SERVER_ID, MessageColumns.MAILBOX_KEY, MessageColumns.ACCOUNT_KEY
|
SyncColumns.SERVER_ID, MessageColumns.MAILBOX_KEY, MessageColumns.ACCOUNT_KEY
|
||||||
};
|
};
|
||||||
|
|
||||||
int mCursorIndex;
|
int mCursorIndex;
|
||||||
long mId;
|
long mId;
|
||||||
boolean mFlagRead;
|
boolean mFlagRead;
|
||||||
|
boolean mFlagFavorite;
|
||||||
int mFlagLoaded;
|
int mFlagLoaded;
|
||||||
String mServerId;
|
String mServerId;
|
||||||
|
|
||||||
@ -537,6 +537,7 @@ public class MessagingController implements Runnable {
|
|||||||
mCursorIndex = c.getPosition();
|
mCursorIndex = c.getPosition();
|
||||||
mId = c.getLong(COLUMN_ID);
|
mId = c.getLong(COLUMN_ID);
|
||||||
mFlagRead = c.getInt(COLUMN_FLAG_READ) != 0;
|
mFlagRead = c.getInt(COLUMN_FLAG_READ) != 0;
|
||||||
|
mFlagFavorite = c.getInt(COLUMN_FLAG_FAVORITE) != 0;
|
||||||
mFlagLoaded = c.getInt(COLUMN_FLAG_LOADED);
|
mFlagLoaded = c.getInt(COLUMN_FLAG_LOADED);
|
||||||
mServerId = c.getString(COLUMN_SERVER_ID);
|
mServerId = c.getString(COLUMN_SERVER_ID);
|
||||||
// Note: mailbox key and account key not needed - they are projected for the SELECT
|
// Note: mailbox key and account key not needed - they are projected for the SELECT
|
||||||
@ -744,14 +745,18 @@ public class MessagingController implements Runnable {
|
|||||||
FetchProfile fp = new FetchProfile();
|
FetchProfile fp = new FetchProfile();
|
||||||
fp.add(FetchProfile.Item.FLAGS);
|
fp.add(FetchProfile.Item.FLAGS);
|
||||||
remoteFolder.fetch(remoteMessages, fp, null);
|
remoteFolder.fetch(remoteMessages, fp, null);
|
||||||
boolean remoteSupportsSeenFlag = false;
|
boolean remoteSupportsSeen = false;
|
||||||
|
boolean remoteSupportsFlagged = false;
|
||||||
for (Flag flag : remoteFolder.getPermanentFlags()) {
|
for (Flag flag : remoteFolder.getPermanentFlags()) {
|
||||||
if (flag == Flag.SEEN) {
|
if (flag == Flag.SEEN) {
|
||||||
remoteSupportsSeenFlag = true;
|
remoteSupportsSeen = true;
|
||||||
|
}
|
||||||
|
if (flag == Flag.FLAGGED) {
|
||||||
|
remoteSupportsFlagged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Update the SEEN flag (if supported remotely - e.g. not for POP3)
|
// Update the SEEN & FLAGGED (star) flags (if supported remotely - e.g. not for POP3)
|
||||||
if (remoteSupportsSeenFlag) {
|
if (remoteSupportsSeen || remoteSupportsFlagged) {
|
||||||
for (Message remoteMessage : remoteMessages) {
|
for (Message remoteMessage : remoteMessages) {
|
||||||
LocalMessageInfo localMessageInfo = localMessageMap.get(remoteMessage.getUid());
|
LocalMessageInfo localMessageInfo = localMessageMap.get(remoteMessage.getUid());
|
||||||
if (localMessageInfo == null) {
|
if (localMessageInfo == null) {
|
||||||
@ -759,11 +764,16 @@ public class MessagingController implements Runnable {
|
|||||||
}
|
}
|
||||||
boolean localSeen = localMessageInfo.mFlagRead;
|
boolean localSeen = localMessageInfo.mFlagRead;
|
||||||
boolean remoteSeen = remoteMessage.isSet(Flag.SEEN);
|
boolean remoteSeen = remoteMessage.isSet(Flag.SEEN);
|
||||||
if (remoteSeen != localSeen) {
|
boolean newSeen = (remoteSupportsSeen && (remoteSeen != localSeen));
|
||||||
|
boolean localFlagged = localMessageInfo.mFlagFavorite;
|
||||||
|
boolean remoteFlagged = remoteMessage.isSet(Flag.FLAGGED);
|
||||||
|
boolean newFlagged = (remoteSupportsFlagged && (localFlagged != remoteFlagged));
|
||||||
|
if (newSeen || newFlagged) {
|
||||||
Uri uri = ContentUris.withAppendedId(
|
Uri uri = ContentUris.withAppendedId(
|
||||||
EmailContent.Message.CONTENT_URI, localMessageInfo.mId);
|
EmailContent.Message.CONTENT_URI, localMessageInfo.mId);
|
||||||
ContentValues updateValues = new ContentValues();
|
ContentValues updateValues = new ContentValues();
|
||||||
updateValues.put(EmailContent.Message.FLAG_READ, remoteSeen ? 1 : 0);
|
updateValues.put(EmailContent.Message.FLAG_READ, remoteSeen);
|
||||||
|
updateValues.put(EmailContent.Message.FLAG_FAVORITE, remoteFlagged);
|
||||||
mContext.getContentResolver().update(uri, updateValues, null, null);
|
mContext.getContentResolver().update(uri, updateValues, null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,8 @@ public class ImapStore extends Store {
|
|||||||
public static final int CONNECTION_SECURITY_SSL_REQUIRED = 3;
|
public static final int CONNECTION_SECURITY_SSL_REQUIRED = 3;
|
||||||
public static final int CONNECTION_SECURITY_SSL_OPTIONAL = 4;
|
public static final int CONNECTION_SECURITY_SSL_OPTIONAL = 4;
|
||||||
|
|
||||||
private static final Flag[] PERMANENT_FLAGS = { Flag.DELETED, Flag.SEEN };
|
// TODO: Flag.FLAGGED is only partially permanent - we can read, but we can't write back
|
||||||
|
private static final Flag[] PERMANENT_FLAGS = { Flag.DELETED, Flag.SEEN, Flag.FLAGGED };
|
||||||
|
|
||||||
private Transport mRootTransport;
|
private Transport mRootTransport;
|
||||||
private String mUsername;
|
private String mUsername;
|
||||||
|
Loading…
Reference in New Issue
Block a user