Making observer registration customizable.
There is a need to skip registering the observer
or register a different observer in cases when
we have an extremely chatty content provider
(think MediaStore).
Change-Id: Iadfb8e0193736cb231762a147c2df1491ad22e0e
diff --git a/api/current.xml b/api/current.xml
index 89e91ca..c43ebac 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -46584,6 +46584,21 @@
<parameter name="cursor" type="android.database.Cursor">
</parameter>
</method>
+<method name="registerContentObserver"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cursor" type="android.database.Cursor">
+</parameter>
+<parameter name="observer" type="android.database.ContentObserver">
+</parameter>
+</method>
<method name="setProjection"
return="void"
abstract="false"
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 42599ed..7776874 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -16,6 +16,7 @@
package android.content;
+import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
@@ -37,14 +38,22 @@
public Cursor loadInBackground() {
Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
mSelectionArgs, mSortOrder);
- // Ensure the cursor window is filled
if (cursor != null) {
+ // Ensure the cursor window is filled
cursor.getCount();
- cursor.registerContentObserver(mObserver);
+ registerContentObserver(cursor, mObserver);
}
return cursor;
}
+ /**
+ * Registers an observer to get notifications from the content provider
+ * when the cursor needs to be refreshed.
+ */
+ public void registerContentObserver(Cursor cursor, ContentObserver observer) {
+ cursor.registerContentObserver(mObserver);
+ }
+
/* Runs on the UI thread */
@Override
public void deliverResult(Cursor cursor) {