Merge "Handle empty sync responses in EAS 12.1"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e982ec6..c19863d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -191,6 +191,12 @@
<activity
android:name=".activity.MessageView"
android:theme="@android:style/Theme.NoTitleBar" >
+ <intent-filter android:label="@string/app_name">
+ <action android:name="android.intent.action.VIEW" />
+ <data android:mimeType="application/eml" />
+ <data android:mimeType="message/rfc822" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
</activity>
<activity
android:name=".activity.MessageCompose"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e209501..c7167c3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -308,6 +308,8 @@
<string name="message_saved_toast">Message saved as draft.</string>
<!-- String that is displayed when the attachment could not be displayed. -->
<string name="message_view_display_attachment_toast">This attachment cannot be displayed.</string>
+ <!-- String that is displayed when a long message is being parsed. -->
+ <string name="message_view_parse_message_toast">Opening message\u2026</string>
<!-- Title of screen when setting up new email account -->
<string name="account_setup_basics_title">Set up email</string>
diff --git a/src/com/android/exchange/SyncManager.java b/src/com/android/exchange/SyncManager.java
index 651cf63..8c15fbf 100644
--- a/src/com/android/exchange/SyncManager.java
+++ b/src/com/android/exchange/SyncManager.java
@@ -1737,7 +1737,6 @@
public void onCreate() {
synchronized (sSyncLock) {
alwaysLog("!!! EAS SyncManager, onCreate");
- // If we're in the process of shutting down, try again in 5 seconds
if (sStop) {
return;
}
@@ -2187,15 +2186,24 @@
serviceRequest(mailboxId, 5*SECONDS, reason);
}
+ /**
+ * Return a boolean indicating whether the mailbox can be synced
+ * @param m the mailbox
+ * @return whether or not the mailbox can be synced
+ */
+ static /*package*/ boolean isSyncable(Mailbox m) {
+ if (m == null || m.mType == Mailbox.TYPE_DRAFTS || m.mType == Mailbox.TYPE_OUTBOX ||
+ m.mType >= Mailbox.TYPE_NOT_SYNCABLE) {
+ return false;
+ }
+ return true;
+ }
+
static public void serviceRequest(long mailboxId, long ms, int reason) {
SyncManager syncManager = INSTANCE;
if (syncManager == null) return;
Mailbox m = Mailbox.restoreMailboxWithId(syncManager, mailboxId);
- // Never allow manual start of Drafts or Outbox via serviceRequest
- if (m == null || m.mType == Mailbox.TYPE_DRAFTS || m.mType == Mailbox.TYPE_OUTBOX) {
- log("Ignoring serviceRequest for drafts/outbox/null mailbox");
- return;
- }
+ if (!isSyncable(m)) return;
try {
AbstractSyncService service = syncManager.mServiceMap.get(mailboxId);
if (service != null) {
diff --git a/tests/src/com/android/exchange/SyncManagerAccountTests.java b/tests/src/com/android/exchange/SyncManagerAccountTests.java
index 3b67dc1..6a325b5 100644
--- a/tests/src/com/android/exchange/SyncManagerAccountTests.java
+++ b/tests/src/com/android/exchange/SyncManagerAccountTests.java
@@ -211,4 +211,24 @@
assertEquals(0, errorMap.keySet().size());
}
+ public void testIsSyncable() {
+ Context context = mMockContext;
+ Account acct1 = ProviderTestUtils.setupAccount("acct1", true, context);
+ Mailbox box1 = ProviderTestUtils.setupMailbox("box1", acct1.mId, true, context,
+ Mailbox.TYPE_DRAFTS);
+ Mailbox box2 = ProviderTestUtils.setupMailbox("box2", acct1.mId, true, context,
+ Mailbox.TYPE_OUTBOX);
+ Mailbox box3 = ProviderTestUtils.setupMailbox("box2", acct1.mId, true, context,
+ Mailbox.TYPE_ATTACHMENT);
+ Mailbox box4 = ProviderTestUtils.setupMailbox("box2", acct1.mId, true, context,
+ Mailbox.TYPE_NOT_SYNCABLE + 64);
+ Mailbox box5 = ProviderTestUtils.setupMailbox("box2", acct1.mId, true, context,
+ Mailbox.TYPE_MAIL);
+ assertFalse(SyncManager.isSyncable(null));
+ assertFalse(SyncManager.isSyncable(box1));
+ assertFalse(SyncManager.isSyncable(box2));
+ assertFalse(SyncManager.isSyncable(box3));
+ assertFalse(SyncManager.isSyncable(box4));
+ assertTrue(SyncManager.isSyncable(box5));
+ }
}