Merge "Import translations. DO NOT MERGE"
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 049df45..2affd69 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -242,6 +242,9 @@
/** Rate limit (in milliseconds) for photo cleanup. Do it at most once per day. */
private static final int PHOTO_CLEANUP_RATE_LIMIT = 24 * 60 * 60 * 1000;
+ /** Maximum length of a phone number that can be inserted into the database */
+ private static final int PHONE_NUMBER_LENGTH_LIMIT = 1000;
+
/**
* Default expiration duration for pre-authorized URIs. May be overridden from a secure
* setting.
@@ -2805,6 +2808,10 @@
throw new IllegalArgumentException(Data.MIMETYPE + " is required");
}
+ if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ maybeTrimLongPhoneNumber(inputValues);
+ }
+
// The input seem valid, create a shallow copy.
final ContentValues values = new ContentValues(inputValues);
@@ -4468,6 +4475,13 @@
return count;
}
+ private void maybeTrimLongPhoneNumber(ContentValues values) {
+ final String data1 = values.getAsString(Data.DATA1);
+ if (data1 != null && data1.length() > PHONE_NUMBER_LENGTH_LIMIT) {
+ values.put(Data.DATA1, data1.substring(0, PHONE_NUMBER_LENGTH_LIMIT));
+ }
+ }
+
private int updateData(ContentValues values, Cursor c, boolean callerIsSyncAdapter) {
if (values.size() == 0) {
return 0;
@@ -4476,6 +4490,10 @@
final SQLiteDatabase db = mDbHelper.get().getWritableDatabase();
final String mimeType = c.getString(DataRowHandler.DataUpdateQuery.MIMETYPE);
+ if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ maybeTrimLongPhoneNumber(values);
+ }
+
DataRowHandler rowHandler = getDataRowHandler(mimeType);
boolean updated =
rowHandler.update(db, mTransactionContext.get(), values, c,
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index d8e2924..e55ebcb 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -1024,6 +1024,32 @@
assertNetworkNotified(true);
}
+ public void testDataInsertPhoneNumberTooLongIsTrimmed() {
+ long rawContactId = RawContactUtil.createRawContactWithName(mResolver, "John", "Doe");
+
+ ContentValues values = new ContentValues();
+ values.put(Data.RAW_CONTACT_ID, rawContactId);
+ values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ final StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < 300; i++) {
+ sb.append("12345");
+ }
+ final String phoneNumber1500Chars = sb.toString();
+ values.put(Phone.NUMBER, phoneNumber1500Chars);
+
+ Uri dataUri = mResolver.insert(Data.CONTENT_URI, values);
+ final long dataId = ContentUris.parseId(dataUri);
+
+ sb.setLength(0);
+ for (int i = 0; i < 200; i++) {
+ sb.append("12345");
+ }
+ final String phoneNumber1000Chars = sb.toString();
+ final ContentValues expected = new ContentValues();
+ expected.put(Phone.NUMBER, phoneNumber1000Chars);
+ assertSelection(dataUri, expected, Data._ID, dataId);
+ }
+
public void testRawContactDataQuery() {
Account account1 = new Account("a", "b");
Account account2 = new Account("c", "d");