Fix NPE when cursor is null
Fix JoinContactLoader background loader to null-check returned cursor before
wrapping in a JoinContactLoaderResult CursorWrapper. Change
JoinContactListFragment to in turn check for a null JoinContactLoaderResult.
Bug:18373971
Change-Id: Ib973d1609ba4e555a98b2b9b8c07bd7e5e4e3601
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index f3788a4..3e42fdf 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -81,8 +81,11 @@
break;
}
case JoinContactListAdapter.PARTITION_ALL_CONTACTS: {
- Cursor suggestionsCursor = ((JoinContactLoaderResult) data).suggestionCursor;
- onContactListLoaded(suggestionsCursor, data);
+ if (data != null) {
+ final Cursor suggestionsCursor =
+ ((JoinContactLoaderResult) data).suggestionCursor;
+ onContactListLoaded(suggestionsCursor, data);
+ }
break;
}
}
diff --git a/src/com/android/contacts/list/JoinContactLoader.java b/src/com/android/contacts/list/JoinContactLoader.java
index beb5208..075d789 100644
--- a/src/com/android/contacts/list/JoinContactLoader.java
+++ b/src/com/android/contacts/list/JoinContactLoader.java
@@ -52,9 +52,13 @@
@Override
public void close() {
try {
- suggestionCursor.close();
+ if (suggestionCursor != null) {
+ suggestionCursor.close();
+ }
} finally {
- super.close();
+ if (super.getWrappedCursor() != null) {
+ super.close();
+ }
}
}
}
@@ -79,6 +83,23 @@
// to load the entire list
final Cursor suggestionsCursor = getContext().getContentResolver()
.query(mSuggestionUri, mProjection, null, null, null);
- return new JoinContactLoaderResult(super.loadInBackground(), suggestionsCursor);
+ if (suggestionsCursor == null) {
+ return null;
+ }
+ Cursor cursorToClose = suggestionsCursor;
+ try {
+ final Cursor baseCursor = super.loadInBackground();
+ if (baseCursor != null) {
+ final JoinContactLoaderResult result =
+ new JoinContactLoaderResult(baseCursor, suggestionsCursor);
+ cursorToClose = null;
+ return result;
+ }
+ } finally {
+ if (cursorToClose != null) {
+ cursorToClose.close();
+ }
+ }
+ return null;
}
-}
\ No newline at end of file
+}