diff options
5 files changed, 25 insertions, 13 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index e3d7c3d98fba..2d49875cd2cf 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -3717,14 +3717,15 @@ public class DevicePolicyManager { /** * Start Quick Contact on the managed profile for the user, if the policy allows. + * * @hide */ public void startManagedQuickContact(String actualLookupKey, long actualContactId, - long directoryId, Intent originalIntent) { + boolean isContactIdIgnored, long directoryId, Intent originalIntent) { if (mService != null) { try { - mService.startManagedQuickContact( - actualLookupKey, actualContactId, directoryId, originalIntent); + mService.startManagedQuickContact(actualLookupKey, actualContactId, + isContactIdIgnored, directoryId, originalIntent); } catch (RemoteException e) { Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e); } @@ -3737,7 +3738,7 @@ public class DevicePolicyManager { */ public void startManagedQuickContact(String actualLookupKey, long actualContactId, Intent originalIntent) { - startManagedQuickContact(actualLookupKey, actualContactId, Directory.DEFAULT, + startManagedQuickContact(actualLookupKey, actualContactId, false, Directory.DEFAULT, originalIntent); } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 08cab8846290..84845da8f798 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -210,7 +210,7 @@ interface IDevicePolicyManager { void setCrossProfileContactsSearchDisabled(in ComponentName who, boolean disabled); boolean getCrossProfileContactsSearchDisabled(in ComponentName who); boolean getCrossProfileContactsSearchDisabledForUser(int userId); - void startManagedQuickContact(String lookupKey, long contactId, long directoryId, in Intent originalIntent); + void startManagedQuickContact(String lookupKey, long contactId, boolean isContactIdIgnored, long directoryId, in Intent originalIntent); void setBluetoothContactSharingDisabled(in ComponentName who, boolean disabled); boolean getBluetoothContactSharingDisabled(in ComponentName who); diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index b5474329e3e5..1bfb3c00acce 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -8401,10 +8401,15 @@ public final class ContactsContract { * @hide */ public static Intent rebuildManagedQuickContactsIntent(String lookupKey, long contactId, - long directoryId, Intent originalIntent) { + boolean isContactIdIgnored, long directoryId, Intent originalIntent) { final Intent intent = new Intent(ACTION_QUICK_CONTACT); // Rebuild the URI from a lookup key and a contact ID. - Uri uri = Contacts.getLookupUri(contactId, lookupKey); + Uri uri = null; + if (!TextUtils.isEmpty(lookupKey)) { + uri = isContactIdIgnored + ? Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey) + : Contacts.getLookupUri(contactId, lookupKey); + } if (uri != null && directoryId != Directory.DEFAULT) { uri = uri.buildUpon().appendQueryParameter( ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build(); diff --git a/core/java/android/provider/ContactsInternal.java b/core/java/android/provider/ContactsInternal.java index 36ef52d6c39b..2cd1d48e7dc1 100644 --- a/core/java/android/provider/ContactsInternal.java +++ b/core/java/android/provider/ContactsInternal.java @@ -42,10 +42,12 @@ public class ContactsInternal { private static final UriMatcher sContactsUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); private static final int CONTACTS_URI_LOOKUP_ID = 1000; + private static final int CONTACTS_URI_LOOKUP = 1001; static { // Contacts URI matching table final UriMatcher matcher = sContactsUriMatcher; + matcher.addURI(ContactsContract.AUTHORITY, "contacts/lookup/*", CONTACTS_URI_LOOKUP); matcher.addURI(ContactsContract.AUTHORITY, "contacts/lookup/*/#", CONTACTS_URI_LOOKUP_ID); } @@ -57,6 +59,7 @@ public class ContactsInternal { final int match = sContactsUriMatcher.match(uri); switch (match) { + case CONTACTS_URI_LOOKUP: case CONTACTS_URI_LOOKUP_ID: { if (maybeStartManagedQuickContact(context, intent)) { return; // Request handled by DPM. Just return here. @@ -89,7 +92,10 @@ public class ContactsInternal { // Decompose into an ID and a lookup key. final List<String> pathSegments = uri.getPathSegments(); - final long contactId = ContentUris.parseId(uri); + final boolean isContactIdIgnored = pathSegments.size() < 4; + final long contactId = isContactIdIgnored + ? ContactsContract.Contacts.ENTERPRISE_CONTACT_ID_BASE //contact id will be ignored + : ContentUris.parseId(uri); final String lookupKey = pathSegments.get(2); final String directoryIdStr = uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY); final long directoryId = (directoryIdStr == null) @@ -119,8 +125,8 @@ public class ContactsInternal { final long actualDirectoryId = (directoryId - ContactsContract.Directory.ENTERPRISE_DIRECTORY_ID_BASE); - dpm.startManagedQuickContact(actualLookupKey, actualContactId, actualDirectoryId, - originalIntent); + dpm.startManagedQuickContact(actualLookupKey, actualContactId, isContactIdIgnored, + actualDirectoryId, originalIntent); return true; } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 1ada0ace4429..ee9b084b70eb 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -6739,9 +6739,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { @Override public void startManagedQuickContact(String actualLookupKey, long actualContactId, - long actualDirectoryId, Intent originalIntent) { - final Intent intent = QuickContact.rebuildManagedQuickContactsIntent( - actualLookupKey, actualContactId, actualDirectoryId, originalIntent); + boolean isContactIdIgnored, long actualDirectoryId, Intent originalIntent) { + final Intent intent = QuickContact.rebuildManagedQuickContactsIntent(actualLookupKey, + actualContactId, isContactIdIgnored, actualDirectoryId, originalIntent); final int callingUserId = UserHandle.getCallingUserId(); final long ident = mInjector.binderClearCallingIdentity(); |