Wire through results count in search header.
Change-Id: I817236d9c3294acb25b62724cc8c99d47df7f354
This commit is contained in:
parent
06421df25d
commit
6b256f1fa1
|
@ -60,6 +60,7 @@ import com.android.email.MessageListContext;
|
|||
import com.android.email.NotificationController;
|
||||
import com.android.email.R;
|
||||
import com.android.email.RefreshManager;
|
||||
import com.android.email.activity.MessagesAdapter.SearchResultsCursor;
|
||||
import com.android.email.provider.EmailProvider;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
|
@ -1020,20 +1021,21 @@ public class MessageListFragment extends ListFragment
|
|||
updateSelectionMode();
|
||||
}
|
||||
|
||||
private void updateSearchHeader(Cursor searchResultsCursor) {
|
||||
private void updateSearchHeader(Cursor cursor) {
|
||||
MessageListContext listContext = getListContext();
|
||||
if (!listContext.isSearch() || searchResultsCursor == null) {
|
||||
if (!listContext.isSearch() || cursor == null) {
|
||||
mSearchHeader.setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
|
||||
SearchResultsCursor searchCursor = (SearchResultsCursor) cursor;
|
||||
mSearchHeader.setVisibility(View.VISIBLE);
|
||||
String header = String.format(
|
||||
mActivity.getString(R.string.search_header_text_fmt),
|
||||
listContext.getSearchParams().mFilter);
|
||||
mSearchHeaderText.setText(header);
|
||||
// TODO: populate the count with the info from the cursor.
|
||||
mSearchHeaderCount.setText(null);
|
||||
mSearchHeaderCount.setText(UiUtilities.getMessageCountForUi(
|
||||
mActivity, searchCursor.getResultsCount(), false /* replaceZeroWithBlank */));
|
||||
}
|
||||
|
||||
private void determineFooterMode() {
|
||||
|
@ -1175,7 +1177,7 @@ public class MessageListFragment extends ListFragment
|
|||
Log.d(Logging.LOG_TAG, MessageListFragment.this
|
||||
+ " onLoadFinished(messages) mailboxId=" + getMailboxId());
|
||||
}
|
||||
MessagesAdapter.CursorWithExtras cursor = (MessagesAdapter.CursorWithExtras) c;
|
||||
MessagesAdapter.MessagesCursor cursor = (MessagesAdapter.MessagesCursor) c;
|
||||
|
||||
if (!cursor.mIsFound) {
|
||||
mCallback.onMailboxNotFound();
|
||||
|
|
|
@ -102,7 +102,7 @@ import java.util.Set;
|
|||
/**
|
||||
* The actual return type from the loader.
|
||||
*/
|
||||
public static class CursorWithExtras extends CursorWrapper {
|
||||
public static class MessagesCursor extends CursorWrapper {
|
||||
/** Whether the mailbox is found. */
|
||||
public final boolean mIsFound;
|
||||
/** {@link Account} that owns the mailbox. Null for combined mailboxes. */
|
||||
|
@ -116,7 +116,7 @@ import java.util.Set;
|
|||
/** the number of accounts currently configured. */
|
||||
public final int mCountTotalAccounts;
|
||||
|
||||
private CursorWithExtras(Cursor cursor,
|
||||
private MessagesCursor(Cursor cursor,
|
||||
boolean found, Account account, Mailbox mailbox, boolean isEasAccount,
|
||||
boolean isRefreshable, int countTotalAccounts) {
|
||||
super(cursor);
|
||||
|
@ -261,7 +261,7 @@ import java.util.Set;
|
|||
/**
|
||||
* Creates the loader for {@link MessageListFragment}.
|
||||
*
|
||||
* @return always of {@link CursorWithExtras}.
|
||||
* @return always of {@link MessagesCursor}.
|
||||
*/
|
||||
public static Loader<Cursor> createLoader(Context context, MessageListContext listContext) {
|
||||
if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) {
|
||||
|
@ -335,9 +335,41 @@ import java.util.Set;
|
|||
}
|
||||
}
|
||||
final int countAccounts = EmailContent.count(mContext, Account.CONTENT_URI);
|
||||
return new CursorWithExtras(baseCursor, found, account, mailbox, isEasAccount,
|
||||
return wrapCursor(baseCursor, found, account, mailbox, isEasAccount,
|
||||
isRefreshable, countAccounts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps a basic cursor containing raw messages with information about the context of
|
||||
* the list that's being loaded, such as the account and the mailbox the messages
|
||||
* are for.
|
||||
* Subclasses may extend this to wrap with additional data.
|
||||
*/
|
||||
protected Cursor wrapCursor(Cursor cursor,
|
||||
boolean found, Account account, Mailbox mailbox, boolean isEasAccount,
|
||||
boolean isRefreshable, int countTotalAccounts) {
|
||||
return new MessagesCursor(cursor, found, account, mailbox, isEasAccount,
|
||||
isRefreshable, countTotalAccounts);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SearchResultsCursor extends MessagesCursor {
|
||||
private final int mResultsCount;
|
||||
private SearchResultsCursor(Cursor cursor,
|
||||
boolean found, Account account, Mailbox mailbox, boolean isEasAccount,
|
||||
boolean isRefreshable, int countTotalAccounts, int resultsCount) {
|
||||
super(cursor, found, account, mailbox, isEasAccount,
|
||||
isRefreshable, countTotalAccounts);
|
||||
mResultsCount = resultsCount;
|
||||
}
|
||||
|
||||
public int getResultsCount() {
|
||||
return mResultsCount;
|
||||
}
|
||||
|
||||
public boolean hasResults() {
|
||||
return getResultsCount() == 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -345,7 +377,7 @@ import java.util.Set;
|
|||
*/
|
||||
private static class SearchCursorLoader extends MessagesCursorLoader {
|
||||
private final MessageListContext mListContext;
|
||||
private boolean mResultCountAvailable = false;
|
||||
private int mResultsCount = -1;
|
||||
|
||||
public SearchCursorLoader(Context context, MessageListContext listContext) {
|
||||
super(context, listContext.getMailboxId());
|
||||
|
@ -355,7 +387,8 @@ import java.util.Set;
|
|||
|
||||
@Override
|
||||
public Cursor loadInBackground() {
|
||||
if (mResultCountAvailable) {
|
||||
if (mResultsCount >= 0) {
|
||||
// Result count known - the initial search meta data must have completed.
|
||||
return super.loadInBackground();
|
||||
}
|
||||
|
||||
|
@ -363,17 +396,22 @@ import java.util.Set;
|
|||
// initialized the search mailbox properly. Kick off the search first.
|
||||
Controller controller = Controller.getInstance(mContext);
|
||||
try {
|
||||
// TODO: wire through search count information and pad it into the cursor returned
|
||||
// so that the caller knows how many is in the entire result set.
|
||||
controller.searchMessages(mListContext.mAccountId, mListContext.getSearchParams());
|
||||
mResultsCount = controller.searchMessages(
|
||||
mListContext.mAccountId, mListContext.getSearchParams());
|
||||
} catch (MessagingException e) {
|
||||
// TODO: handle.
|
||||
}
|
||||
|
||||
mResultCountAvailable = true;
|
||||
|
||||
// Return whatever the super would do, now that we know the results are ready.
|
||||
// After this point, it should behave as a normal mailbox load for messages.
|
||||
return super.loadInBackground();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Cursor wrapCursor(Cursor cursor,
|
||||
boolean found, Account account, Mailbox mailbox, boolean isEasAccount,
|
||||
boolean isRefreshable, int countTotalAccounts) {
|
||||
return new SearchResultsCursor(cursor, found, account, mailbox, isEasAccount,
|
||||
isRefreshable, countTotalAccounts, mResultsCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,15 +16,15 @@
|
|||
|
||||
package com.android.email.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.LoaderTestCase;
|
||||
|
||||
import com.android.email.DBTestHelper;
|
||||
import com.android.email.MessageListContext;
|
||||
import com.android.email.provider.ProviderTestUtils;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.Mailbox;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.LoaderTestCase;
|
||||
|
||||
public class MessagesAdapterTests extends LoaderTestCase {
|
||||
// Account ID that's probably not in the database.
|
||||
private static final long NO_SUCH_ACCOUNT_ID = 1234567890123L;
|
||||
|
@ -57,8 +57,8 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
return box.mId;
|
||||
}
|
||||
|
||||
private MessagesAdapter.CursorWithExtras getLoaderResult(long accountId, long mailboxId) {
|
||||
return (MessagesAdapter.CursorWithExtras) getLoaderResultSynchronously(
|
||||
private MessagesAdapter.MessagesCursor getLoaderResult(long accountId, long mailboxId) {
|
||||
return (MessagesAdapter.MessagesCursor) getLoaderResultSynchronously(
|
||||
MessagesAdapter.createLoader(
|
||||
mProviderContext,
|
||||
MessageListContext.forMailbox(accountId, mailboxId)));
|
||||
|
@ -71,7 +71,7 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
final long accountId = createAccount(false);
|
||||
final long mailboxId = createMailbox(accountId, Mailbox.TYPE_MAIL);
|
||||
|
||||
MessagesAdapter.CursorWithExtras result = getLoaderResult(accountId, mailboxId);
|
||||
MessagesAdapter.MessagesCursor result = getLoaderResult(accountId, mailboxId);
|
||||
assertTrue(result.mIsFound);
|
||||
assertEquals(accountId, result.mAccount.mId);
|
||||
assertEquals(mailboxId, result.mMailbox.mId);
|
||||
|
@ -86,7 +86,7 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
final long accountId = createAccount(true);
|
||||
final long mailboxId = createMailbox(accountId, Mailbox.TYPE_MAIL);
|
||||
|
||||
MessagesAdapter.CursorWithExtras result = getLoaderResult(accountId, mailboxId);
|
||||
MessagesAdapter.MessagesCursor result = getLoaderResult(accountId, mailboxId);
|
||||
assertTrue(result.mIsFound);
|
||||
assertEquals(accountId, result.mAccount.mId);
|
||||
assertEquals(mailboxId, result.mMailbox.mId);
|
||||
|
@ -101,7 +101,7 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
final long accountId = createAccount(false);
|
||||
final long mailboxId = createMailbox(accountId, Mailbox.TYPE_DRAFTS);
|
||||
|
||||
MessagesAdapter.CursorWithExtras result = getLoaderResult(accountId, mailboxId);
|
||||
MessagesAdapter.MessagesCursor result = getLoaderResult(accountId, mailboxId);
|
||||
assertTrue(result.mIsFound);
|
||||
assertEquals(accountId, result.mAccount.mId);
|
||||
assertEquals(mailboxId, result.mMailbox.mId);
|
||||
|
@ -113,7 +113,7 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
* Mailbox not found.
|
||||
*/
|
||||
public void testMailboxNotFound() {
|
||||
MessagesAdapter.CursorWithExtras result = getLoaderResult(
|
||||
MessagesAdapter.MessagesCursor result = getLoaderResult(
|
||||
createAccount(false), NO_SUCH_MAILBOX_ID);
|
||||
assertFalse(result.mIsFound);
|
||||
assertNull(result.mAccount);
|
||||
|
@ -128,7 +128,7 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
public void testAccountNotFound() {
|
||||
final long mailboxId = createMailbox(NO_SUCH_ACCOUNT_ID, Mailbox.TYPE_MAIL);
|
||||
|
||||
MessagesAdapter.CursorWithExtras result = getLoaderResult(NO_SUCH_ACCOUNT_ID, mailboxId);
|
||||
MessagesAdapter.MessagesCursor result = getLoaderResult(NO_SUCH_ACCOUNT_ID, mailboxId);
|
||||
assertFalse(result.mIsFound);
|
||||
assertNull(result.mAccount);
|
||||
assertNull(result.mMailbox);
|
||||
|
@ -140,7 +140,7 @@ public class MessagesAdapterTests extends LoaderTestCase {
|
|||
* Magic mailbox. (always found)
|
||||
*/
|
||||
public void testMagicMailbox() {
|
||||
MessagesAdapter.CursorWithExtras result = getLoaderResult(
|
||||
MessagesAdapter.MessagesCursor result = getLoaderResult(
|
||||
Account.ACCOUNT_ID_COMBINED_VIEW, Mailbox.QUERY_ALL_INBOXES);
|
||||
assertTrue(result.mIsFound);
|
||||
assertNull(result.mAccount);
|
||||
|
|
Loading…
Reference in New Issue