summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorblong <blong@codeaurora.org>2014-07-14 10:39:28 +0800
committerRoman Birg <roman@cyngn.com>2014-09-02 14:06:13 -0700
commitb9bd6da3fb0f07237a8cb8f91be4d6c8a03a808e (patch)
tree0b59e7d141d4ab3e014927330b88feb9a1623c6f
parenta6cc76084c6cb2c84f2e914f7ef8d193f5fe34b8 (diff)
downloadpackages_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
-rw-r--r--src/com/android/contacts/common/MoreContactUtils.java34
-rw-r--r--src/com/android/contacts/common/SimContactsOperation.java20
-rw-r--r--src/com/android/contacts/common/interactions/ImportExportDialogFragment.java49
-rw-r--r--src/com/android/contacts/common/model/RawContactDelta.java72
-rw-r--r--src/com/android/contacts/common/model/account/SimAccountType.java2
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;