Allow singleton providers to accept connections from other users

This is required for singleton providers like sms log.

Change-Id: Icb18a764c27dc1b43f8b8bcc24c21c91274995fd
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 5b722e2..fde8b2e 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -107,6 +107,7 @@
     private PathPermission[] mPathPermissions;
     private boolean mExported;
     private boolean mNoPerms;
+    private boolean mSingleUser;
 
     private final ThreadLocal<String> mCallingPackage = new ThreadLocal<String>();
 
@@ -460,6 +461,7 @@
 
     boolean checkUser(int pid, int uid, Context context) {
         return UserHandle.getUserId(uid) == context.getUserId()
+                || mSingleUser
                 || context.checkPermission(INTERACT_ACROSS_USERS, pid, uid)
                 == PERMISSION_GRANTED;
     }
@@ -1674,6 +1676,7 @@
                 setWritePermission(info.writePermission);
                 setPathPermissions(info.pathPermissions);
                 mExported = info.exported;
+                mSingleUser = (info.flags & ProviderInfo.FLAG_SINGLE_USER) != 0;
                 setAuthorities(info.authority);
             }
             ContentProvider.this.onCreate();