From e0bb7e79092a1066f4cf42ec364a81ebb31ac808 Mon Sep 17 00:00:00 2001 From: Ben Komalo Date: Fri, 13 May 2011 18:35:08 -0700 Subject: [PATCH] Make Mailbox parcelable Also fix unit tests Change-Id: I5f64f53b278b7bc27053d831760b155532a14e33 --- .../android/emailcommon/provider/Mailbox.java | 66 ++++++++++++++++++- .../emailcommon/provider/MailboxTests.java | 64 +++++++++++++++--- 2 files changed, 121 insertions(+), 9 deletions(-) diff --git a/emailcommon/src/com/android/emailcommon/provider/Mailbox.java b/emailcommon/src/com/android/emailcommon/provider/Mailbox.java index 32a9148ee..e9f910bab 100644 --- a/emailcommon/src/com/android/emailcommon/provider/Mailbox.java +++ b/emailcommon/src/com/android/emailcommon/provider/Mailbox.java @@ -27,11 +27,13 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; import android.util.Log; import java.security.InvalidParameterException; -public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns { +public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns, Parcelable { public static final String TABLE_NAME = "Mailbox"; @SuppressWarnings("hiding") public static final Uri CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/mailbox"); @@ -470,4 +472,66 @@ public class Mailbox extends EmailContent implements SyncColumns, MailboxColumns = mLastSeenMessageKey; return hash; } + + // Parcelable + @Override + public int describeContents() { + return 0; + } + + // Parcelable + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mBaseUri, flags); + dest.writeLong(mId); + dest.writeString(mDisplayName); + dest.writeString(mServerId); + dest.writeString(mParentServerId); + dest.writeLong(mParentKey); + dest.writeLong(mAccountKey); + dest.writeInt(mType); + dest.writeInt(mDelimiter); + dest.writeString(mSyncKey); + dest.writeInt(mSyncLookback); + dest.writeInt(mSyncInterval); + dest.writeLong(mSyncTime); + dest.writeInt(mFlagVisible ? 1 : 0); + dest.writeInt(mFlags); + dest.writeInt(mVisibleLimit); + dest.writeString(mSyncStatus); + dest.writeLong(mLastSeenMessageKey); + } + + public Mailbox(Parcel in) { + mBaseUri = in.readParcelable(null); + mId = in.readLong(); + mDisplayName = in.readString(); + mServerId = in.readString(); + mParentServerId = in.readString(); + mParentKey = in.readLong(); + mAccountKey = in.readLong(); + mType = in.readInt(); + mDelimiter = in.readInt(); + mSyncKey = in.readString(); + mSyncLookback = in.readInt(); + mSyncInterval = in.readInt(); + mSyncTime = in.readLong(); + mFlagVisible = in.readInt() == 1; + mFlags = in.readInt(); + mVisibleLimit = in.readInt(); + mSyncStatus = in.readString(); + mLastSeenMessageKey = in.readLong(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Mailbox createFromParcel(Parcel source) { + return new Mailbox(source); + } + + @Override + public Mailbox[] newArray(int size) { + return new Mailbox[size]; + } + }; } \ No newline at end of file diff --git a/tests/src/com/android/emailcommon/provider/MailboxTests.java b/tests/src/com/android/emailcommon/provider/MailboxTests.java index 65feb9022..535c5663c 100644 --- a/tests/src/com/android/emailcommon/provider/MailboxTests.java +++ b/tests/src/com/android/emailcommon/provider/MailboxTests.java @@ -29,10 +29,13 @@ import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.net.Uri; +import android.os.Parcel; import android.test.MoreAsserts; import android.test.ProviderTestCase2; import android.test.suitebuilder.annotation.SmallTest; +import java.util.Arrays; + /** * Unit tests for the Mailbox inner class. * These tests must be locally complete - no server(s) required. @@ -495,14 +498,17 @@ public class MailboxTests extends ProviderTestCase2 { assertEquals(start + 1, Mailbox.restoreMailboxWithId(c, b1.mId).mSyncInterval); } - public void testGetHashes() { - final Context c = mMockContext; - Mailbox testMailbox; + private Mailbox buildTestMailbox(String serverId) { + return buildTestMailbox(serverId, null); + } - testMailbox = new Mailbox(); - testMailbox.mDisplayName = TEST_DISPLAY_NAME; + private Mailbox buildTestMailbox(String serverId, String name) { + name = (name == null) ? TEST_DISPLAY_NAME : name; + + Mailbox testMailbox = new Mailbox(); + testMailbox.mServerId = serverId; + testMailbox.mDisplayName = name; testMailbox.mParentServerId = TEST_PARENT_SERVER_ID; - testMailbox.mServerId = TEST_SERVER_ID; testMailbox.mSyncKey = TEST_SYNC_KEY; testMailbox.mSyncStatus = TEST_SYNC_STATUS; testMailbox.mAccountKey = 1L; @@ -515,6 +521,14 @@ public class MailboxTests extends ProviderTestCase2 { testMailbox.mSyncTime = 6L; testMailbox.mType = 7; testMailbox.mVisibleLimit = 8; + testMailbox.mLastSeenMessageKey = 9L; + + return testMailbox; + } + + public void testGetHashes() { + final Context c = mMockContext; + Mailbox testMailbox = buildTestMailbox(TEST_SERVER_ID); testMailbox.save(c); Object[] testHash; @@ -523,7 +537,7 @@ public class MailboxTests extends ProviderTestCase2 { TEST_PARENT_SERVER_ID, 1L /*mAccountKey*/, 7 /*mType */, (int)'/' /*mDelimiter */, TEST_SYNC_KEY, 5 /*mSyncLookback*/, 4 /*mSyncInterval*/, 6L /*mSyncTime*/, true /*mFlagVisible*/, 2 /*mFlags*/, - 8 /*mVisibleLimit*/, TEST_SYNC_STATUS, 3L /*mParentKey*/ + 8 /*mVisibleLimit*/, TEST_SYNC_STATUS, 3L /*mParentKey*/, 9L /*mLastSeen*/ }; MoreAsserts.assertEquals(testHash, testMailbox.getHashes()); @@ -540,9 +554,43 @@ public class MailboxTests extends ProviderTestCase2 { null /*mParentServerId*/, 1L /*mAccountKey*/, 7 /*mType */, (int)'/' /*mDelimiter */, null /*mSyncKey*/, 5 /*mSyncLookback*/, 4 /*mSyncInterval*/, 6L /*mSyncTime*/, false /*mFlagVisible*/, 2 /*mFlags*/, - 8 /*mVisibleLimit*/, null /*mSyncStatus*/, 3L /*mParentKey*/ + 8 /*mVisibleLimit*/, null /*mSyncStatus*/, 3L /*mParentKey*/, 9L /*mLastSeen*/ }; MoreAsserts.assertEquals(testHash, testMailbox.getHashes()); } + + public void testParcelling() { + Mailbox original = buildTestMailbox("serverId", "display name for mailbox"); + + Parcel p = Parcel.obtain(); + original.writeToParcel(p, 0 /* flags */); + + // Reset. + p.setDataPosition(0); + + Mailbox unparcelled = Mailbox.CREATOR.createFromParcel(p); + MoreAsserts.assertEquals(original.getHashes(), unparcelled.getHashes()); + + Mailbox phony = buildTestMailbox("different ID", "display name for mailbox"); + assertFalse(Arrays.equals(phony.getHashes(), unparcelled.getHashes())); + + p.recycle(); + } + + public void testParcellingWithPartialMailbox() { + Mailbox unpopulated = new Mailbox(); + unpopulated.mDisplayName = "the only thing filled in for some reason"; + + Parcel p = Parcel.obtain(); + unpopulated.writeToParcel(p, 0 /* flags */); + + // Reset. + p.setDataPosition(0); + + Mailbox unparcelled = Mailbox.CREATOR.createFromParcel(p); + MoreAsserts.assertEquals(unpopulated.getHashes(), unparcelled.getHashes()); + + p.recycle(); + } }