Merge "Use long for ids"
diff --git a/src/com/android/ex/chips/BaseRecipientAdapter.java b/src/com/android/ex/chips/BaseRecipientAdapter.java
index b90bf3c..939ff3c 100644
--- a/src/com/android/ex/chips/BaseRecipientAdapter.java
+++ b/src/com/android/ex/chips/BaseRecipientAdapter.java
@@ -283,7 +283,7 @@
* mEntries are less than mPreferredMaxResultCount, contacts in
* mNonAggregatedEntries are also used.
*/
- private final LinkedHashMap<Integer, List<RecipientEntry>> mEntryMap;
+ private final LinkedHashMap<Long, List<RecipientEntry>> mEntryMap;
private final List<RecipientEntry> mNonAggregatedEntries;
private final List<RecipientEntry> mEntries;
private final Set<String> mExistingDestinations;
@@ -315,7 +315,7 @@
mInflater = LayoutInflater.from(context);
mQueryType = queryType;
mPreferredMaxResultCount = preferredMaxResultCount;
- mEntryMap = new LinkedHashMap<Integer, List<RecipientEntry>>();
+ mEntryMap = new LinkedHashMap<Long, List<RecipientEntry>>();
mNonAggregatedEntries = new ArrayList<RecipientEntry>();
mEntries = new ArrayList<RecipientEntry>();
mExistingDestinations = new HashSet<String>();
@@ -486,20 +486,20 @@
while (cursor.moveToNext()) {
final String displayName;
final String destination;
- final int contactId;
- final int dataId;
+ final long contactId;
+ final long dataId;
final String thumbnailUriString;
if (mQueryType == QUERY_TYPE_EMAIL) {
displayName = cursor.getString(EmailQuery.NAME);
destination = cursor.getString(EmailQuery.ADDRESS);
- contactId = cursor.getInt(EmailQuery.CONTACT_ID);
- dataId = cursor.getInt(EmailQuery.DATA_ID);
+ contactId = cursor.getLong(EmailQuery.CONTACT_ID);
+ dataId = cursor.getLong(EmailQuery.DATA_ID);
thumbnailUriString = cursor.getString(EmailQuery.PHOTO_THUMBNAIL_URI);
} else if (mQueryType == QUERY_TYPE_PHONE) {
displayName = cursor.getString(PhoneQuery.NAME);
destination = cursor.getString(PhoneQuery.NUMBER);
- contactId = cursor.getInt(PhoneQuery.CONTACT_ID);
- dataId = cursor.getInt(PhoneQuery.DATA_ID);
+ contactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ dataId = cursor.getLong(PhoneQuery.DATA_ID);
thumbnailUriString = cursor.getString(PhoneQuery.PHOTO_THUMBNAIL_URI);
} else {
throw new IndexOutOfBoundsException("Unexpected query type: " + mQueryType);
@@ -539,7 +539,7 @@
private void constructEntryList() {
mEntries.clear();
int validEntryCount = 0;
- for (Map.Entry<Integer, List<RecipientEntry>> mapEntry : mEntryMap.entrySet()) {
+ for (Map.Entry<Long, List<RecipientEntry>> mapEntry : mEntryMap.entrySet()) {
final List<RecipientEntry> entryList = mapEntry.getValue();
final int size = entryList.size();
for (int i = 0; i < size; i++) {
diff --git a/src/com/android/ex/chips/ChipsUtil.java b/src/com/android/ex/chips/ChipsUtil.java
index b23870a..e14363b 100644
--- a/src/com/android/ex/chips/ChipsUtil.java
+++ b/src/com/android/ex/chips/ChipsUtil.java
@@ -22,10 +22,14 @@
import android.content.Context;
import android.net.Uri;
import android.os.Build;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.text.TextUtils;
+import android.widget.MultiAutoCompleteTextView;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
public class ChipsUtil {
@@ -38,31 +42,58 @@
return TextUtils.equals("IceCreamSandwich", Build.VERSION.RELEASE);
}
+ public static boolean tryUpdateRecencyInfo(MultiAutoCompleteTextView... views) {
+ for (MultiAutoCompleteTextView view : views) {
+ if (view instanceof RecipientEditTextView) {
+ updateRecencyInfo((RecipientEditTextView)view);
+ }
+ }
+ return true;
+ }
+
// TODO: check this works
public static void updateRecencyInfo(RecipientEditTextView view) {
final Context context = view.getContext();
final ContentResolver resolver = context.getContentResolver();
final long currentTimeMillis = System.currentTimeMillis();
- final Collection<Integer> contactIds = view.getContactIds();
+ final Collection<Long> contactIds = view.getContactIds();
if (contactIds != null) {
- for (Integer contactId : contactIds) {
- final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
- final ContentValues values = new ContentValues();
- values.put(Contacts.LAST_TIME_CONTACTED, currentTimeMillis);
- resolver.update(uri, values, null, null);
+ StringBuilder whereBuilder = new StringBuilder();
+ ArrayList<String> whereArgs = new ArrayList<String>();
+ String[] questionMarks = new String[contactIds.size()];
+ for (Long contactId : contactIds) {
+ whereArgs.add(String.valueOf(contactId));
}
+ Arrays.fill(questionMarks, "?");
+ whereBuilder.append(ContactsContract.Contacts._ID + " IN (").
+ append(TextUtils.join(",", questionMarks)).
+ append(")");
+
+ ContentValues values = new ContentValues();
+ values.put(ContactsContract.Contacts.LAST_TIME_CONTACTED,
+ System.currentTimeMillis());
+ resolver.update(ContactsContract.Contacts.CONTENT_URI, values,
+ whereBuilder.toString(), whereArgs.toArray(new String[0]));
}
- /* Not effective yet.
- final Collection<Integer> dataIds = view.getDataIds();
+ final Collection<Long> dataIds = view.getDataIds();
if (dataIds != null) {
- for (Integer dataId : dataIds) {
- Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId);
- final ContentValues values = new ContentValues();
- values.put("last_time_contacted", currentTimeMillis);
- resolver.update(uri, values, null, null);
+ StringBuilder whereBuilder = new StringBuilder();
+ ArrayList<String> whereArgs = new ArrayList<String>();
+ String[] questionMarks = new String[dataIds.size()];
+ for (Long dataId : dataIds) {
+ whereArgs.add(String.valueOf(dataId));
}
- }*/
+ Arrays.fill(questionMarks, "?");
+ whereBuilder.append(ContactsContract.Data._ID + " IN (").
+ append(TextUtils.join(",", questionMarks)).
+ append(")");
+
+ final ContentValues values = new ContentValues();
+ values.put("last_time_contacted", currentTimeMillis);
+ resolver.update(Data.CONTENT_URI, values,
+ whereBuilder.toString(), whereArgs.toArray(new String[0]));
+ }
}
}
\ No newline at end of file
diff --git a/src/com/android/ex/chips/RecipientEditTextView.java b/src/com/android/ex/chips/RecipientEditTextView.java
index f3c19d4..abc7afb 100644
--- a/src/com/android/ex/chips/RecipientEditTextView.java
+++ b/src/com/android/ex/chips/RecipientEditTextView.java
@@ -389,8 +389,8 @@
}
/** Returns a collection of contact Id for each chip inside this View. */
- /* package */ Collection<Integer> getContactIds() {
- final Set<Integer> result = new HashSet<Integer>();
+ /* package */ Collection<Long> getContactIds() {
+ final Set<Long> result = new HashSet<Long>();
for (RecipientChip chip : mRecipients) {
result.add(chip.getContactId());
}
@@ -398,8 +398,8 @@
}
/** Returns a collection of data Id for each chip inside this View. May be null. */
- /* package */ Collection<Integer> getDataIds() {
- final Set<Integer> result = new HashSet<Integer>();
+ /* package */ Collection<Long> getDataIds() {
+ final Set<Long> result = new HashSet<Long>();
for (RecipientChip chip : mRecipients) {
result.add(chip.getDataId());
}
@@ -424,9 +424,9 @@
private int mLeft;
- private final int mContactId;
+ private final long mContactId;
- private final int mDataId;
+ private final long mDataId;
private RecipientEntry mEntry;
@@ -642,11 +642,11 @@
}
}
- public int getContactId() {
+ public long getContactId() {
return mContactId;
}
- public int getDataId() {
+ public long getDataId() {
return mDataId;
}
}
diff --git a/src/com/android/ex/chips/RecipientEntry.java b/src/com/android/ex/chips/RecipientEntry.java
index 027b2e3..d8fc9f5 100644
--- a/src/com/android/ex/chips/RecipientEntry.java
+++ b/src/com/android/ex/chips/RecipientEntry.java
@@ -47,9 +47,9 @@
/** Destination for this contact entry. Would be an email address or a phone number. */
private final String mDestination;
/** ID for the person */
- private final int mContactId;
+ private final long mContactId;
/** ID for the destination */
- private final int mDataId;
+ private final long mDataId;
private final boolean mIsDivider;
private final Uri mPhotoThumbnailUri;
@@ -73,7 +73,7 @@
private RecipientEntry(
- int entryType, String displayName, String destination, int contactId, int dataId) {
+ int entryType, String displayName, String destination, long contactId, long dataId) {
mEntryType = entryType;
mIsFirstLevel = false;
mDisplayName = displayName;
@@ -86,7 +86,7 @@
}
private RecipientEntry(
- int entryType, String displayName, String destination, int contactId, int dataId,
+ int entryType, String displayName, String destination, long contactId, long dataId,
Uri photoThumbnailUri) {
mEntryType = entryType;
mIsFirstLevel = true;
@@ -109,14 +109,14 @@
}
public static RecipientEntry constructTopLevelEntry(
- String displayName, String destination, int contactId, int dataId,
+ String displayName, String destination, long contactId, long dataId,
Uri photoThumbnailUri) {
return new RecipientEntry(
ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId, photoThumbnailUri);
}
public static RecipientEntry constructTopLevelEntry(
- String displayName, String destination, int contactId, int dataId,
+ String displayName, String destination, long contactId, long dataId,
String thumbnailUriAsString) {
return new RecipientEntry(
ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
@@ -124,7 +124,7 @@
}
public static RecipientEntry constructSecondLevelEntry(
- String displayName, String destination, int contactId, int dataId) {
+ String displayName, String destination, long contactId, long dataId) {
return new RecipientEntry(
ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId);
}
@@ -141,11 +141,11 @@
return mDestination;
}
- public int getContactId() {
+ public long getContactId() {
return mContactId;
}
- public int getDataId() {
+ public long getDataId() {
return mDataId;
}