When folder is changed, also update conversation list.

Also add the folder's total count to the extras for the
conversation list cursor.

BUG: 7480726
Change-Id: I3215fed561deb8430fd6d6c680bdb44ca87cc162
This commit is contained in:
Yu Ping Hu 2013-03-06 14:34:18 -08:00
parent 4da3641292
commit fc0dae9cd7

View File

@ -769,8 +769,7 @@ public class EmailProvider extends ContentProvider {
notifyUI(UIPROVIDER_ACCOUNT_NOTIFIER, id); notifyUI(UIPROVIDER_ACCOUNT_NOTIFIER, id);
resolver.notifyChange(UIPROVIDER_ALL_ACCOUNTS_NOTIFIER, null); resolver.notifyChange(UIPROVIDER_ALL_ACCOUNTS_NOTIFIER, null);
} else if (match == MAILBOX_ID) { } else if (match == MAILBOX_ID) {
notifyUI(UIPROVIDER_FOLDER_NOTIFIER, id); notifyUIFolder(id, null);
notifyUI(UIPROVIDER_FOLDERLIST_NOTIFIER, id);
} else if (match == ATTACHMENT_ID) { } else if (match == ATTACHMENT_ID) {
notifyUI(UIPROVIDER_ATTACHMENT_NOTIFIER, id); notifyUI(UIPROVIDER_ATTACHMENT_NOTIFIER, id);
} }
@ -1850,8 +1849,8 @@ outer:
} }
} }
} else if (match == MAILBOX_ID && values.containsKey(Mailbox.UI_SYNC_STATUS)) { } else if (match == MAILBOX_ID && values.containsKey(Mailbox.UI_SYNC_STATUS)) {
notifyUI(UIPROVIDER_FOLDER_NOTIFIER, id); // TODO: should this notify on keys other than sync status?
notifyUI(UIPROVIDER_FOLDERLIST_NOTIFIER, id); notifyUIFolder(id, null);
} else if (match == ACCOUNT_ID) { } else if (match == ACCOUNT_ID) {
// Notify individual account and "all accounts" // Notify individual account and "all accounts"
notifyUI(UIPROVIDER_ACCOUNT_NOTIFIER, id); notifyUI(UIPROVIDER_ACCOUNT_NOTIFIER, id);
@ -3323,6 +3322,7 @@ outer:
mExtras.putInt(UIProvider.CursorExtraKeys.EXTRA_ERROR, mExtras.putInt(UIProvider.CursorExtraKeys.EXTRA_ERROR,
mailbox.mUiLastSyncResult); mailbox.mUiLastSyncResult);
} }
mExtras.putInt(UIProvider.CursorExtraKeys.EXTRA_TOTAL_COUNT, mailbox.mTotalCount);
} }
} }
@ -4274,8 +4274,7 @@ outer:
if (mailbox.mType == Mailbox.TYPE_TRASH || mailbox.mType == Mailbox.TYPE_DRAFTS) { if (mailbox.mType == Mailbox.TYPE_TRASH || mailbox.mType == Mailbox.TYPE_DRAFTS) {
// We actually delete these, including attachments // We actually delete these, including attachments
AttachmentUtilities.deleteAllAttachmentFiles(context, msg.mAccountKey, msg.mId); AttachmentUtilities.deleteAllAttachmentFiles(context, msg.mAccountKey, msg.mId);
notifyUI(UIPROVIDER_FOLDER_NOTIFIER, mailbox.mId); notifyUIFolder(mailbox.mId, mailbox.mAccountKey);
notifyUI(UIPROVIDER_FOLDERLIST_NOTIFIER, mailbox.mAccountKey);
return context.getContentResolver().delete( return context.getContentResolver().delete(
ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, msg.mId), null, null); ContentUris.withAppendedId(Message.SYNCED_CONTENT_URI, msg.mId), null, null);
} }
@ -4286,8 +4285,7 @@ outer:
} }
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(MessageColumns.MAILBOX_KEY, trashMailbox.mId); values.put(MessageColumns.MAILBOX_KEY, trashMailbox.mId);
notifyUI(UIPROVIDER_FOLDER_NOTIFIER, mailbox.mId); notifyUIFolder(mailbox.mId, mailbox.mAccountKey);
notifyUI(UIPROVIDER_FOLDERLIST_NOTIFIER, mailbox.mId);
return uiUpdateMessage(uri, values, true); return uiUpdateMessage(uri, values, true);
} }
@ -4391,6 +4389,36 @@ outer:
notifyUI(UIPROVIDER_ALL_ACCOUNTS_NOTIFIER, null); notifyUI(UIPROVIDER_ALL_ACCOUNTS_NOTIFIER, null);
} }
/**
* Notify about a folder update. Because folder changes can affect the conversation cursor's
* extras, the conversation must also be notified here.
* @param folderId the folder id to be notified
* @param accountId the account id to be notified (for folder list notification); if null, then
* lookup the accountId from the folder.
*/
private void notifyUIFolder(String folderId, String accountId) {
notifyUI(UIPROVIDER_CONVERSATION_NOTIFIER, folderId);
notifyUI(UIPROVIDER_FOLDER_NOTIFIER, folderId);
if (accountId == null) {
try {
final Mailbox mailbox = Mailbox.restoreMailboxWithId(getContext(),
Long.parseLong(folderId));
if (mailbox != null) {
accountId = Long.toString(mailbox.mAccountKey);
}
} catch (NumberFormatException e) {
// Bad folderId, so we can't lookup account.
}
}
if (accountId != null) {
notifyUI(UIPROVIDER_FOLDERLIST_NOTIFIER, accountId);
}
}
private void notifyUIFolder(long folderId, long accountId) {
notifyUIFolder(Long.toString(folderId), Long.toString(accountId));
}
private void notifyUI(Uri uri, String id) { private void notifyUI(Uri uri, String id) {
final Uri notifyUri = (id != null) ? uri.buildUpon().appendPath(id).build() : uri; final Uri notifyUri = (id != null) ? uri.buildUpon().appendPath(id).build() : uri;
getContext().getContentResolver().notifyChange(notifyUri, null); getContext().getContentResolver().notifyChange(notifyUri, null);
@ -4526,8 +4554,7 @@ outer:
mSearchParams.mTotalCount = service.searchMessages(accountId, mSearchParams.mTotalCount = service.searchMessages(accountId,
mSearchParams, searchMailboxId); mSearchParams, searchMailboxId);
//Log.d(TAG, "TotalCount to UI: " + mSearchParams.mTotalCount); //Log.d(TAG, "TotalCount to UI: " + mSearchParams.mTotalCount);
notifyUI(UIPROVIDER_FOLDER_NOTIFIER, searchMailboxId); notifyUIFolder(searchMailboxId, accountId);
notifyUI(UIPROVIDER_FOLDERLIST_NOTIFIER, accountId);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e("searchMessages", "RemoteException", e); Log.e("searchMessages", "RemoteException", e);
} }