From 00fbbb24b3777160d5ba0157ff171aa2335632d7 Mon Sep 17 00:00:00 2001 From: Martin Hibdon Date: Tue, 7 Oct 2014 19:18:01 -0700 Subject: [PATCH] Set the search mailbox's syncState as soon as a search is requested b/15868294 b/17377040 When we do a search, we clear the current contents of the search mailbox, and then send a request to whatever service is appropriate (IMAP or Exchange.) The service then begins a sync and updates the sync state. The thing is, this leaves a time window when the sync state is still NONE, but no contents have been loaded yet. So now, as soon as the search request is made, we set the sync state to LIVE, then send off the request. That should keep the empty state view hidden until we actually do the sync. Change-Id: Ia97e1cf2773db460fdf32aaa45205c4e6034527d --- .../android/email/provider/EmailProvider.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/provider_src/com/android/email/provider/EmailProvider.java b/provider_src/com/android/email/provider/EmailProvider.java index 58565dd9a..af350bdf4 100644 --- a/provider_src/com/android/email/provider/EmailProvider.java +++ b/provider_src/com/android/email/provider/EmailProvider.java @@ -5882,16 +5882,26 @@ public class EmailProvider extends ContentProvider // TODO: This conditional is unnecessary, just two lines earlier we created // mSearchParams using a constructor that never sets mOffset. LogUtils.d(TAG, "deleting existing search results."); - - // Delete existing contents of search mailbox - ContentResolver resolver = context.getContentResolver(); - resolver.delete(Message.CONTENT_URI, MessageColumns.MAILBOX_KEY + "=" + searchMailboxId, - null); - final ContentValues cv = new ContentValues(1); + final ContentResolver resolver = context.getContentResolver(); + final ContentValues cv = new ContentValues(3); // For now, use the actual query as the name of the mailbox cv.put(Mailbox.DISPLAY_NAME, mSearchParams.mFilter); + // We are about to do a sync on this folder, but if the UI is refreshed before the + // service can start its query, we need it to see that there is a sync in progress. + // Otherwise it could show the empty state, until the service gets around to setting + // the syncState. + cv.put(Mailbox.SYNC_STATUS, EmailContent.SYNC_STATUS_LIVE); + // We don't know how many result we'll have yet, but we assume zero until we get + // a response back from the server. Otherwise, we'll whatever count there was on the + // previous search, and we'll display the "Load More" footer prior to having + // any results. + cv.put(Mailbox.TOTAL_COUNT, 0); resolver.update(ContentUris.withAppendedId(Mailbox.CONTENT_URI, searchMailboxId), cv, null, null); + + // Delete existing contents of search mailbox + resolver.delete(Message.CONTENT_URI, MessageColumns.MAILBOX_KEY + "=" + searchMailboxId, + null); } // Start the search running in the background