diff --git a/emailcommon/src/com/android/emailcommon/provider/EmailContent.java b/emailcommon/src/com/android/emailcommon/provider/EmailContent.java index 09cb3493a..b16a67a0a 100644 --- a/emailcommon/src/com/android/emailcommon/provider/EmailContent.java +++ b/emailcommon/src/com/android/emailcommon/provider/EmailContent.java @@ -2291,8 +2291,10 @@ public abstract class EmailContent { public static final String SYNC_STATUS = "syncStatus"; // Number of messages in the mailbox. public static final String MESSAGE_COUNT = "messageCount"; - // Number of messages in the mailbox. + // Message ID of the last 'seen' message public static final String LAST_SEEN_MESSAGE_KEY = "lastSeenMessageKey"; + // The last time a message in this mailbox has been read (in millis) + public static final String LAST_TOUCHED_TIME = "lastTouchedTime"; } public interface HostAuthColumns { diff --git a/emailcommon/src/com/android/emailcommon/provider/Mailbox.java b/emailcommon/src/com/android/emailcommon/provider/Mailbox.java index 3e007014a..98d3f4dfe 100644 --- a/emailcommon/src/com/android/emailcommon/provider/Mailbox.java +++ b/emailcommon/src/com/android/emailcommon/provider/Mailbox.java @@ -54,6 +54,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns public int mVisibleLimit; public String mSyncStatus; public long mLastSeenMessageKey; + public long mLastTouchedTime; public static final int CONTENT_ID_COLUMN = 0; public static final int CONTENT_DISPLAY_NAME_COLUMN = 1; @@ -72,6 +73,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns public static final int CONTENT_SYNC_STATUS_COLUMN = 14; public static final int CONTENT_PARENT_KEY_COLUMN = 15; public static final int CONTENT_LAST_SEEN_MESSAGE_KEY_COLUMN = 16; + public static final int CONTENT_LAST_TOUCHED_TIME_COLUMN = 17; /** * NOTE: If fields are added or removed, the method {@link #getHashes()} @@ -84,7 +86,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns MailboxColumns.SYNC_INTERVAL, MailboxColumns.SYNC_TIME, MailboxColumns.FLAG_VISIBLE, MailboxColumns.FLAGS, MailboxColumns.VISIBLE_LIMIT, MailboxColumns.SYNC_STATUS, MailboxColumns.PARENT_KEY, - MailboxColumns.LAST_SEEN_MESSAGE_KEY, + MailboxColumns.LAST_SEEN_MESSAGE_KEY, MailboxColumns.LAST_TOUCHED_TIME, }; private static final String ACCOUNT_AND_MAILBOX_TYPE_SELECTION = @@ -270,6 +272,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns mVisibleLimit = cursor.getInt(CONTENT_VISIBLE_LIMIT_COLUMN); mSyncStatus = cursor.getString(CONTENT_SYNC_STATUS_COLUMN); mLastSeenMessageKey = cursor.getLong(CONTENT_LAST_SEEN_MESSAGE_KEY_COLUMN); + mLastTouchedTime = cursor.getLong(CONTENT_LAST_TOUCHED_TIME_COLUMN); } @Override @@ -291,6 +294,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns values.put(MailboxColumns.VISIBLE_LIMIT, mVisibleLimit); values.put(MailboxColumns.SYNC_STATUS, mSyncStatus); values.put(MailboxColumns.LAST_SEEN_MESSAGE_KEY, mLastSeenMessageKey); + values.put(MailboxColumns.LAST_TOUCHED_TIME, mLastTouchedTime); return values; } @@ -436,37 +440,39 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns hash[CONTENT_ID_COLUMN] = mId; hash[CONTENT_DISPLAY_NAME_COLUMN] - = mDisplayName; + = mDisplayName; hash[CONTENT_SERVER_ID_COLUMN] - = mServerId; + = mServerId; hash[CONTENT_PARENT_SERVER_ID_COLUMN] - = mParentServerId; + = mParentServerId; hash[CONTENT_ACCOUNT_KEY_COLUMN] - = mAccountKey; + = mAccountKey; hash[CONTENT_TYPE_COLUMN] - = mType; + = mType; hash[CONTENT_DELIMITER_COLUMN] - = mDelimiter; + = mDelimiter; hash[CONTENT_SYNC_KEY_COLUMN] - = mSyncKey; + = mSyncKey; hash[CONTENT_SYNC_LOOKBACK_COLUMN] - = mSyncLookback; + = mSyncLookback; hash[CONTENT_SYNC_INTERVAL_COLUMN] - = mSyncInterval; + = mSyncInterval; hash[CONTENT_SYNC_TIME_COLUMN] - = mSyncTime; + = mSyncTime; hash[CONTENT_FLAG_VISIBLE_COLUMN] - = mFlagVisible; + = mFlagVisible; hash[CONTENT_FLAGS_COLUMN] - = mFlags; + = mFlags; hash[CONTENT_VISIBLE_LIMIT_COLUMN] - = mVisibleLimit; + = mVisibleLimit; hash[CONTENT_SYNC_STATUS_COLUMN] - = mSyncStatus; + = mSyncStatus; hash[CONTENT_PARENT_KEY_COLUMN] - = mParentKey; + = mParentKey; hash[CONTENT_LAST_SEEN_MESSAGE_KEY_COLUMN] - = mLastSeenMessageKey; + = mLastSeenMessageKey; + hash[CONTENT_LAST_TOUCHED_TIME_COLUMN] + = mLastTouchedTime; return hash; } @@ -497,6 +503,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns dest.writeInt(mVisibleLimit); dest.writeString(mSyncStatus); dest.writeLong(mLastSeenMessageKey); + dest.writeLong(mLastTouchedTime); } public Mailbox(Parcel in) { @@ -518,6 +525,7 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns mVisibleLimit = in.readInt(); mSyncStatus = in.readString(); mLastSeenMessageKey = in.readLong(); + mLastTouchedTime = in.readLong(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java index 5cce40dce..1948ceb23 100644 --- a/src/com/android/email/provider/EmailProvider.java +++ b/src/com/android/email/provider/EmailProvider.java @@ -140,8 +140,9 @@ public class EmailProvider extends ContentProvider { // Version 20: Add new policies to Policy table // Version 21: Add lastSeenMessageKey column to Mailbox table // Version 22: Upgrade path for IMAP/POP accounts to integrate with AccountManager + // Version 23: Add column to mailbox table for time of last access - public static final int DATABASE_VERSION = 22; + public static final int DATABASE_VERSION = 23; // Any changes to the database format *must* include update-in-place code. // Original version: 2 @@ -1078,6 +1079,10 @@ public class EmailProvider extends ContentProvider { upgradeFromVersion21ToVersion22(db, mContext); oldVersion = 22; } + if (oldVersion == 22) { + upgradeFromVersion22ToVersion23(db); + oldVersion = 23; + } } @Override @@ -2070,4 +2075,15 @@ public class EmailProvider extends ContentProvider { Log.w(TAG, "Exception upgrading EmailProvider.db from 20 to 21 " + e); } } + + /** Upgrades the database from v22 to v23 */ + private static void upgradeFromVersion22ToVersion23(SQLiteDatabase db) { + try { + db.execSQL("alter table " + Mailbox.TABLE_NAME + + " add column " + Mailbox.LAST_TOUCHED_TIME + " integer default 0;"); + } catch (SQLException e) { + // Shouldn't be needed unless we're debugging and interrupt the process + Log.w(TAG, "Exception upgrading EmailProvider.db from 22 to 23 " + e); + } + } }