diff options
| author | blong <blong@codeaurora.org> | 2014-07-14 10:39:28 +0800 |
|---|---|---|
| committer | Roman Birg <roman@cyngn.com> | 2014-09-02 14:06:13 -0700 |
| commit | b9bd6da3fb0f07237a8cb8f91be4d6c8a03a808e (patch) | |
| tree | 0b59e7d141d4ab3e014927330b88feb9a1623c6f | |
| parent | a6cc76084c6cb2c84f2e914f7ef8d193f5fe34b8 (diff) | |
| download | packages_apps_ContactsCommon-b9bd6da3fb0f07237a8cb8f91be4d6c8a03a808e.tar.gz packages_apps_ContactsCommon-b9bd6da3fb0f07237a8cb8f91be4d6c8a03a808e.tar.bz2 packages_apps_ContactsCommon-b9bd6da3fb0f07237a8cb8f91be4d6c8a03a808e.zip | |
Add support to save multi anr and email in SIM card
- support to save multi anr and email for SIM contacts
CRs-Fixed: 696392
Change-Id: I736dc1776947fa732c3fc164f4846c8879fe8740
5 files changed, 127 insertions, 50 deletions
diff --git a/src/com/android/contacts/common/MoreContactUtils.java b/src/com/android/contacts/common/MoreContactUtils.java index 7f9d5774..4a4a053e 100644 --- a/src/com/android/contacts/common/MoreContactUtils.java +++ b/src/com/android/contacts/common/MoreContactUtils.java @@ -73,8 +73,8 @@ public class MoreContactUtils { private static final String TAG = "MoreContactUtils"; private static final int MAX_LENGTH_NAME_IN_SIM = 14; private static final int MAX_LENGTH_NAME_WITH_CHINESE_IN_SIM = 6; - private static final int MAX_LENGTH_NUMBER_IN_SIM = 20; - private static final int MAX_LENGTH_EMAIL_IN_SIM = 40; + public static final int MAX_LENGTH_NUMBER_IN_SIM = 20; + public static final int MAX_LENGTH_EMAIL_IN_SIM = 40; private static final int NAME_POS = 0; private static final int NUMBER_POS = 1; private static final int EMAIL_POS = 2; @@ -392,17 +392,10 @@ public class MoreContactUtils { mValues.put(SimContactsConstants.STR_NUMBER, number); } if (!TextUtils.isEmpty(emails)) { - if (emails.length() > MAX_LENGTH_EMAIL_IN_SIM) { - emails = emails.substring(0, MAX_LENGTH_EMAIL_IN_SIM); - } mValues.put(SimContactsConstants.STR_EMAILS, emails); } if (!TextUtils.isEmpty(anrNumber)) { anrNumber = anrNumber.replaceAll("[^0123456789PWN\\,\\;\\*\\#\\+]", ""); - if (anrNumber.length() > MAX_LENGTH_NUMBER_IN_SIM) { - anrNumber = anrNumber.substring(0, MAX_LENGTH_NUMBER_IN_SIM); - } - mValues.put(SimContactsConstants.STR_ANRS, anrNumber); } @@ -505,6 +498,29 @@ public class MoreContactUtils { return anrCount; } + public static int getOneSimAnrCount(int sub) { + int count = 0; + int anrCount = getAnrCount(sub); + int adnCount = getAdnCount(sub); + if (adnCount > 0) { + count = anrCount % adnCount != 0 ? (anrCount / adnCount + 1) + : (anrCount / adnCount); + } + return count; + } + + public static int getOneSimEmailCount(int sub) { + int count = 0; + int emailCount = getEmailCount(sub); + int adnCount = getAdnCount(sub); + if (adnCount > 0) { + count = emailCount % adnCount != 0 ? (emailCount + / adnCount + 1) + : (emailCount / adnCount); + } + return count; + } + public static int getEmailCount(int sub) { int emailCount = 0; if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { diff --git a/src/com/android/contacts/common/SimContactsOperation.java b/src/com/android/contacts/common/SimContactsOperation.java index 70b6afb4..4e44acd6 100644 --- a/src/com/android/contacts/common/SimContactsOperation.java +++ b/src/com/android/contacts/common/SimContactsOperation.java @@ -88,7 +88,6 @@ public class SimContactsOperation { this.mResolver = context.getContentResolver(); } - public Uri insert(ContentValues values, int subscription) { Uri uri = getContentUri(subscription); @@ -278,7 +277,7 @@ public class SimContactsOperation { private static String getContactItems(long rawContactId, String selectionArg, String columnName) { - String retval = null; + StringBuilder retval = new StringBuilder(); Uri baseUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri dataUri = Uri.withAppendedPath(baseUri, RawContacts.Data.CONTENT_DIRECTORY); @@ -295,7 +294,10 @@ public class SimContactsOperation { c.moveToPosition(-1); while (c.moveToNext()) { - retval = c.getString(c.getColumnIndex(columnName)); + if (!TextUtils.isEmpty(retval.toString())) { + retval.append(","); + } + retval.append(c.getString(c.getColumnIndex(columnName))); } c.close(); @@ -307,13 +309,13 @@ public class SimContactsOperation { } } - return retval; + return retval.toString(); } private static String getContactPhoneNumber(long rawContactId, String selectionArg1, String selectionArg2, String columnName) { - String retval = null; + StringBuilder retval = new StringBuilder(); Uri baseUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri dataUri = Uri.withAppendedPath(baseUri, RawContacts.Data.CONTENT_DIRECTORY); @@ -331,10 +333,12 @@ public class SimContactsOperation { c.moveToPosition(-1); while (c.moveToNext()) { - retval = c.getString(c.getColumnIndex(columnName)); + if (!TextUtils.isEmpty(retval.toString())) { + retval.append(","); + } + retval.append(c.getString(c.getColumnIndex(columnName))); } - c.close(); } catch (Exception e) { Log.e(TAG, e.getMessage()); } finally { @@ -343,7 +347,7 @@ public class SimContactsOperation { } } - return retval; + return retval.toString(); } diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java index 4fcf290f..6c6ac24d 100644 --- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java +++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java @@ -697,14 +697,23 @@ public class ImportExportDialogFragment extends DialogFragment } int phoneCountInOneSimContact = 1; + int emailCountInOneSimContact = 0; if (canSaveAnr) { - phoneCountInOneSimContact = 2; + int num = MoreContactUtils.getOneSimAnrCount(subscription); + phoneCountInOneSimContact = num > 1 ? (num + 1) : 2; + } + if (canSaveEmail) { + emailCountInOneSimContact = MoreContactUtils + .getOneSimEmailCount(subscription); } int nameCount = (name != null && !name.equals("")) ? 1 : 0; int groupNumCount = (arrayNumber.size() % phoneCountInOneSimContact) != 0 ? (arrayNumber.size() / phoneCountInOneSimContact + 1) : (arrayNumber.size() / phoneCountInOneSimContact); - int groupEmailCount = arrayEmail.size(); + int groupEmailCount = emailCountInOneSimContact == 0 ? 0 + : ((arrayEmail.size() % emailCountInOneSimContact) != 0 ? ( + arrayEmail.size() / emailCountInOneSimContact + 1) + : (arrayEmail.size() / emailCountInOneSimContact)); //recalute the group when spare anr is not enough if (canSaveAnr && emptyAnr <= groupNumCount) { groupNumCount = arrayNumber.size() - emptyAnr; @@ -719,17 +728,39 @@ public class ImportExportDialogFragment extends DialogFragment for (int i = 0; i < groupCount; i++) { if (freeSimCount > 0) { String num = arrayNumber.size() > 0 ? arrayNumber.remove(0) : null; - String anrNum = null; - String email = null; - if (canSaveAnr && emptyAnr-- >0) { - anrNum = arrayNumber.size() > 0 ? arrayNumber.remove(0) : null; + StringBuilder anrNum = new StringBuilder(); + StringBuilder email = new StringBuilder(); + if (canSaveAnr && emptyAnr-- > 0) { + for (int j = 1; j < phoneCountInOneSimContact; j++) { + if (arrayNumber.size() > 0 && emptyAnr-- > 0 ) { + String s = arrayNumber.remove(0); + if (s.length() > MoreContactUtils + .MAX_LENGTH_NUMBER_IN_SIM) { + s = s.substring(0, + MoreContactUtils.MAX_LENGTH_NUMBER_IN_SIM); + } + anrNum.append(s); + anrNum.append(","); + } + } } if (canSaveEmail) { - email = arrayEmail.size() > 0 ? arrayEmail.remove(0) : null; + for (int j = 0; j < emailCountInOneSimContact; j++) { + if (arrayEmail.size() > 0) { + String s = arrayEmail.remove(0); + if (s.length() > MoreContactUtils + .MAX_LENGTH_EMAIL_IN_SIM) { + s = s.substring(0, + MoreContactUtils.MAX_LENGTH_EMAIL_IN_SIM); + } + email.append(s); + email.append(","); + } + } } - result = MoreContactUtils.insertToCard(mPeople, name, num, email, - anrNum, subscription); + result = MoreContactUtils.insertToCard(mPeople, name, num, + email.toString(), anrNum.toString(), subscription); if (null == result) { // add toast handler when sim card is full diff --git a/src/com/android/contacts/common/model/RawContactDelta.java b/src/com/android/contacts/common/model/RawContactDelta.java index cc88be2b..0812c46a 100644 --- a/src/com/android/contacts/common/model/RawContactDelta.java +++ b/src/com/android/contacts/common/model/RawContactDelta.java @@ -30,6 +30,7 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.Profile; import android.provider.ContactsContract.RawContacts; +import android.text.TextUtils; import android.util.Log; import com.android.contacts.common.model.AccountTypeManager; @@ -444,12 +445,12 @@ public class RawContactDelta implements Parcelable { String name = null; String number = null; - String email = null; - String anr = null; String newName = null; String newNumber = null; - String newEmail = null; - String newAnr = null; + StringBuilder email = new StringBuilder(); + StringBuilder anr = new StringBuilder(); + StringBuilder newEmail = new StringBuilder(); + StringBuilder newAnr = new StringBuilder(); if (nameValuesDelta != null) { if (isContactInsert()) { @@ -471,9 +472,16 @@ public class RawContactDelta implements Parcelable { if (valuesDelta.getAfter() != null && valuesDelta.getAfter().size() != 0) { if (Phone.TYPE_MOBILE == valuesDelta.getAfter().getAsLong(Phone.TYPE)) { - number = valuesDelta.getAfter().getAsString(Phone.NUMBER); + if (TextUtils.isEmpty(number)) { + number = valuesDelta.getAfter().getAsString(Phone.NUMBER); + } else { + // don't supports to save two mobile number,so gives + // invalid str here + number = SimContactsConstants.STR_ANRS; + } } else { - anr = valuesDelta.getAfter().getAsString(Phone.NUMBER); + anr.append(valuesDelta.getAfter().getAsString(Phone.NUMBER)); + anr.append(","); } } } @@ -481,32 +489,48 @@ public class RawContactDelta implements Parcelable { for (ValuesDelta valuesDelta : phones) { if (valuesDelta.mBefore != null && valuesDelta.mBefore.size() != 0) { - if (Phone.TYPE_MOBILE == valuesDelta.mBefore.getAsLong(Phone.TYPE)) { + if (Phone.TYPE_MOBILE == valuesDelta.mBefore.getAsLong(Phone.TYPE) ) { number = valuesDelta.mBefore.getAsString(Phone.NUMBER); } else { - anr = valuesDelta.mBefore.getAsString(Phone.NUMBER); + anr.append(valuesDelta.mBefore.getAsString(Phone.NUMBER)); + anr.append(","); } } if (valuesDelta.getAfter() != null && valuesDelta.getAfter().size() != 0) { if (Phone.TYPE_MOBILE == valuesDelta.getAsLong(Phone.TYPE)) { - newNumber = valuesDelta.getAfter().getAsString(Phone.NUMBER); + if (TextUtils.isEmpty(newNumber)) { + newNumber = valuesDelta.getAfter().getAsString(Phone.NUMBER); + } else { + newNumber = SimContactsConstants.STR_ANRS; + } } else { - newAnr = valuesDelta.getAfter().getAsString(Phone.NUMBER); + newAnr.append(valuesDelta.getAfter().getAsString(Phone.NUMBER)); + newAnr.append(","); } } } } - if (emailValuesDelta != null) { - if (isContactInsert()) { - email = emailValuesDelta.getAsString(Email.DATA); - } else { - if (emailValuesDelta.mBefore != null) { - email = emailValuesDelta.mBefore.getAsString(Email.DATA); + if (isContactInsert() && emails != null) { + for (ValuesDelta valuesDelta : emails) { + if (valuesDelta.getAfter() != null + && valuesDelta.getAfter().size() != 0) { + email.append(valuesDelta.getAfter().getAsString(Email.DATA)); + email.append(","); + } + } + } else if (emails != null) { + for (ValuesDelta valuesDelta : emails) { + if (valuesDelta.mBefore != null + && valuesDelta.mBefore.size() != 0) { + email.append(valuesDelta.mBefore.getAsString(Email.DATA)); + email.append(","); } - if (emailValuesDelta.mAfter != null) { - newEmail = emailValuesDelta.mAfter.getAsString(Email.DATA); + if (valuesDelta.getAfter() != null + && valuesDelta.getAfter().size() != 0) { + newEmail.append(valuesDelta.mAfter.getAsString(Email.DATA)); + newEmail.append(","); } } } @@ -515,18 +539,18 @@ public class RawContactDelta implements Parcelable { if (name != null || number != null || anr != null || email != null) { values.put(SimContactsConstants.STR_TAG, name); values.put(SimContactsConstants.STR_NUMBER, number); - values.put(SimContactsConstants.STR_EMAILS, email); - values.put(SimContactsConstants.STR_ANRS, anr); + values.put(SimContactsConstants.STR_EMAILS, email.toString()); + values.put(SimContactsConstants.STR_ANRS, anr.toString()); } } else { values.put(SimContactsConstants.STR_TAG, name); values.put(SimContactsConstants.STR_NUMBER, number); - values.put(SimContactsConstants.STR_EMAILS, email); - values.put(SimContactsConstants.STR_ANRS, anr); + values.put(SimContactsConstants.STR_EMAILS, email.toString()); + values.put(SimContactsConstants.STR_ANRS, anr.toString()); values.put(SimContactsConstants.STR_NEW_TAG, newName); values.put(SimContactsConstants.STR_NEW_NUMBER, newNumber); - values.put(SimContactsConstants.STR_NEW_EMAILS, newEmail); - values.put(SimContactsConstants.STR_NEW_ANRS, newAnr); + values.put(SimContactsConstants.STR_NEW_EMAILS, newEmail.toString()); + values.put(SimContactsConstants.STR_NEW_ANRS, newAnr.toString()); } return values; } diff --git a/src/com/android/contacts/common/model/account/SimAccountType.java b/src/com/android/contacts/common/model/account/SimAccountType.java index 727df071..b18b4ab7 100644 --- a/src/com/android/contacts/common/model/account/SimAccountType.java +++ b/src/com/android/contacts/common/model/account/SimAccountType.java @@ -107,6 +107,8 @@ public class SimAccountType extends BaseAccountType{ kind.typeOverallMax = 1; kind.typeColumn = Email.TYPE; + kind.typeList = Lists.newArrayList(); + kind.typeList.add(buildEmailType(Email.TYPE_MOBILE)); kind.fieldList = Lists.newArrayList(); kind.fieldList.add(new EditField(Email.ADDRESS, R.string.emailLabelsGroup, FLAGS_EMAIL)); return kind; |
