Merge "Use myUserId() only in registerContentObserver()" into jb-mr1-dev
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 4ab8272..9e406d4 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1219,7 +1219,7 @@
public final void registerContentObserver(Uri uri, boolean notifyForDescendents,
ContentObserver observer)
{
- registerContentObserver(uri, notifyForDescendents, observer, UserHandle.getCallingUserId());
+ registerContentObserver(uri, notifyForDescendents, observer, UserHandle.myUserId());
}
/** @hide - designated user version */
diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java
index e7ff92d..300b4d1 100644
--- a/core/java/android/database/AbstractCursor.java
+++ b/core/java/android/database/AbstractCursor.java
@@ -19,6 +19,7 @@
import android.content.ContentResolver;
import android.net.Uri;
import android.os.Bundle;
+import android.os.UserHandle;
import android.util.Log;
import java.lang.ref.WeakReference;
@@ -350,6 +351,11 @@
* specific row URI, or a base URI for a whole class of content.
*/
public void setNotificationUri(ContentResolver cr, Uri notifyUri) {
+ setNotificationUri(cr, notifyUri, UserHandle.myUserId());
+ }
+
+ /** @hide - set the notification uri but with an observer for a particular user's view */
+ public void setNotificationUri(ContentResolver cr, Uri notifyUri, int userHandle) {
synchronized (mSelfObserverLock) {
mNotifyUri = notifyUri;
mContentResolver = cr;
@@ -357,7 +363,7 @@
mContentResolver.unregisterContentObserver(mSelfObserver);
}
mSelfObserver = new SelfContentObserver(this);
- mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver);
+ mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver, userHandle);
mSelfObserverRegistered = true;
}
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index ad35f7f..c42272b9 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -33,6 +33,7 @@
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.AssetFileDescriptor;
+import android.database.AbstractCursor;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
@@ -685,7 +686,16 @@
qb.setTables(args.table);
Cursor ret = qb.query(db, select, args.where, args.args, null, null, sort);
- ret.setNotificationUri(getContext().getContentResolver(), url);
+ // the default Cursor interface does not support per-user observation
+ try {
+ AbstractCursor c = (AbstractCursor) ret;
+ c.setNotificationUri(getContext().getContentResolver(), url, forUser);
+ } catch (ClassCastException e) {
+ // details of the concrete Cursor implementation have changed and this code has
+ // not been updated to match -- complain and fail hard.
+ Log.wtf(TAG, "Incompatible cursor derivation!");
+ throw e;
+ }
return ret;
}