Merge "Make sure we populate the single static account view."
diff --git a/src/com/android/mail/browse/ConversationCursor.java b/src/com/android/mail/browse/ConversationCursor.java
index 1fafa78..4ea87bc 100644
--- a/src/com/android/mail/browse/ConversationCursor.java
+++ b/src/com/android/mail/browse/ConversationCursor.java
@@ -70,6 +70,8 @@
private static final String REQUERY_COLUMN = "__requery__";
// A sentinel value for the "index" of the deleted column; it's an int that is otherwise invalid
private static final int DELETED_COLUMN_INDEX = -1;
+ // Empty deletion list
+ private static final ArrayList<Integer> EMPTY_DELETION_LIST = new ArrayList<Integer>();
// The current conversation cursor
private static ConversationCursor sConversationCursor;
// The index of the Uri whose data is reflected in the cached row
@@ -462,11 +464,15 @@
if (DEBUG) {
LogUtils.d(TAG, "[getRefreshDeletions() called]");
}
+ // It's possible that the requery cursor is null in the case that loadInBackground() causes
+ // ConversationCursor.create to do a sync() between the time that refreshReady() is called
+ // and the subsequent call to getRefreshDeletions(). This is harmless, and an empty
+ // result list is correct.
+ if (sRequeryCursor == null) {
+ return EMPTY_DELETION_LIST;
+ }
Cursor deviceCursor = sConversationCursor;
Cursor serverCursor = sRequeryCursor;
- // TODO: (mindyp) saw some instability here. Adding an assert to try to
- // catch it.
- assert(sRequeryCursor != null);
ArrayList<Integer> deleteList = new ArrayList<Integer>();
int serverCount = serverCursor.getCount();
int deviceCount = deviceCursor.getCount();
diff --git a/src/com/android/mail/providers/protos/mock/MockUiProvider.java b/src/com/android/mail/providers/protos/mock/MockUiProvider.java
index 98082e8..67464e4 100644
--- a/src/com/android/mail/providers/protos/mock/MockUiProvider.java
+++ b/src/com/android/mail/providers/protos/mock/MockUiProvider.java
@@ -34,6 +34,7 @@
import com.android.mail.providers.UIProvider.FolderCapabilities;
import com.android.mail.providers.UIProvider.FolderColumns;
import com.android.mail.providers.UIProvider.MessageColumns;
+import com.android.mail.providers.UIProvider.SettingsColumns;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
@@ -126,6 +127,10 @@
ImmutableList.of(folderDetailsMap1));
builder.put(accountDetailsMap0.get(AccountColumns.FOLDER_LIST_URI).toString(),
ImmutableList.of(folderDetailsMap0, folderDetailsMap1));
+ Map<String, Object> settings0 = createSettingsDetailsMap(folderDetailsMap0.get(
+ FolderColumns.URI).toString());
+ builder.put(accountDetailsMap0.get(AccountColumns.SETTINGS_QUERY_URI).toString(),
+ ImmutableList.of(settings0));
Map<String, Object> folderDetailsMap2 = createFolderDetailsMap(2, "two", 2, 2);
builder.put(folderDetailsMap2.get(FolderColumns.URI).toString(),
@@ -135,6 +140,10 @@
ImmutableList.of(folderDetailsMap3));
builder.put(accountDetailsMap1.get(AccountColumns.FOLDER_LIST_URI).toString(),
ImmutableList.of(folderDetailsMap2, folderDetailsMap3));
+ Map<String, Object> settings1 = createSettingsDetailsMap(folderDetailsMap2.get(
+ FolderColumns.URI).toString());
+ builder.put(accountDetailsMap1.get(AccountColumns.SETTINGS_QUERY_URI).toString(),
+ ImmutableList.of(settings1));
Map<String, Object> conv2 = createConversationDetailsMap("zeroConv2".hashCode(),
"zeroConv2", 0);
@@ -161,6 +170,12 @@
MOCK_QUERY_RESULTS = builder.build();
}
+ private static Map<String, Object> createSettingsDetailsMap(String uri) {
+ Map<String, Object> settingsMap = Maps.newHashMap();
+ settingsMap.put(SettingsColumns.DEFAULT_INBOX, uri);
+ return settingsMap;
+ }
+
private static Map<String, Object> createConversationDetailsMap(int conversationId,
String subject, int hasAttachments) {
final String conversationUri = "content://" + AUTHORITY + "/conversation/" + conversationId;