package com.android.contacts.ui;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.Inflater;
import com.android.contacts.ContactsListActivity;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.contacts.SimInitReceiver;
import com.android.internal.telephony.AdnRecord;
import com.android.internal.telephony.EncodeException;
import com.android.internal.telephony.GsmAlphabet;
import com.android.internal.telephony.IccConstants;
import com.android.internal.telephony.PhoneFactory;
import android.telephony.TelephonyManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.app.ListActivity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Selection;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.View;
import android.widget.TextView;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.PowerManager;
import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.RawContacts;
import android.content.ContentValues;
import android.widget.Toast;
import android.util.Log;
import com.android.contacts.ui.SimUtils;
import com.android.internal.telephony.IIccPhoneBook;
//added for dual sim
import android.accounts.Account;
import android.widget.ImageView;
import com.android.contacts.util.CommonUtil;
import com.android.contacts.util.Config;
import com.android.contacts.util.DialerKeyListener;
//import android.os.FM;
public class SimEditContactActivity extends Activity implements OnClickListener{
private EditText mNameText;
// private EditText mNumberText;
private EditText mNumberMoblieText;
private EditText mNumberHomeText;
private EditText mNumberWorkText;
private EditText mNumberOtherText;
private EditText mEmailText;
private Button mBtnDone;
private Button mBtnDiscard;
String mTag;
// String mNumber;
String mNumberMobile = "";
String mNumberphoneHome = "";
String mNumberWork = "";
String mNumberOther = "";
String mEmail = "";
String mSimAnr ;
String mSimNewAnr;
String mSimIndex;
int anrNum = 0 ;
private ArrayList<String> mData;
private ArrayList<String> oldData; //modify by dory.zheng for contacts is replace
QueryHandler mQueryHandler = null;
// Dialog IDs
final static int DELETE_CONFIRMATION_DIALOG = 2;
// Menu item IDs
public static final int MENU_ITEM_DELETE = 1;
public static final int MENU_ITEM_INSERT = 2;
private static final int MODE_EDIT = 1;
private static final int MODE_INSERT = 2;
private static final String TAG = "SimEditContactActivity";
private int mMode=MODE_EDIT;
public static final String SIM_ADDRESS = "phone_id";
public static final String SIM1_ADDRESS = "0";
public static final String SIM_EMAIL = "email";
public static final int LIMIT_LENGTH = 20;
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID, // 0
Contacts.DISPLAY_NAME_PRIMARY, // 1
Contacts.DISPLAY_NAME_ALTERNATIVE, // 2
Contacts.SORT_KEY_PRIMARY, // 3
Contacts.STARRED, // 4
Contacts.TIMES_CONTACTED, // 5
Contacts.CONTACT_PRESENCE, // 6
Contacts.PHOTO_ID, // 7
Contacts.LOOKUP_KEY, // 8
Contacts.PHONETIC_NAME, // 9
Contacts.HAS_PHONE_NUMBER, // 10
RawContacts.SIM_INDEX, // 11
};
//added for dual sim
private String mAccountName = Account.SIM1_ACCOUNT_NAME;
protected class EncodeLengthFilter implements InputFilter{
private int mMax = 0;
private int mMaxChinese = 0;
private EncodeLengthFilter(){};
public EncodeLengthFilter(int max){
mMax = max;
mMaxChinese = max - 2 ;
};
private byte[] getbytes(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend){
String destString = dest.toString();
if(isChinese(source.toString())){
Log.d(TAG, "source has chinese sourceString = " + source.toString() );
mMax = mMaxChinese ;
}
StringBuilder allChares = new StringBuilder()
.append(destString.subSequence(0, dend == dstart ? dstart : dstart + 1))
.append(source.subSequence(start, end))
.append(destString.subSequence(dend == dstart ? dend : dend - 1, destString.length()));
byte[] bytes = null;
try {
bytes = GsmAlphabet
.isAsciiStringToGsm8BitUnpackedField(allChares.toString());
} catch (EncodeException ex) {
try {
bytes = allChares.toString().getBytes("utf-16be");
} catch (java.io.UnsupportedEncodingException ex2) {
Log.e(TAG, allChares +
" convert byte excepiton");
}
}
return bytes;
}
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
byte[] bytes = getbytes(source, start, end, dest, dstart, dend);
CharSequence replace = null;
boolean isChange = false;
while (bytes != null && bytes.length > mMax && end > start){
isChange = true;
end--;
bytes = getbytes(source, start, end, dest, dstart, dend);
}
if (isChange && end >= start){
replace = source.subSequence(start, end);
}
return replace;
}
}
//added for cq NEWMS00191999 begin
// GENERAL_PUNCTUATION for chinese "
// CJK_SYMBOLS_AND_PUNCTUATION for chinese .
// HALFWIDTH_AND_FULLWIDTH_FORMS for chinese ,
private static final boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
public static final boolean isChinese(String strName) {
char[] ch = strName.toCharArray();
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
if (isChinese(c)) {
return true;
}
}
return false;
}
//added for cq NEWMS00191999 end
protected class PhoneNumberLengthFilter implements InputFilter{
private int mNoPlusMax = 0;
private PhoneNumberLengthFilter(){};
public PhoneNumberLengthFilter(int noPlusMax){
mNoPlusMax = noPlusMax;
};
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
int keep = mNoPlusMax - (dest.length() - (dend - dstart));
int _end = start + keep;
String dest_before = dest.toString().substring(0, dend == dstart ? dstart : dstart + 1);
String dest_after = dest.toString().substring(dend == dstart ? dend : dend - 1);
CharSequence input = source.subSequence(start, _end < end ? _end + 1 : end);
boolean sourceHasPlus = input.toString().contains("+");
boolean destHasPlus = dest_before.toString().contains("+") || dest_after.toString().contains("+");
boolean hasplus = sourceHasPlus || destHasPlus;
if (hasplus) {
return input;
} else if (keep <= 0){
return "";
} else if (keep >= end - start) {
return null;
} else {
return source.subSequence(start, _end);
}
}
}
// private ProgressDialog mProgressDialog;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.v(TAG, "onCreate");
mMode = getIntent().getIntExtra("mode", MODE_EDIT);
if(Config.isMSMS){
mAccountName = getIntent().getStringExtra("account_name");
}
int mFreeCapacity = getFreeCapacity(SimEditContactActivity.this);
if(mFreeCapacity < 1 && mMode == MODE_INSERT) {
//added for dual sim
IIccPhoneBook iccIpb;
//NEWMS00170745
if (mFreeCapacity == -1) {
Toast.makeText(SimEditContactActivity.this, R.string.toast_sim_failed, Toast.LENGTH_SHORT).show();
} else {
if(Config.isMSMS){
if(Account.SIM1_ACCOUNT_NAME.equals(mAccountName)){
Toast.makeText(SimEditContactActivity.this, R.string.toast_sim1_overflow, Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(SimEditContactActivity.this, R.string.toast_sim2_overflow, Toast.LENGTH_SHORT).show();
}
}
else{
Toast.makeText(SimEditContactActivity.this, R.string.toast_sim_overflow, Toast.LENGTH_SHORT).show();
}
}
finish();
return;
}
mTag = getIntent().getStringExtra("tag");
// mNumber = getIntent().getStringExtra("number");
mSimIndex = getIntent().getStringExtra("sim_index");
mData = getIntent().getExtras().getStringArrayList("numbers");
oldData = getIntent().getExtras().getStringArrayList("oldData"); //modify by dory.zheng for contacts is replace
setContentView(R.layout.sim_act_edit); //before is
mNameText = (EditText)this.findViewById(R.id.name);
mNumberHomeText = (EditText)this.findViewById(R.id.number1);
// mNumberMoblieText = (EditText)this.findViewById(R.id.number1);
ImageView accountImg = (ImageView)this.findViewById(R.id.account_img);
TextView accountTitle = (TextView)this.findViewById(R.id.account_title);
//added for dual sim
IIccPhoneBook iccIpb;
if(Config.isMSMS){
Log.i(TAG, "onCreate, mAccountName:"+mAccountName);
if(Account.SIM1_ACCOUNT_NAME.equals(mAccountName)){
iccIpb= IIccPhoneBook.Stub.asInterface(
ServiceManager.getService(PhoneFactory.getServiceName("simphonebook", 0)));
accountImg.setImageResource(R.drawable.ic_menu_add_sim1);
accountTitle.setText(R.string.account_sim1);
}
else{
iccIpb= IIccPhoneBook.Stub.asInterface(
ServiceManager.getService(PhoneFactory.getServiceName("simphonebook", 1)));
accountImg.setImageResource(R.drawable.ic_menu_add_sim2);
accountTitle.setText(R.string.account_sim2);
}
}
else{
iccIpb= IIccPhoneBook.Stub.asInterface(
ServiceManager.getService("simphonebook"));
}
mNumberMoblieText = (EditText)this.findViewById(R.id.number2);
// mNumberHomeText = (EditText)this.findViewById(R.id.number2);
mNumberWorkText = (EditText)this.findViewById(R.id.number3);
mNumberOtherText = (EditText)this.findViewById(R.id.number4);
mEmailText = (EditText)this.findViewById(R.id.email);
mNumberHomeText.setKeyListener(DialerKeyListener.getInstance());
mNumberMoblieText.setKeyListener(DialerKeyListener.getInstance());
mNumberWorkText.setKeyListener(DialerKeyListener.getInstance());
mNumberOtherText.setKeyListener(DialerKeyListener.getInstance());
final Intent intent = getIntent();
int emailNum = 0 ;
int emailSize = 0;
int[] adnRecords = new int[]{};
try {
anrNum = iccIpb.getAnrNum();
emailNum = iccIpb.getEmailNum();
adnRecords = iccIpb.getAdnRecordsSize(IccConstants.EF_ADN);
int[] size = iccIpb.getEmailRecordsSize();
if (size != null) {
emailSize = size[0] - 2;
}
} catch (RemoteException ex) {
Log.v(TAG,"excetpion");
} catch (SecurityException ex) {
Log.v(TAG,"excetpion");
}
final int nameSize = adnRecords[0] - 14;
Log.d(TAG,"anrNum------------"+anrNum+"---emailNum---------"+emailNum + "-------nameSize-----"+nameSize);
// modify by dory.zheng for NEWMS00123348 at 21-09 begin
if(anrNum == 0){
TextView phoneNumText = (TextView)findViewById(R.id.phonenumber);
phoneNumText.setText(R.string.phone_number);
mNumberHomeText.setHint(R.string.phone_number);
}
// modify by dory.zheng for NEWMS00123348 at 21-09 end
if (anrNum > 0) { //1
findViewById(R.id.llnumber2).setVisibility(View.VISIBLE);
if (anrNum > 1) { //2
findViewById(R.id.llnumber3).setVisibility(View.VISIBLE);
if (anrNum > 2) { //
findViewById(R.id.llnumber4).setVisibility(View.VISIBLE);
}
}
}
if(emailNum != 0){
findViewById(R.id.llemail).setVisibility(View.VISIBLE);
}
mNameText.setFilters(new InputFilter[]{
new EncodeLengthFilter(nameSize)
});
mNumberMoblieText.setFilters(new InputFilter[]{
new PhoneNumberLengthFilter(LIMIT_LENGTH)
});
mNumberHomeText.setFilters(new InputFilter[]{
new PhoneNumberLengthFilter(LIMIT_LENGTH)
});
mNumberWorkText.setFilters(new InputFilter[]{
new PhoneNumberLengthFilter(LIMIT_LENGTH)
});
mNumberOtherText.setFilters(new InputFilter[]{
new PhoneNumberLengthFilter(LIMIT_LENGTH)
});
mEmailText.setFilters(new InputFilter[]{
new EncodeLengthFilter(emailSize)
});
mNameText.setText(mTag);
if (mTag != null) {
int editTextLength = mNameText.getText().length();
mNameText.setSelection(editTextLength);
}
if (mData != null) {
mNumberphoneHome = mData.get(0);
if (!TextUtils.isEmpty(mNumberphoneHome)) {
mNumberphoneHome = mNumberphoneHome.length() > LIMIT_LENGTH ? mNumberphoneHome
.substring(0, LIMIT_LENGTH) : mNumberphoneHome;
}
mNumberMobile = mData.get(1);
if (!TextUtils.isEmpty(mNumberMobile)) {
mNumberMobile = mNumberMobile.length() > LIMIT_LENGTH ? mNumberMobile.substring(0,
LIMIT_LENGTH) : mNumberMobile;
}
mNumberWork = mData.get(2);
if (!TextUtils.isEmpty(mNumberWork)) {
mNumberWork = mNumberWork.length() > LIMIT_LENGTH ? mNumberWork.substring(0,
LIMIT_LENGTH) : mNumberWork;
}
mNumberOther = mData.get(3);
if (!TextUtils.isEmpty(mNumberOther)) {
mNumberOther = mNumberOther.length() > LIMIT_LENGTH ? mNumberOther.substring(0,
LIMIT_LENGTH) : mNumberOther;
}
mEmail = mData.get(4);
}
String email = intent.getExtras().getString(SIM_EMAIL);
if(!TextUtils.isEmpty(email)){
mEmail = email;
}
//modify by dory.zheng for huawei call phone can't save to sim begin
String number = getIntent().getStringExtra("number");
number = ContactsUtils.CommaAndSemicolonTopAndw(number);
if(!TextUtils.isEmpty(number)){
number = number.length() > LIMIT_LENGTH ? number.substring(0,
LIMIT_LENGTH) : number;
mNumberHomeText.setText(number);
mNumberHomeText.setSelection(number.length());
}else{
mNumberphoneHome = ContactsUtils.CommaAndSemicolonTopAndw(mNumberphoneHome);
mNumberMobile = ContactsUtils.CommaAndSemicolonTopAndw(mNumberMobile);
mNumberWork = ContactsUtils.CommaAndSemicolonTopAndw(mNumberWork);
mNumberOther = ContactsUtils.CommaAndSemicolonTopAndw(mNumberOther);
mNumberHomeText.setText(mNumberphoneHome);
mNumberHomeText.setSelection(mNumberphoneHome != null
? mNumberphoneHome.length() : 0);
mNumberMoblieText.setText(mNumberMobile);
mNumberMoblieText.setSelection(mNumberMobile != null
? mNumberMobile.length() : 0);
mNumberWorkText.setText(mNumberWork);
mNumberWorkText.setSelection(mNumberWork != null
? mNumberWork.length() : 0);
mNumberOtherText.setText(mNumberOther);
mNumberOtherText.setSelection(mNumberOther != null
? mNumberOther.length() : 0);
}
//added by dengjing for cr 13915
boolean isUsim = false;
if(Config.isMSMS){
int phoneId = 0;
if(Account.SIM2_ACCOUNT_NAME.equals(mAccountName))
phoneId = 1;
final TelephonyManager t = (TelephonyManager) getSystemService(PhoneFactory
.getServiceName(Context.TELEPHONY_SERVICE, phoneId));
isUsim = t.isUsimCard();
Log.d(TAG, "For dual sim isUsimCard = " + isUsim);
}else{
final TelephonyManager t = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
isUsim = t.isUsimCard();
Log.d(TAG, "isUsimCard = " + isUsim);
}
if(isUsim){
if(!TextUtils.isEmpty(mEmail)){
mEmailText.setText(mEmail);
mEmailText.setSelection(mEmail != null
? mEmail.length() : 0);
}
}
//modify by dory.zheng for huawei call phone can't save to sim end
mBtnDone = (Button)this.findViewById(R.id.btn_done);
mBtnDiscard = (Button)this.findViewById(R.id.btn_discard);
mBtnDone.setOnClickListener(this);
mBtnDiscard.setOnClickListener(this);
mQueryHandler = new QueryHandler(getContentResolver());
Log.v(TAG, "onCreate end");
}
@Override
protected void onPause() {
super.onPause();
CommonUtil.hideSoftKeyboard(this);
}
boolean saving = false;
public void onClick(View v) {
int btnId = v.getId();
switch(btnId) {
case R.id.btn_done:
if(saving){
break;
}
try{
saving = true;
update();
// saving = true; //modify by dory.zheng for NEWMS00144355
}catch (Exception e){
e.printStackTrace();
}
break;
case R.id.btn_discard:
try{
finish();
}catch (Exception e){
e.printStackTrace();
}
}
}
protected Uri getSimUri() {
return Uri.withAppendedPath(ContactsContract.AUTHORITY_URI, "sim_contacts");
}
@Override
public void onBackPressed() {
saving = true;
if (!update()) {
finish();
}
}
boolean update()
{
String newTag = mNameText.getText().toString(); //yeezone:jinwei.trim();
String newNumberphoneHome = mNumberHomeText.getText().toString();
String newNumberMobile = mNumberMoblieText.getText().toString(); //yeezone:jinwei.trim();
String newNumberWork = mNumberWorkText.getText().toString();
String newNumberOther = mNumberOtherText.getText().toString();
String newEmail = mEmailText.getText().toString();
//modify by dory.zheng for contacts is replace begin
if (oldData != null) {
mNumberphoneHome = oldData.get(0);
mNumberMobile = oldData.get(1);
mNumberWork = oldData.get(2);
mNumberOther = oldData.get(3);
mEmail = oldData.get(4);
}
//modify by dory.zheng for contacts is replace end
String mAnr = mNumberMobile+AdnRecord.ANR_SPLIT_FLG+mNumberWork+AdnRecord.ANR_SPLIT_FLG+mNumberOther;
String newAnr = newNumberMobile+AdnRecord.ANR_SPLIT_FLG+newNumberWork+AdnRecord.ANR_SPLIT_FLG+newNumberOther;
// String mAnr = mNumberphoneHome+";"+mNumberWork+";"+mNumberOther;
// String newAnr = newNumberphoneHome+";"+newNumberWork+";"+newNumberOther;
if (anrNum > 0) { //1
mSimAnr = mNumberMobile;
mSimNewAnr = newNumberMobile;
// mSimAnr = mNumberphoneHome;
// mSimNewAnr = newNumberphoneHome;
if (anrNum > 1) { //2
mSimAnr += AdnRecord.ANR_SPLIT_FLG + mNumberWork;
mSimNewAnr += AdnRecord.ANR_SPLIT_FLG + newNumberWork;
// mSimAnr = mNumberphoneHome + ";" + mNumberWork;
// mSimNewAnr = newNumberphoneHome + ";" + newNumberWork;
if (anrNum > 2) { //
mSimAnr = mAnr;
mSimNewAnr = newAnr;
}
}
}
// Log.d(TAG, "mTag="+mTag+";mNumberphoneHome="+mNumberphoneHome+";mNumberMobile="+mNumberMobile
// +";mNumberWork="+mNumberWork+";mNumberOther="+mNumberOther+";mEmail="+mEmail);
// Log.d(TAG, "mSimAnr="+mSimAnr);
// Log.d(TAG, "mSimNewAnr="+mSimNewAnr);
// Log.d(TAG, "newTag="+newTag+";newNumberphoneHome="+newNumberphoneHome+";newNumberMobile="+newNumberMobile+
// ";newNumberWork="+newNumberWork+";newNumberOther="+newNumberOther+";newEmail="+newEmail);
if((newTag !=null && !newTag.equals(""))
||(newNumberphoneHome !=null && !newNumberphoneHome.equals(""))
||(newNumberMobile !=null && !newNumberMobile.equals(""))
||(newNumberWork !=null && !newNumberWork.equals(""))
||(newNumberOther !=null && !newNumberOther.equals(""))
||(newEmail !=null && !newEmail.equals(""))){
}else{
saving = false; //modify by dory.zheng for NEWMS00144355
Toast.makeText(this, R.string.contacts_is_null, Toast.LENGTH_SHORT).show();
return false;
}
if(!Config.isMSMS){
// check phone number format
if ((!TextUtils.isEmpty(newNumberphoneHome) && !CommonUtil.isPhoneNumber(newNumberphoneHome))
|| (!TextUtils.isEmpty(newNumberMobile) && !CommonUtil.isPhoneNumber(newNumberMobile))
|| (!TextUtils.isEmpty(newNumberWork) && !CommonUtil.isPhoneNumber(newNumberWork))
|| (!TextUtils.isEmpty(newNumberOther) && !CommonUtil.isPhoneNumber(newNumberOther))) {
saving = false;
Toast.makeText(this, R.string.contact_invalid_phone_number_error_toast,
Toast.LENGTH_SHORT).show();
return false;
}
// check email format
if (!TextUtils.isEmpty(newEmail) && !CommonUtil.isEmailAddress(newEmail)) {
saving = false;
Toast.makeText(this, R.string.contact_invalid_email_error_toast,
Toast.LENGTH_SHORT).show();
return false;
}
}
if(mTag == null){
mTag = "";
}
if(mEmail == null){
mEmail = "";
}
if(newTag == null){
newTag = "";
}
if(newEmail == null){
newEmail = "";
}
ContentValues map = new ContentValues();
//added for dual sim
if(Config.isMSMS){
map.put("account_name", mAccountName);
map.put("account_type", Account.SIM_ACCOUNT_TYPE);
}
Log.d(TAG,"update or insert, newAnr:"+newAnr+", mSimNewAnr:"+mSimNewAnr);
newNumberphoneHome = ContactsUtils.pAndwToCommaAndSemicolon(newNumberphoneHome);
newAnr = ContactsUtils.CommaAndSemicolonTopAndw(newAnr);
mNumberphoneHome = ContactsUtils.pAndwToCommaAndSemicolon(mNumberphoneHome);
mAnr = ContactsUtils.CommaAndSemicolonTopAndw(mAnr);
if (mMode==MODE_EDIT) {
//old data
map.put("tag", mTag);
map.put("number", mNumberphoneHome);
map.put("anr",mAnr);
map.put("email", mEmail);
// new data
map.put("newTag", newTag);
map.put("newNumber", newNumberphoneHome);
map.put("newAnr", newAnr);
map.put("newEmail", newEmail);
map.put("sim_index", mSimIndex);
// map.put("newAnr", mSimNewAnr);
Intent intent=new Intent();
intent.putExtra("sim_index", mSimIndex);
intent.putExtra("tag", newTag);
intent.putExtra("number", newNumberphoneHome);
// intent.putExtra("number", newNumberMobile);
mQueryHandler.startUpdate(0, intent, getSimUri(), map, null, null);
}else if (mMode==MODE_INSERT) {
map.put("newTag", newTag);
map.put("newNumber", newNumberphoneHome);
map.put("newAnr", newAnr);
map.put("newEmail", newEmail);
mQueryHandler.startInsert(0, null, getSimUri(), map);
}
return true;
}
//<UH, 2010-04-17, Yoyo yang, Add "current edited contact delete function in SIM card"/>
/**
* no use the method
*/
private DialogInterface.OnClickListener mDeleteContactDialogListener =
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int button) {
String[] selectionArgs = { mSimIndex };
/* try {
mProgressDialog = ProgressDialog.show(SimEditContactActivity.this, null, getText(R.string.on_progress));
} catch (Exception e) {
mProgressDialog.dismiss();
}*/
mQueryHandler.startDelete(0, null, getSimUri(), "sim_index=?", selectionArgs);
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DELETE_CONFIRMATION_DIALOG:
return new AlertDialog.Builder(SimEditContactActivity.this)
.setTitle(R.string.deleteConfirmation_title)
.setIcon(android.R.drawable.ic_dialog_alert)
.setMessage(R.string.deleteConfirmation)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok, mDeleteContactDialogListener)
.setCancelable(false)
.create();
}
return super.onCreateDialog(id);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_newContact)
// .setIcon(android.R.drawable.ic_menu_add);
// menu.add(0, MENU_ITEM_DELETE, 0, R.string.menu_deleteContact)
// .setIcon(android.R.drawable.ic_menu_delete);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_DELETE:
// Get confirmation
//modify by dory.zheng for NEWMS00138007 begin
if(!SimInitReceiver.isDelete){
showDialog(DELETE_CONFIRMATION_DIALOG);
}else{
Toast.makeText(SimEditContactActivity.this, R.string.deleting, Toast.LENGTH_SHORT).show();
}
//modify by dory.zheng for NEWMS00138007 end
return true;
case MENU_ITEM_INSERT:
// Get confirmation
mNameText.setText("");
mNumberHomeText.setText("");
mNumberMoblieText.setText("");
mNumberWorkText.setText("");
mNumberOtherText.setText("");
mEmailText.setText("");
mMode=MODE_INSERT;
return true;
}
return false;
}
private class QueryHandler extends AsyncQueryHandler {
public QueryHandler(ContentResolver cr) {
super(cr);
}
@Override
protected void onUpdateComplete(int token, Object cookie, int result) {
// mProgressDialog.dismiss();
if ( result > 0) {
Toast.makeText(SimEditContactActivity.this, R.string.contactSavedToast, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SimEditContactActivity.this, R.string.contactSavedErrorToast, Toast.LENGTH_SHORT).show();
}
setResult(Activity.RESULT_OK, (Intent)cookie);
finish();
}
@Override
protected void onInsertComplete(int token, Object cookie, Uri uri) {
if (null == uri) {
saving = false;
Toast.makeText(SimEditContactActivity.this,
R.string.save_contact_faliue, Toast.LENGTH_LONG)
.show();
return;
}
// mProgressDialog.dismiss();
// Intent intent = new Intent();
// intent.setClassName("com.android.contacts", "com.android.contacts.ContactsListActivity");
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startActivity(intent);
Toast.makeText(SimEditContactActivity.this, R.string.add_contact_success,
Toast.LENGTH_LONG).show();
//for bugzilla 13896, the uri got by single is different from dual sim
if(Config.isMSMS){
final Intent resultIntent = new Intent();
Uri lookupUri = RawContacts.getContactLookupUri(getContentResolver(),uri);
resultIntent.setData(lookupUri);
setResult(RESULT_OK, resultIntent);
}
finish();
}
@Override
protected void onDeleteComplete(int token, Object cookie, int result) {
// mProgressDialog.dismiss();
finish();
}
}
private int getFreeCapacity(Context context) {
int total = getSimCardLength();
//NEWMS00170745
if (total == 0 || total == -1)
return -1;
int ContactorNum = getSimContactorNum(context);
int remain = total - ContactorNum;
Log.d(TAG, mAccountName+"'s Free Capacity is "+remain);
return remain < 0 ? -1 : remain;
}
/**
* Get capacity of SIM card
*
* @param phoneId
* @return
*/
public int getSimCardLength() {
int size = -1;
try {
IIccPhoneBook iccIpb = getIccPhoneBook();
if (iccIpb != null) {
int[] sizes = iccIpb.getAdnRecordsSize(IccConstants.EF_ADN);
if(sizes != null){
if (sizes.length == 3){
size = sizes[2];
} else if(sizes.length == 2){
size = sizes[1] / sizes[0];
}
}
}
} catch (RemoteException ex) {
Log.d(TAG, "RemoteException: " + ex.toString());
} catch (SecurityException ex) {
Log.d(TAG, "SecurityException: " + ex.toString());
}
return size;
}
private IIccPhoneBook getIccPhoneBook(){
//added for dual sim
IIccPhoneBook iccIpb;
if(Config.isMSMS){
if(Account.SIM1_ACCOUNT_NAME.equals(mAccountName)){
iccIpb= IIccPhoneBook.Stub.asInterface(
ServiceManager.getService(PhoneFactory.getServiceName("simphonebook", 0)));
}
else{
iccIpb= IIccPhoneBook.Stub.asInterface(
ServiceManager.getService(PhoneFactory.getServiceName("simphonebook", 1)));
}
}
else{
iccIpb= IIccPhoneBook.Stub.asInterface(
ServiceManager.getService("simphonebook"));
}
return iccIpb;
}
/**
* Get number of contactor in Sim card
*
* @param context
* @param phoneId
* @return
*/
private int getSimContactorNum(Context context) {
Cursor cur = null;
//String simUri = "content://icc/adn";
Uri simUri = SimUtils.SIM1_URI;
//added for dual sim
String selection = null;
if(Config.isMSMS){
if(Account.SIM2_ACCOUNT_NAME.equals(mAccountName))
// simUri = "content://icc1/adn";
simUri = SimUtils.SIM2_URI;
}
else{
selection = "sim_index<>0 ";
}
try {
if(Config.isMSMS){
cur = context.getContentResolver().query(simUri, null, null, null, null);
Log.d(TAG, "mAccountname = " + mAccountName + "maccount uri = " + simUri);
}else {
cur = context.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, selection, null, null);
}
Log.d(TAG, "cur.getCount = " + (cur == null ? "cursor is null" : cur.getCount()));
return null == cur ? -1 : cur.getCount();
} finally {
if(cur != null){
cur.close();
cur = null;
}
}
}
}