Settings provider needs to send notifications as itself

... and not as its ultimate caller, who may be a less-privileged
application.  Fixes bug 7188309

Change-Id: Iffd37b8da84f683bf665bf3d48c0b7fbc8dd721d
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index a0ae9e3..9839c16 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -344,7 +344,12 @@
         String notify = uri.getQueryParameter("notify");
         if (notify == null || "true".equals(notify)) {
             final int notifyTarget = isGlobal ? UserHandle.USER_ALL : userHandle;
-            getContext().getContentResolver().notifyChange(uri, null, true, notifyTarget);
+            final long oldId = Binder.clearCallingIdentity();
+            try {
+                getContext().getContentResolver().notifyChange(uri, null, true, notifyTarget);
+            } finally {
+                Binder.restoreCallingIdentity(oldId);
+            }
             if (LOCAL_LOGV) Log.v(TAG, "notifying for " + notifyTarget + ": " + uri);
         } else {
             if (LOCAL_LOGV) Log.v(TAG, "notification suppressed: " + uri);