Fix NPE in Controller and MessagingController.

Bug 2553401
Bug 2186777
Bug 2721133
Bug 2684365
Bug 2530534

Change-Id: I5185d9196deab5ba3a9866e2de2a9be04a04ca03
This commit is contained in:
Makoto Onuki 2010-06-11 11:37:10 -07:00
parent 8cd8694b63
commit 7e1de3c484
2 changed files with 36 additions and 0 deletions

View File

@ -409,6 +409,9 @@ public class Controller {
// for IMAP & POP only, (attempt to) send the message now
final EmailContent.Account account =
EmailContent.Account.restoreAccountWithId(mProviderContext, accountId);
if (account == null) {
return;
}
final long sentboxId = findOrCreateMailboxOfType(accountId, Mailbox.TYPE_SENT);
Utility.runAsync(new Runnable() {
public void run() {
@ -447,6 +450,9 @@ public class Controller {
// MessagingController implementation
final EmailContent.Account account =
EmailContent.Account.restoreAccountWithId(mProviderContext, accountId);
if (account == null) {
return;
}
final long sentboxId = findOrCreateMailboxOfType(accountId, Mailbox.TYPE_SENT);
Utility.runAsync(new Runnable() {
public void run() {
@ -619,6 +625,9 @@ public class Controller {
// 6. Service runs automatically, MessagingController needs a kick
Account account = Account.restoreAccountWithId(mProviderContext, accountId);
if (account == null) {
return; // isMessagingController returns false for null, but let's make it clear.
}
if (isMessagingController(account)) {
final long syncAccountId = accountId;
Utility.runAsync(new Runnable() {
@ -646,7 +655,13 @@ public class Controller {
// Service runs automatically, MessagingController needs a kick
final Message message = Message.restoreMessageWithId(mProviderContext, messageId);
if (message == null) {
return;
}
Account account = Account.restoreAccountWithId(mProviderContext, message.mAccountKey);
if (account == null) {
return; // isMessagingController returns false for null, but let's make it clear.
}
if (isMessagingController(account)) {
Utility.runAsync(new Runnable() {
public void run() {
@ -673,7 +688,13 @@ public class Controller {
// Service runs automatically, MessagingController needs a kick
final Message message = Message.restoreMessageWithId(mProviderContext, messageId);
if (message == null) {
return;
}
Account account = Account.restoreAccountWithId(mProviderContext, message.mAccountKey);
if (account == null) {
return; // isMessagingController returns false for null, but let's make it clear.
}
if (isMessagingController(account)) {
Utility.runAsync(new Runnable() {
public void run() {
@ -765,6 +786,9 @@ public class Controller {
private IEmailService getServiceForMessage(long messageId) {
// TODO make this more efficient, caching the account, smaller lookup here, etc.
Message message = Message.restoreMessageWithId(mProviderContext, messageId);
if (message == null) {
return null;
}
return getServiceForAccount(message.mAccountKey);
}

View File

@ -1087,6 +1087,9 @@ public class MessagingController implements Runnable {
lastMessageId = oldMessage.mId;
if (mailbox == null || mailbox.mId != oldMessage.mMailboxKey) {
mailbox = Mailbox.restoreMailboxWithId(mContext, oldMessage.mMailboxKey);
if (mailbox == null) {
continue; // Mailbox removed. Move to the next message.
}
}
deleteFromTrash = mailbox.mType == Mailbox.TYPE_TRASH;
}
@ -1170,6 +1173,9 @@ public class MessagingController implements Runnable {
// Load the mailbox if it will be needed
if (mailbox == null) {
mailbox = Mailbox.restoreMailboxWithId(mContext, mailboxId);
if (mailbox == null) {
continue; // Mailbox removed. Move to the next message.
}
}
// upsync the message
long id = upsyncs1.getLong(EmailContent.Message.ID_PROJECTION_COLUMN);
@ -1197,6 +1203,9 @@ public class MessagingController implements Runnable {
// Load the mailbox if it will be needed
if (mailbox == null) {
mailbox = Mailbox.restoreMailboxWithId(mContext, mailboxId);
if (mailbox == null) {
continue; // Mailbox removed. Move to the next message.
}
}
// upsync the message
long id = upsyncs2.getLong(EmailContent.Message.ID_PROJECTION_COLUMN);
@ -1257,6 +1266,9 @@ public class MessagingController implements Runnable {
if (newMessage != null) {
if (mailbox == null || mailbox.mId != newMessage.mMailboxKey) {
mailbox = Mailbox.restoreMailboxWithId(mContext, newMessage.mMailboxKey);
if (mailbox == null) {
continue; // Mailbox removed. Move to the next message.
}
}
changeMoveToTrash = (oldMessage.mMailboxKey != newMessage.mMailboxKey)
&& (mailbox.mType == Mailbox.TYPE_TRASH);