diff options
author | Makoto Onuki <omakoto@google.com> | 2016-10-13 18:08:48 -0700 |
---|---|---|
committer | Makoto Onuki <omakoto@google.com> | 2016-10-13 18:08:48 -0700 |
commit | bcb842628fa52eec2ff52cfa5e5c3690fa86bb0f (patch) | |
tree | 7ece068b1cedb1723a21bb0da4d191d40db7588e /src | |
parent | 931012409e6a8995f928d644787d588008757c7f (diff) | |
download | ContactsProvider-bcb842628fa52eec2ff52cfa5e5c3690fa86bb0f.tar.gz |
Pass caller packager name to GAL provider, work profile case
Bug 32072962
Test: cts-tradefed run cts-dev --skip-device-info \
--skip-preconditions --skip-system-status-check \
com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker \
-a armeabi-v7a -m CtsDevicePolicyManagerTestCases \
-t 'com.android.cts.devicepolicy.ManagedProfileTest#testManagedContactsUris'
Change-Id: I855d16b1ff37d78bc5ec869c23fe31f61a684df5
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/providers/contacts/ContactsProvider2.java | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index 02b6a2ee..c598d1ca 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -66,6 +66,7 @@ import android.os.RemoteException; import android.os.StrictMode; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.UserHandle; import android.preference.PreferenceManager; import android.provider.BaseColumns; import android.provider.ContactsContract; @@ -5577,6 +5578,22 @@ public class ContactsProvider2 extends AbstractContactsProvider return new MatrixCursor(projection); } + private String getRealCallerPackageName(Uri queryUri) { + // If called by itself, then the URI must contain the real caller package name. + if (UserHandle.isSameApp(android.os.Process.myUid(), Binder.getCallingUid())) { + final String passedPackage = queryUri.getQueryParameter( + Directory.CALLER_PACKAGE_PARAM_KEY); + if (TextUtils.isEmpty(passedPackage)) { + Log.wtf(TAG, "Cross-profile query with no " + Directory.CALLER_PACKAGE_PARAM_KEY); + return "UNKNOWN"; + } + return passedPackage; + } else { + // Otherwise, just return the real calling package name. + return getCallingPackage(); + } + } + private Cursor queryDirectoryAuthority(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, String directory, final CancellationSignal cancellationSignal) { @@ -5597,7 +5614,10 @@ public class ContactsProvider2 extends AbstractContactsProvider builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, directoryInfo.accountType); } // Pass the caller package name. - builder.appendQueryParameter(Directory.CALLER_PACKAGE_PARAM_KEY, getCallingPackage()); + // Note the request may come from the CP2 on the primary profile. In that case, the + // real caller package is passed via the query paramter. See getRealCallerPackageName(). + builder.appendQueryParameter(Directory.CALLER_PACKAGE_PARAM_KEY, + getRealCallerPackageName(uri)); String limit = getLimit(uri); if (limit != null) { @@ -5658,7 +5678,10 @@ public class ContactsProvider2 extends AbstractContactsProvider throw new IllegalArgumentException( "Authority " + localUri.getAuthority() + " is not a valid CP2 authority."); } - final Uri remoteUri = maybeAddUserId(localUri, corpUserId); + // Add the "user-id @" to the URI, and also pass the caller package name. + final Uri remoteUri = maybeAddUserId(localUri, corpUserId).buildUpon() + .appendQueryParameter(Directory.CALLER_PACKAGE_PARAM_KEY, getCallingPackage()) + .build(); Cursor cursor = getContext().getContentResolver().query(remoteUri, projection, selection, selectionArgs, sortOrder, cancellationSignal); if (cursor == null) { |