summaryrefslogtreecommitdiffstats
path: root/src/com/android/dialer/database/DialerDatabaseHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/dialer/database/DialerDatabaseHelper.java')
-rw-r--r--src/com/android/dialer/database/DialerDatabaseHelper.java102
1 files changed, 87 insertions, 15 deletions
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index f22ad7c9c..ffd0db732 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -36,6 +36,7 @@ import android.provider.ContactsContract.Directory;
import android.text.TextUtils;
import android.util.Log;
+import com.android.contacts.common.list.PhoneNumberListAdapter;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.contacts.common.util.StopWatch;
import com.android.dialer.R;
@@ -50,7 +51,9 @@ import com.google.common.collect.Lists;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -81,7 +84,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
* 0-98 KitKat
* </pre>
*/
- public static final int DATABASE_VERSION = 70004;
+ public static final int DATABASE_VERSION = 70005;
public static final String DATABASE_NAME = "dialer.db";
/**
@@ -120,6 +123,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
static final String IN_VISIBLE_GROUP = "in_visible_group";
static final String IS_PRIMARY = "is_primary";
static final String LAST_SMARTDIAL_UPDATE_TIME = "last_smartdial_update_time";
+ static final String MIMETYPE = "mimetype";
}
public static interface PrefixColumns extends BaseColumns {
@@ -134,7 +138,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
/** Query options for querying the contact database.*/
public static class PhoneQuery {
- static final Uri URI = Phone.CONTENT_URI.buildUpon().
+ static final Uri URI = ContactsContract.CommonDataKinds.Callable.CONTENT_URI.buildUpon().
appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
String.valueOf(Directory.DEFAULT)).
appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true").
@@ -172,6 +176,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
static final int PHONE_IS_SUPER_PRIMARY = 11;
static final int PHONE_IN_VISIBLE_GROUP = 12;
static final int PHONE_IS_PRIMARY = 13;
+ static final int PHONE_NUMBER_MIMETYPE = 14;
/** Selects only rows that have been updated after a certain time stamp.*/
static final String SELECT_UPDATED_CLAUSE =
@@ -262,20 +267,23 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
public final String phoneNumber;
public final String lookupKey;
public final long photoId;
+ public final String mimeType;
public ContactNumber(long id, long dataID, String displayName, String phoneNumber,
- String lookupKey, long photoId) {
+ String lookupKey, long photoId, String mimeType) {
this.dataId = dataID;
this.id = id;
this.displayName = displayName;
this.phoneNumber = phoneNumber;
this.lookupKey = lookupKey;
this.photoId = photoId;
+ this.mimeType = mimeType;
}
@Override
public int hashCode() {
- return Objects.hashCode(id, dataId, displayName, phoneNumber, lookupKey, photoId);
+ return Objects.hashCode(id, dataId, displayName, phoneNumber, lookupKey, photoId,
+ mimeType);
}
@Override
@@ -290,7 +298,9 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
&& Objects.equal(this.displayName, that.displayName)
&& Objects.equal(this.phoneNumber, that.phoneNumber)
&& Objects.equal(this.lookupKey, that.lookupKey)
- && Objects.equal(this.photoId, that.photoId);
+ && Objects.equal(this.photoId, that.photoId)
+ && Objects.equal(this.mimeType, that.mimeType);
+
}
return false;
}
@@ -414,7 +424,8 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
SmartDialDbColumns.STARRED + " INTEGER, " +
SmartDialDbColumns.IS_SUPER_PRIMARY + " INTEGER, " +
SmartDialDbColumns.IN_VISIBLE_GROUP + " INTEGER, " +
- SmartDialDbColumns.IS_PRIMARY + " INTEGER" +
+ SmartDialDbColumns.IS_PRIMARY + " INTEGER, " +
+ SmartDialDbColumns.MIMETYPE + " TEXT" +
");");
db.execSQL("CREATE TABLE " + Tables.PREFIX_TABLE + " (" +
@@ -725,8 +736,9 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
SmartDialDbColumns.IS_SUPER_PRIMARY + ", " +
SmartDialDbColumns.IN_VISIBLE_GROUP+ ", " +
SmartDialDbColumns.IS_PRIMARY + ", " +
- SmartDialDbColumns.LAST_SMARTDIAL_UPDATE_TIME + ") " +
- " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ SmartDialDbColumns.LAST_SMARTDIAL_UPDATE_TIME + ", " +
+ SmartDialDbColumns.MIMETYPE + ") " +
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
final SQLiteStatement insert = db.compileStatement(sqlInsert);
final String numberSqlInsert = "INSERT INTO " + Tables.PREFIX_TABLE + " (" +
@@ -774,11 +786,18 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
insert.bindLong(11, updatedContactCursor.getInt(PhoneQuery.PHONE_IN_VISIBLE_GROUP));
insert.bindLong(12, updatedContactCursor.getInt(PhoneQuery.PHONE_IS_PRIMARY));
insert.bindLong(13, currentMillis);
+
+ final String mimetype =
+ updatedContactCursor.getString(PhoneQuery.PHONE_NUMBER_MIMETYPE);
+ insert.bindString(14, mimetype);
+
insert.executeInsert();
final String contactPhoneNumber =
updatedContactCursor.getString(PhoneQuery.PHONE_NUMBER);
final ArrayList<String> numberPrefixes =
- SmartDialPrefix.parseToNumberTokens(contactPhoneNumber);
+ (TextUtils.equals(mimetype, Phone.CONTENT_ITEM_TYPE)) ?
+ SmartDialPrefix.parseToNumberTokens(contactPhoneNumber) :
+ SmartDialPrefix.generateNamePrefixes(contactPhoneNumber);
for (String numberPrefix : numberPrefixes) {
numberInsert.bindLong(1, updatedContactCursor.getLong(
@@ -1007,7 +1026,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
* @return A list of top candidate contacts that will be suggested to user to match their input.
*/
public ArrayList<ContactNumber> getLooseMatches(String query,
- SmartDialNameMatcher nameMatcher) {
+ SmartDialNameMatcher nameMatcher, String usernameMimeType) {
final boolean inUpdate = sInUpdate.get();
if (inUpdate) {
return Lists.newArrayList();
@@ -1031,7 +1050,8 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
SmartDialDbColumns.PHOTO_ID + ", " +
SmartDialDbColumns.NUMBER + ", " +
SmartDialDbColumns.CONTACT_ID + ", " +
- SmartDialDbColumns.LOOKUP_KEY +
+ SmartDialDbColumns.LOOKUP_KEY + ", " +
+ SmartDialDbColumns.MIMETYPE +
" FROM " + Tables.SMARTDIAL_TABLE +
" ORDER BY " + SmartDialSortingOrder.SORT_ORDER,
new String[] {currentTimeStamp});
@@ -1050,6 +1070,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
final int columnNumber = 3;
final int columnId = 4;
final int columnLookupKey = 5;
+ final int columnMimetype = 6;
if (DEBUG) {
stopWatch.lap("Found column IDs");
}
@@ -1067,6 +1088,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
final long id = cursor.getLong(columnId);
final long photoId = cursor.getLong(columnPhotoId);
final String lookupKey = cursor.getString(columnLookupKey);
+ final String mimeType = cursor.getString(columnMimetype);
/** If a contact already exists and another phone number of the contact is being
* processed, skip the second instance.
@@ -1076,18 +1098,31 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
continue;
}
+ boolean usernameMatches = false;
+ if (!TextUtils.isEmpty(usernameMimeType)) {
+ HashMap<String, String> allCallableNumbers = getCallableMimeTypeForContact(id);
+
+ if (allCallableNumbers.containsKey(usernameMimeType)) {
+ String extraContactNumber = allCallableNumbers.get(usernameMimeType);
+ if (extraContactNumber != null) {
+ usernameMatches = nameMatcher.matches(extraContactNumber);
+ }
+ }
+
+ }
+
/**
- * If the contact has either the name or number that matches the query, add to the
- * result.
+ * If the contact has either the name or number OR a username
+ * that matches the query, add to the result.
*/
final boolean nameMatches = nameMatcher.matches(displayName);
final boolean numberMatches =
(nameMatcher.matchesNumber(phoneNumber, query) != null);
- if (nameMatches || numberMatches) {
+ if (nameMatches || numberMatches || usernameMatches) {
/** If a contact has not been added, add it to the result and the hash set.*/
duplicates.add(contactMatch);
result.add(new ContactNumber(id, dataID, displayName, phoneNumber, lookupKey,
- photoId));
+ photoId, mimeType));
counter++;
if (DEBUG) {
stopWatch.lap("Added one result: Name: " + displayName);
@@ -1103,4 +1138,41 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
}
return result;
}
+
+ public HashMap<String, String> getCallableMimeTypeForContact(long contactId) {
+ final SQLiteDatabase db = getReadableDatabase();
+
+ final Cursor cursor = db.rawQuery("SELECT " +
+ SmartDialDbColumns.NUMBER + ", " +
+ SmartDialDbColumns.MIMETYPE +
+ " FROM " + Tables.SMARTDIAL_TABLE +
+ " WHERE " + SmartDialDbColumns.CONTACT_ID + " = ?",
+ new String[] {Long.toString(contactId)});
+
+ try {
+ if (cursor != null) {
+ HashMap<String, String> numbers = new HashMap<>();
+ while(cursor.moveToNext()) {
+
+ /** Gets the column ID from the cursor.*/
+ final int columnNumber = 0;
+ final int columnMimetype = 1;
+
+ final String phoneNumber = cursor.getString(columnNumber);
+ final String mimetype = cursor.getString(columnMimetype);
+
+ if (phoneNumber != null) {
+ numbers.put(mimetype, phoneNumber);
+ }
+ }
+ return numbers;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return null;
+ }
}