diff options
author | Tony Mak <tonymak@google.com> | 2016-05-16 15:43:53 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-05-16 15:43:53 +0000 |
commit | 3a1468db129425744078f6267d7f10ad1c13641f (patch) | |
tree | 6ab54a12966ade3ff6294342f07c3c0bd3ed5c05 | |
parent | 53103d043362668e4773ed45cae5777fef24bfbb (diff) | |
parent | b7fc988f231394077c08b5ede4d1a7310da57406 (diff) | |
download | android_packages_apps_Messaging-3a1468db129425744078f6267d7f10ad1c13641f.tar.gz android_packages_apps_Messaging-3a1468db129425744078f6267d7f10ad1c13641f.tar.bz2 android_packages_apps_Messaging-3a1468db129425744078f6267d7f10ad1c13641f.zip |
Search enterprise directory as well in SMS app
am: b7fc988f23
* commit 'b7fc988f231394077c08b5ede4d1a7310da57406':
Search enterprise directory as well in SMS app
Change-Id: Ie22b0b974985251ce6fd34c57b8316e9529a1057
-rw-r--r-- | src/com/android/messaging/ui/contact/ContactRecipientAdapter.java | 51 | ||||
-rw-r--r-- | src/com/android/messaging/util/ContactUtil.java | 74 |
2 files changed, 101 insertions, 24 deletions
diff --git a/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java b/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java index 25f422e..240f281 100644 --- a/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java +++ b/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java @@ -34,6 +34,7 @@ import com.android.messaging.util.BugleGservices; import com.android.messaging.util.BugleGservicesKeys; import com.android.messaging.util.ContactRecipientEntryUtils; import com.android.messaging.util.ContactUtil; +import com.android.messaging.util.OsUtil; import com.android.messaging.util.PhoneUtils; import java.text.Collator; @@ -101,15 +102,49 @@ public final class ContactRecipientAdapter extends BaseRecipientAdapter { if (BugleGservices.get().getBoolean( BugleGservicesKeys.ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS, BugleGservicesKeys.ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS_DEFAULT)) { - return Pair.create((Cursor) new MergeCursor(new Cursor[] { - ContactUtil.filterPhones(getContext(), searchText) - .performSynchronousQuery(), - ContactUtil.filterEmails(getContext(), searchText) - .performSynchronousQuery() - }), false /* the merged cursor is not sorted */); + + final Cursor personalFilterPhonesCursor = ContactUtil + .filterPhones(getContext(), searchText).performSynchronousQuery(); + final Cursor personalFilterEmailsCursor = ContactUtil + .filterEmails(getContext(), searchText).performSynchronousQuery(); + Cursor resultCursor; + if (OsUtil.isAtLeastN()) { + // Including enterprise result starting from N. + final Cursor enterpriseFilterPhonesCursor = ContactUtil.filterPhonesEnterprise( + getContext(), searchText).performSynchronousQuery(); + final Cursor enterpriseFilterEmailsCursor = ContactUtil.filterEmailsEnterprise( + getContext(), searchText).performSynchronousQuery(); + // TODO: Separating enterprise result from personal result (b/26021888) + resultCursor = new MergeCursor( + new Cursor[]{personalFilterEmailsCursor, enterpriseFilterEmailsCursor, + personalFilterPhonesCursor, enterpriseFilterPhonesCursor}); + } else { + resultCursor = new MergeCursor( + new Cursor[]{personalFilterEmailsCursor, personalFilterPhonesCursor}); + } + return Pair.create( + resultCursor, + false /* the merged cursor is not sorted */ + ); } else { - return Pair.create(ContactUtil.filterDestination(getContext(), searchText) - .performSynchronousQuery(), true); + final Cursor personalFilterDestinationCursor = ContactUtil + .filterDestination(getContext(), searchText).performSynchronousQuery(); + Cursor resultCursor; + boolean sorted; + if (OsUtil.isAtLeastN()) { + // Including enterprise result starting from N. + final Cursor enterpriseFilterDestinationCursor = ContactUtil + .filterDestinationEnterprise(getContext(), searchText) + .performSynchronousQuery(); + // TODO: Separating enterprise result from personal result (b/26021888) + resultCursor = new MergeCursor(new Cursor[]{personalFilterDestinationCursor, + enterpriseFilterDestinationCursor}); + sorted = false; + } else { + resultCursor = personalFilterDestinationCursor; + sorted = true; + } + return Pair.create(resultCursor, sorted); } } diff --git a/src/com/android/messaging/util/ContactUtil.java b/src/com/android/messaging/util/ContactUtil.java index 8555889..41a1704 100644 --- a/src/com/android/messaging/util/ContactUtil.java +++ b/src/com/android/messaging/util/ContactUtil.java @@ -274,6 +274,18 @@ public class ContactUtil { } /** + * Get a list of destinations (phone, email) matching the partial destination in work profile. + */ + public static CursorQueryData filterDestinationEnterprise(final Context context, + final String destination) { + if (shouldFilterForEmail(destination)) { + return ContactUtil.filterEmailsEnterprise(context, destination); + } else { + return ContactUtil.filterPhonesEnterprise(context, destination); + } + } + + /** * Get a list of phones matching a search criteria. The search may be on contact name or * phone number. In case search is on contact name, all matching contact's phone number * will be returned. @@ -282,19 +294,29 @@ public class ContactUtil { */ @VisibleForTesting public static CursorQueryData filterPhones(final Context context, final String query) { + return filterPhonesInternal(context, Phone.CONTENT_FILTER_URI, query, Directory.DEFAULT); + } + + /** + * Similar to {@link #filterPhones(Context, String)}, but search in work profile instead. + */ + public static CursorQueryData filterPhonesEnterprise(final Context context, + final String query) { + return filterPhonesInternal(context, Phone.ENTERPRISE_CONTENT_FILTER_URI, query, + Directory.ENTERPRISE_DEFAULT); + } + + private static CursorQueryData filterPhonesInternal(final Context context, + final Uri phoneFilterBaseUri, final String query, final long directoryId) { if (!ContactUtil.hasReadContactsPermission()) { return CursorQueryData.getEmptyQueryData(); } - - final Uri uri = Phone.CONTENT_FILTER_URI.buildUpon() - .appendPath(query).appendQueryParameter( - ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)) - .build(); - - return new CursorQueryData(context, uri, PhoneQuery.PROJECTION, null, null, + Uri phoneFilterUri = buildDirectorySearchUri(phoneFilterBaseUri, query, directoryId); + return new CursorQueryData(context, + phoneFilterUri, + PhoneQuery.PROJECTION, null, null, PhoneQuery.SORT_KEY); } - /** * Lookup a phone based on a phone number. Supplied phone should be a relatively complete * phone number for this to succeed. PhoneLookup URI will apply some smartness to do a @@ -336,17 +358,29 @@ public class ContactUtil { */ @VisibleForTesting public static CursorQueryData filterEmails(final Context context, final String query) { + return filterEmailsInternal(context, Email.CONTENT_FILTER_URI, query, Directory.DEFAULT); + } + + /** + * Similar to {@link #filterEmails(Context, String)}, but search in work profile instead. + */ + public static CursorQueryData filterEmailsEnterprise(final Context context, + final String query) { + return filterEmailsInternal(context, Email.ENTERPRISE_CONTENT_FILTER_URI, query, + Directory.ENTERPRISE_DEFAULT); + } + + private static CursorQueryData filterEmailsInternal(final Context context, + final Uri filterEmailsBaseUri, final String query, final long directoryId) { if (!ContactUtil.hasReadContactsPermission()) { return CursorQueryData.getEmptyQueryData(); } - - final Uri uri = Email.CONTENT_FILTER_URI.buildUpon() - .appendPath(query).appendQueryParameter( - ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)) - .build(); - - return new CursorQueryData(context, uri, EmailQuery.PROJECTION, null, null, - EmailQuery.SORT_KEY); + final Uri filterEmailsUri = buildDirectorySearchUri(filterEmailsBaseUri, query, + directoryId); + return new CursorQueryData(context, + filterEmailsUri, + PhoneQuery.PROJECTION, null, null, + PhoneQuery.SORT_KEY); } /** @@ -522,4 +556,12 @@ public class ContactUtil { public static boolean hasReadContactsPermission() { return OsUtil.hasPermission(Manifest.permission.READ_CONTACTS); } + + private static Uri buildDirectorySearchUri(final Uri uri, final String query, + final long directoryId) { + return uri.buildUpon() + .appendPath(query).appendQueryParameter( + ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)) + .build(); + } } |