summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Mak <tonymak@google.com>2016-05-16 15:43:53 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-05-16 15:43:53 +0000
commit3a1468db129425744078f6267d7f10ad1c13641f (patch)
tree6ab54a12966ade3ff6294342f07c3c0bd3ed5c05
parent53103d043362668e4773ed45cae5777fef24bfbb (diff)
parentb7fc988f231394077c08b5ede4d1a7310da57406 (diff)
downloadandroid_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.java51
-rw-r--r--src/com/android/messaging/util/ContactUtil.java74
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();
+ }
}