diff options
author | blong <blong@codeaurora.org> | 2014-07-14 10:43:51 +0800 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2014-09-02 11:53:44 -0700 |
commit | 16ec89abfa2c0cc6c78039d6c64bbf54e3531c27 (patch) | |
tree | 90f0b4ec8945e576710f28e7debeb8fad7af02f8 | |
parent | cf2a710e89aec85183946592934c68fcfcc8e9ce (diff) | |
download | packages_apps_Contacts-16ec89abfa2c0cc6c78039d6c64bbf54e3531c27.tar.gz packages_apps_Contacts-16ec89abfa2c0cc6c78039d6c64bbf54e3531c27.tar.bz2 packages_apps_Contacts-16ec89abfa2c0cc6c78039d6c64bbf54e3531c27.zip |
Add the support for multi anr and email in SIM card
- support to add multi anr and email for SIM contacts
CRs-Fixed: 696392
Change-Id: Icc1f7904c801dbd16207706b6121d73841b6c641
6 files changed, 86 insertions, 20 deletions
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index 040d7d2e9..145d42eb8 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -234,4 +234,6 @@ <string name="voicemail">Voicemail</string> <string name="select_call_title">Select call logs</string> + + <string name="invalid_number_type">Error: Number type is invalid.</string> </resources> diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java index f958ceeec..6702ee3e0 100644 --- a/src/com/android/contacts/ContactSaveService.java +++ b/src/com/android/contacts/ContactSaveService.java @@ -180,6 +180,7 @@ public class ContactSaveService extends IntentService { public static final int RESULT_NUMBER_INVALID = 9; // only for sim failure of number is valid public static final int RESULT_MEMORY_FULL_FAILURE = 11; //for memory full exception + public static final int RESULT_NUMBER_TYPE_FAILURE =12; //only for sim failure of number TYPE private final int MAX_NUM_LENGTH = 20; private final int MAX_EMAIL_LENGTH = 40; @@ -675,9 +676,27 @@ public class ContactSaveService extends IntentService { return RESULT_NO_NUMBER_AND_EMAIL; } - if ((!TextUtils.isEmpty(number) && number.length() > MAX_NUM_LENGTH) - || (!TextUtils.isEmpty(anr) && anr.length() > MAX_NUM_LENGTH)) { - return RESULT_NUMBER_ANR_FAILURE; + if (!TextUtils.isEmpty(number)) { + if (number.length() > MAX_NUM_LENGTH) { + return RESULT_NUMBER_ANR_FAILURE; + } else if (number.contains(SimContactsConstants.STR_ANRS)) { + return RESULT_NUMBER_TYPE_FAILURE; + } + } + + if (!TextUtils.isEmpty(anr)) { + String[] anrs = anr.split(","); + if (anrs != null) { + if (anrs.length > MoreContactUtils + .getOneSimAnrCount(subscription)) { + return RESULT_NUMBER_TYPE_FAILURE; + } + for (String mAnr : anrs) { + if (mAnr.length() > MAX_NUM_LENGTH) { + return RESULT_NUMBER_ANR_FAILURE; + } + } + } } if (!TextUtils.isEmpty(number) && TextUtils.isEmpty(PhoneNumberUtils @@ -685,8 +704,13 @@ public class ContactSaveService extends IntentService { return RESULT_NUMBER_INVALID; } - if (!TextUtils.isEmpty(email) && email.length() >= MAX_EMAIL_LENGTH) { - return RESULT_EMAIL_FAILURE; + if (!TextUtils.isEmpty(email)) { + String[] emails = email.split(","); + for (String mEmail : emails) { + if (mEmail != null && mEmail.length() > MAX_EMAIL_LENGTH) { + return RESULT_EMAIL_FAILURE; + } + } } if (!TextUtils.isEmpty(tag)) { diff --git a/src/com/android/contacts/detail/ContactLoaderFragment.java b/src/com/android/contacts/detail/ContactLoaderFragment.java index cc9e94600..fe9cac767 100644 --- a/src/com/android/contacts/detail/ContactLoaderFragment.java +++ b/src/com/android/contacts/detail/ContactLoaderFragment.java @@ -617,8 +617,14 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen synchronized (this) { int adnCountInSimContact = 1; int anrCountInSimContact = 1; + int emailCountInSimContact = 0; if (!MoreContactUtils.canSaveAnr(sub)) { anrCountInSimContact = 0; + } else { + anrCountInSimContact = MoreContactUtils.getOneSimAnrCount(sub); + } + if (MoreContactUtils.canSaveEmail(sub)) { + emailCountInSimContact = MoreContactUtils.getOneSimEmailCount(sub); } int totalEmptyAdn = MoreContactUtils.getSimFreeCount(mContext, sub); int totalEmptyAnr = MoreContactUtils.getSpareAnrCount(sub); @@ -672,7 +678,10 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen int nameCount = (strName != null && !strName.equals("")) ? 1 : 0; int groupNumCount = (arrayNumber.size() % numEntitySize) != 0 ? (arrayNumber .size() / numEntitySize + 1) : (arrayNumber.size() / numEntitySize); - int groupEmailCount = arrayEmail.size(); + int groupEmailCount = emailCountInSimContact == 0 ? 0 + : ((arrayEmail.size() % emailCountInSimContact) != 0 ? (arrayEmail + .size() / emailCountInSimContact + 1) + : (arrayEmail.size() / emailCountInSimContact)); int groupCount = Math.max(groupEmailCount, Math.max(nameCount, groupNumCount)); @@ -696,7 +705,13 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen for (int i = 0; i < groupEmailCount; i++) { value = results.get(i); - value.putEmail(arrayEmail.get(i)); + ArrayList<String> emailItem = new ArrayList<String>(); + for (int j = 0; j < emailCountInSimContact; j++) { + if ((i * emailCountInSimContact + j) < arrayEmail.size()) { + emailItem.add(arrayEmail.get(i * emailCountInSimContact + j)); + } + } + value.putEmailList(emailItem); } ArrayList<String> emptyList = new ArrayList<String>(); @@ -708,7 +723,6 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen } //get phone number from UsimEntity,then insert to SIM card - String strEmail = null; for (int i = 0; i < groupCount; i++) { value = results.get(i); if (value.containsNumber()) { @@ -718,14 +732,33 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen } if (value.containsEmail()) { - strEmail = (String) value.getEmail(); + arrayEmail = (ArrayList<String>) value.getEmailList(); } else { - strEmail = null; + arrayEmail = emptyList; } String strNum = arrayNumber.size() > 0 ? arrayNumber.get(0) : null; - String strAnrNum = arrayNumber.size() > 1 ? arrayNumber.get(1) : null; + StringBuilder strAnrNum = new StringBuilder(); + for (int j = 1; j < arrayNumber.size(); j++) { + String s = arrayNumber.get(j); + if (s.length() > MoreContactUtils.MAX_LENGTH_NUMBER_IN_SIM) { + s = s.substring( + 0, MoreContactUtils.MAX_LENGTH_NUMBER_IN_SIM); + } + strAnrNum.append(s); + strAnrNum.append(","); + } + StringBuilder strEmail = new StringBuilder(); + for (int j = 0; j < arrayEmail.size(); j++) { + String s = arrayEmail.get(j); + if (s.length() > MoreContactUtils.MAX_LENGTH_EMAIL_IN_SIM) { + s = s.substring( + 0, MoreContactUtils.MAX_LENGTH_EMAIL_IN_SIM); + } + strEmail.append(s); + strEmail.append(","); + } itemUri = MoreContactUtils.insertToCard(mContext, strName, strNum, - strEmail, strAnrNum, sub); + strEmail.toString(), strAnrNum.toString(), sub); } if (itemUri != null) { msg.what = MSG_COPY_DONE; @@ -877,18 +910,18 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen //supply phone number and email which could stored in one ADN class UsimEntity { private ArrayList<String> mNumberList = new ArrayList<String>(); - private String mEmail = null; + private ArrayList<String> mEmailList = new ArrayList<String>(); - public String getEmail() { - return mEmail; + public ArrayList<String> getEmailList() { + return mEmailList; } public ArrayList<String> getNumberList() { return mNumberList; } - public void putEmail(String email) { - mEmail = email; + public void putEmailList(ArrayList<String> list) { + mEmailList = list; } public void putNumberList(ArrayList<String> list) { @@ -896,7 +929,7 @@ public class ContactLoaderFragment extends Fragment implements FragmentKeyListen } public boolean containsEmail() { - return mEmail != null; + return !mEmailList.isEmpty(); } public boolean containsNumber() { diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java index f5e05295a..adf92f4d6 100644 --- a/src/com/android/contacts/editor/ContactEditorFragment.java +++ b/src/com/android/contacts/editor/ContactEditorFragment.java @@ -1320,7 +1320,11 @@ public class ContactEditorFragment extends Fragment implements } else if (result == ContactSaveService.RESULT_MEMORY_FULL_FAILURE) { Toast.makeText(mContext, R.string.memory_card_full, Toast.LENGTH_SHORT) .show(); - } else { + } else if(result == ContactSaveService.RESULT_NUMBER_TYPE_FAILURE) { + Toast.makeText(mContext, R.string.invalid_number_type, Toast.LENGTH_SHORT) + .show(); + } + else { Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG) .show(); } diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java index 261286e47..532e49d05 100644 --- a/src/com/android/contacts/editor/KindSectionView.java +++ b/src/com/android/contacts/editor/KindSectionView.java @@ -118,6 +118,7 @@ public class KindSectionView extends LinearLayout implements EditorListener { } else { // Otherwise it's okay to delete this {@link Editor} editor.deleteEditor(); + updateAddFooterVisible(true); } } diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java index 8bf1a25b4..ebd29e5e3 100644 --- a/src/com/android/contacts/editor/RawContactEditorView.java +++ b/src/com/android/contacts/editor/RawContactEditorView.java @@ -359,6 +359,8 @@ public class RawContactEditorView extends BaseRawContactEditorView { } if (!MoreContactUtils.canSaveEmail(sub)) { mFields.removeView(section); + } else { + kind.typeOverallMax = MoreContactUtils.getOneSimEmailCount(sub); } } } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType) && kind.fieldList != null) { @@ -381,7 +383,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { kind.typeList.remove(typeHome); } } else { - kind.typeOverallMax = 2; + kind.typeOverallMax = MoreContactUtils.getOneSimAnrCount(sub) +1; if (null != kind.typeList && !kind.typeList.contains(typeHome)) { // When the sim card is 3g the interface should // add the TYPE_HOME number view. |