Don't sort contacts supplied to global search app.
They are to be sorted by the global search app itself instead.
While we're at it, also remove 'create contact' and 'dial number'
suggestions since they're not used.
Change-Id: I0c56f638e347d101468e22d8fb2417552891eaa9
diff --git a/src/com/android/providers/contacts/GlobalSearchSupport.java b/src/com/android/providers/contacts/GlobalSearchSupport.java
index 70dbd31..d4cddee 100644
--- a/src/com/android/providers/contacts/GlobalSearchSupport.java
+++ b/src/com/android/providers/contacts/GlobalSearchSupport.java
@@ -18,14 +18,10 @@
import android.app.SearchManager;
import android.content.Context;
-import android.content.res.Resources;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.sqlite.SQLiteDatabase;
-import android.location.Country;
-import android.location.CountryDetector;
import android.net.Uri;
-import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -36,7 +32,6 @@
import android.telephony.TelephonyManager;
import android.text.TextUtils;
-import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.providers.contacts.ContactsDatabaseHelper.AggregatedPresenceColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.ContactsColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.Tables;
@@ -72,31 +67,6 @@
" FROM " + Tables.AGGREGATED_PRESENCE +
" WHERE " + AggregatedPresenceColumns.CONTACT_ID + "=" + ContactsColumns.CONCRETE_ID + ")";
- // Current contacts - those contacted within the last 3 days (in seconds)
- private static final long CURRENT_CONTACTS = 3 * 24 * 60 * 60;
-
- // Recent contacts - those contacted within the last 30 days (in seconds)
- private static final long RECENT_CONTACTS = 30 * 24 * 60 * 60;
-
- private static final String TIME_SINCE_LAST_CONTACTED =
- "(strftime('%s', 'now') - contacts." + Contacts.LAST_TIME_CONTACTED + "/1000)";
-
- /*
- * See {@link ContactsProvider2#EMAIL_FILTER_SORT_ORDER} for the discussion of this
- * sorting order.
- */
- private static final String SORT_ORDER =
- "(CASE WHEN contacts." + Contacts.STARRED + "=1 THEN 0 ELSE 1 END), "
- + "(CASE WHEN " + TIME_SINCE_LAST_CONTACTED + " < " + CURRENT_CONTACTS + " THEN 0 "
- + " WHEN " + TIME_SINCE_LAST_CONTACTED + " < " + RECENT_CONTACTS + " THEN 1 "
- + " ELSE 2 END),"
- + "contacts." + Contacts.TIMES_CONTACTED + " DESC, "
- + "contacts." + Contacts.DISPLAY_NAME_PRIMARY + ", "
- + "contacts." + Contacts._ID;
-
- private static final String RECENTLY_CONTACTED =
- TIME_SINCE_LAST_CONTACTED + " < " + RECENT_CONTACTS;
-
private static class SearchSuggestion {
long contactId;
String photoUri;
@@ -112,7 +82,7 @@
String lastAccessTime;
@SuppressWarnings({"unchecked"})
- public ArrayList asList(String[] projection) {
+ public ArrayList<?> asList(String[] projection) {
if (icon1 == null) {
if (photoUri != null) {
icon1 = photoUri.toString();
@@ -192,24 +162,13 @@
}
private final ContactsProvider2 mContactsProvider;
- private PhoneNumberUtil mPhoneNumberUtil;
- private CountryDetector mCountryDetector;
- private String mSimCountryIso;
@SuppressWarnings("all")
public GlobalSearchSupport(ContactsProvider2 contactsProvider) {
mContactsProvider = contactsProvider;
- mPhoneNumberUtil = PhoneNumberUtil.getInstance();
- mCountryDetector = (CountryDetector)
- mContactsProvider.getContext().getSystemService(Context.COUNTRY_DETECTOR);
TelephonyManager telman = (TelephonyManager)
mContactsProvider.getContext().getSystemService(Context.TELEPHONY_SERVICE);
- // assuming here that the SIM never changes while the phone is booted. ok?
- mSimCountryIso = telman == null ? null : telman.getSimCountryIso();
- if (mSimCountryIso != null) {
- mSimCountryIso = mSimCountryIso.toUpperCase();
- }
// To ensure the data column position. This is dead code if properly configured.
if (Organization.COMPANY != Data.DATA1 || Phone.NUMBER != Data.DATA1
@@ -219,54 +178,20 @@
}
}
- private boolean isPossibleByPhoneNumberUtil(String query) {
- String currentCountry = null;
- Country current = mCountryDetector.detectCountry();
- if (current != null) {
- currentCountry = current.getCountryIso().toUpperCase();
- }
- if (currentCountry != null && mPhoneNumberUtil.isPossibleNumber(query, currentCountry)) {
- return true;
- }
- if (mSimCountryIso != null && !TextUtils.equals(currentCountry, mSimCountryIso)) {
- // use the SIM country if it's different, so we can add contacts for home numbers
- // while roaming
- return mPhoneNumberUtil.isPossibleNumber(query, mSimCountryIso);
- }
- return false;
- }
-
- private boolean isPhoneNumber(String query) {
- if (TextUtils.isEmpty(query)) {
- return false;
- }
- if (ContactsProvider2.countPhoneNumberDigits(query) > 2) {
- // 3 or more digits matching the basic pattern
- return true;
- }
- // more advanced check, for 1800-FLOWERS style numbers and the like
- return isPossibleByPhoneNumberUtil(query);
- }
-
public Cursor handleSearchSuggestionsQuery(
SQLiteDatabase db, Uri uri, String[] projection, String limit) {
- final String searchClause;
-
- final String selection;
- if (uri.getPathSegments().size() <= 1) {
- searchClause = null;
- selection = RECENTLY_CONTACTED;
- } else {
- searchClause = uri.getLastPathSegment();
- selection = null;
- }
-
- MatrixCursor cursor = new MatrixCursor(
+ final MatrixCursor cursor = new MatrixCursor(
projection == null ? SEARCH_SUGGESTIONS_COLUMNS : projection);
- addSearchSuggestionsBasedOnFilter(cursor, db, projection, selection, searchClause, limit);
- if (isPhoneNumber(searchClause)) {
- addSearchSuggestionsBasedOnPhoneNumber(cursor, searchClause, projection);
+
+ if (uri.getPathSegments().size() <= 1) {
+ // no search term, return empty
+ } else {
+ String selection = null;
+ String searchClause = uri.getLastPathSegment();
+ addSearchSuggestionsBasedOnFilter(
+ cursor, db, projection, selection, searchClause, limit);
}
+
return cursor;
}
@@ -294,53 +219,6 @@
db, projection, ContactsColumns.CONCRETE_ID + "=" + contactId, filter, null);
}
- private Cursor addSearchSuggestionsBasedOnPhoneNumber(MatrixCursor cursor,
- String searchClause, String[] projection) {
- Resources r = mContactsProvider.getContext().getResources();
- String s;
- int i;
-
- if (mContactsProvider.isPhone() && mContactsProvider.isVoiceCapable()) {
- SearchSuggestion dialNumber = new SearchSuggestion();
- dialNumber.contactId = -1;
- s = r.getString(com.android.internal.R.string.dial_number_using, searchClause);
- i = s.indexOf('\n');
- if (i < 0) {
- dialNumber.text1 = s;
- dialNumber.text2 = "";
- } else {
- dialNumber.text1 = s.substring(0, i);
- dialNumber.text2 = s.substring(i + 1);
- }
- dialNumber.icon1 = String.valueOf(com.android.internal.R.drawable.call_contact);
- dialNumber.intentData = "tel:" + searchClause;
- dialNumber.intentAction =
- ContactsContract.Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED;
- dialNumber.lookupKey = SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT; // shortcut id
- cursor.addRow(dialNumber.asList(projection));
- }
-
- SearchSuggestion createContact = new SearchSuggestion();
- createContact.contactId = -2;
- s = r.getString(com.android.internal.R.string.create_contact_using, searchClause);
- i = s.indexOf('\n');
- if (i < 0) {
- createContact.text1 = s;
- createContact.text2 = "";
- } else {
- createContact.text1 = s.substring(0, i);
- createContact.text2 = s.substring(i + 1);
- }
- createContact.icon1 = String.valueOf(com.android.internal.R.drawable.create_contact);
- createContact.intentData = "tel:" + searchClause;
- createContact.intentAction =
- ContactsContract.Intents.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED;
- createContact.lookupKey = SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT; // shortcut id
- cursor.addRow(createContact.asList(projection));
-
- return cursor;
- }
-
private Cursor addSearchSuggestionsBasedOnFilter(MatrixCursor cursor, SQLiteDatabase db,
String[] projection, String selection, String filter, String limit) {
StringBuilder sb = new StringBuilder();
@@ -366,7 +244,6 @@
if (selection != null) {
sb.append(" WHERE ").append(selection);
}
- sb.append(" ORDER BY " + SORT_ORDER);
if (limit != null) {
sb.append(" LIMIT " + limit);
}
diff --git a/tests/src/com/android/providers/contacts/GlobalSearchSupportTest.java b/tests/src/com/android/providers/contacts/GlobalSearchSupportTest.java
index 3c95c11..c776109 100644
--- a/tests/src/com/android/providers/contacts/GlobalSearchSupportTest.java
+++ b/tests/src/com/android/providers/contacts/GlobalSearchSupportTest.java
@@ -113,8 +113,7 @@
GoldenContact contact = new GoldenContactBuilder().name("Deer", "Dough").photo(
loadTestPhoto()).phone("1-800-4664-411").build();
new SuggestionTesterBuilder(contact).query("1800").expectIcon1Uri(true).expectedText1(
- "Deer Dough").expectedText2("1-800-4664-411").expectedCreateContactNumber("1800")
- .build().test();
+ "Deer Dough").expectedText2("1-800-4664-411").build().test();
}
public void assertCreateContactSuggestion(Cursor c, String number) {
@@ -131,42 +130,6 @@
assertCursorValues(c, values);
}
- public void searchSuggestionsByPhoneNumberOnPhoneTest(String number) {
- getContactsProvider().setIsPhone(true);
- getContactsProvider().setIsVoiceCapable(true);
-
- ContentValues values = new ContentValues();
-
- Uri searchUri = new Uri.Builder().scheme("content").authority(ContactsContract.AUTHORITY)
- .appendPath(SearchManager.SUGGEST_URI_PATH_QUERY).appendPath(number).build();
-
- Cursor c = mResolver.query(searchUri, null, null, null, null);
- assertEquals(2, c.getCount());
- c.moveToFirst();
- values.put(SearchManager.SUGGEST_COLUMN_TEXT_1, "Dial number");
- values.put(SearchManager.SUGGEST_COLUMN_TEXT_2, "using " + number);
- values.put(SearchManager.SUGGEST_COLUMN_ICON_1,
- String.valueOf(com.android.internal.R.drawable.call_contact));
- values.put(SearchManager.SUGGEST_COLUMN_INTENT_ACTION,
- Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED);
- values.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA, "tel:" + number);
- values.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID,
- SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT);
- assertCursorValues(c, values);
-
- c.moveToNext();
- assertCreateContactSuggestion(c, number);
- c.close();
- }
-
- public void testSearchSuggestionsByPhoneNumberOnPhone() throws Exception {
- searchSuggestionsByPhoneNumberOnPhoneTest("12345678");
- }
-
- public void testSearchSuggestionsByAlphnumericPhoneNumberOnPhone() throws Exception {
- searchSuggestionsByPhoneNumberOnPhoneTest("1800-flowers");
- }
-
/**
* Tests that the quick search suggestion returns the expected contact
* information.
@@ -185,8 +148,6 @@
private final String expectedText2;
- private final String expectedCreateContactNumber;
-
public SuggestionTester(SuggestionTesterBuilder builder) {
contact = builder.contact;
query = builder.query;
@@ -194,7 +155,6 @@
expectedIcon2 = builder.expectedIcon2;
expectedText1 = builder.expectedText1;
expectedText2 = builder.expectedText2;
- expectedCreateContactNumber = builder.expectedCreateContactNumber;
}
/**
@@ -222,7 +182,7 @@
.appendPath(query).build();
Cursor c = mResolver.query(searchUri, null, null, null, null);
- assertEquals(expectedCreateContactNumber == null ? 1 : 2, c.getCount());
+ assertEquals(1, c.getCount());
c.moveToFirst();
String icon1 = c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_1));
@@ -237,11 +197,6 @@
ContentValues values = getContactValues();
assertCursorValues(c, values);
- if (expectedCreateContactNumber != null) {
- c.moveToNext();
- assertCreateContactSuggestion(c, expectedCreateContactNumber);
- }
-
c.close();
}
@@ -360,8 +315,6 @@
private String expectedText2;
- private String expectedCreateContactNumber;
-
public SuggestionTesterBuilder(GoldenContact contact) {
this.contact = contact;
}
@@ -418,10 +371,5 @@
expectedText2 = value;
return this;
}
-
- public SuggestionTesterBuilder expectedCreateContactNumber(String number) {
- expectedCreateContactNumber = number;
- return this;
- }
}
}