From 00c1ee4586933bc65971f23c1e135ceb57f5abbd Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 9 Nov 2012 10:03:17 +0100 Subject: [PATCH] Improved in-app contact editor + updated liblinphone --- res/layout/edit_contact.xml | 33 ++++++-- res/values-FR/strings.xml | 2 + res/values/strings.xml | 2 + src/org/linphone/EditContactFragment.java | 96 ++++++++++++++++++----- submodules/linphone | 2 +- 5 files changed, 108 insertions(+), 27 deletions(-) diff --git a/res/layout/edit_contact.xml b/res/layout/edit_contact.xml index a2b08b0e9..b433120c7 100644 --- a/res/layout/edit_contact.xml +++ b/res/layout/edit_contact.xml @@ -66,15 +66,34 @@ android:layout_height="wrap_content" linphone:picture="@drawable/unknown_small" /> - + android:orientation="vertical"> + + + + + + diff --git a/res/values-FR/strings.xml b/res/values-FR/strings.xml index 6a60d9ce6..9bb9339cd 100644 --- a/res/values-FR/strings.xml +++ b/res/values-FR/strings.xml @@ -344,5 +344,7 @@ Supprimer contact Adresse SIP Numéro de téléphone + Prénom + Nom diff --git a/res/values/strings.xml b/res/values/strings.xml index e5acbd86d..f0460593a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -391,4 +391,6 @@ Delete contact SIP address Phone number + First name + Last name diff --git a/src/org/linphone/EditContactFragment.java b/src/org/linphone/EditContactFragment.java index 33a02659b..c23d363c0 100644 --- a/src/org/linphone/EditContactFragment.java +++ b/src/org/linphone/EditContactFragment.java @@ -28,7 +28,7 @@ import android.widget.TextView; public class EditContactFragment extends Fragment { private View view; private TextView ok; - private EditText displayName; + private EditText firstName, lastName; private LayoutInflater inflater; private View deleteContact; @@ -86,11 +86,31 @@ public class EditContactFragment extends Fragment { } }); - displayName = (EditText) view.findViewById(R.id.contactName); - displayName.addTextChangedListener(new TextWatcher() { + lastName = (EditText) view.findViewById(R.id.contactLastName); + lastName.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - if (displayName.getText().length() > 0) { + if (lastName.getText().length() > 0) { + ok.setEnabled(true); + } else { + ok.setEnabled(false); + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + + firstName = (EditText) view.findViewById(R.id.contactFirstName); + firstName.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (firstName.getText().length() > 0) { ok.setEnabled(true); } else { ok.setEnabled(false); @@ -107,7 +127,14 @@ public class EditContactFragment extends Fragment { }); if (!isNewContact) { - displayName.setText(contact.getName()); + String fn = findContactFirstName(String.valueOf(contactID)); + String ln = findContactLastName(String.valueOf(contactID)); + if (fn != null || ln != null) { + firstName.setText(fn); + lastName.setText(ln); + } else { + lastName.setText(contact.getName()); + } } AvatarWithShadow contactPicture = (AvatarWithShadow) view.findViewById(R.id.contactPicture); @@ -205,6 +232,7 @@ public class EditContactFragment extends Fragment { final NewOrUpdatedNumberOrAddress nounoa = new NewOrUpdatedNumberOrAddress(isSip); final EditText noa = (EditText) view.findViewById(R.id.numoraddr); + numbersAndAddresses.add(nounoa); noa.setHint(isSip ? getString(R.string.sip_address) : getString(R.string.phone_number)); noa.requestFocus(); noa.addTextChangedListener(new TextWatcher() { @@ -227,7 +255,6 @@ public class EditContactFragment extends Fragment { @Override public void onClick(View v) { // Add a line, and change add button for a delete button - numbersAndAddresses.add(nounoa); add.setImageResource(R.drawable.list_delete); add.setOnClickListener(new OnClickListener() { @Override @@ -268,40 +295,38 @@ public class EditContactFragment extends Fragment { .withValue(RawContacts.ACCOUNT_TYPE, null) .withValue(RawContacts.ACCOUNT_NAME, null).build()); - if (displayName.getText().length() > 0) { + if (getDisplayName() != null) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactID) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) - .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName.getText().toString()) + .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, getDisplayName()) .build() ); } } private void updateExistingContact() { - if (displayName.getText().length() > 0) { + if (getDisplayName() != null) { String select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'" ; String[] args = new String[] { String.valueOf(contactID) }; ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) .withSelection(select, args) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) - .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName.getText().toString()) + .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, getDisplayName()) .build() ); } } private void deleteExistingContact() { - if (displayName.getText().length() > 0) { - String select = ContactsContract.Data.CONTACT_ID + "=?"; - String[] args = new String[] { String.valueOf(contactID) }; - - ops.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI) - .withSelection(select, args) - .build() - ); - } + String select = ContactsContract.Data.CONTACT_ID + "=?"; + String[] args = new String[] { String.valueOf(contactID) }; + + ops.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI) + .withSelection(select, args) + .build() + ); try { getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); @@ -310,6 +335,17 @@ public class EditContactFragment extends Fragment { } } + private String getDisplayName() { + String displayName = null; + if (firstName.getText().length() > 0 && lastName.getText().length() > 0) + displayName = firstName.getText().toString() + " " + lastName.getText().toString(); + else if (firstName.getText().length() > 0) + displayName = firstName.getText().toString(); + else if (lastName.getText().length() > 0) + displayName = lastName.getText().toString(); + return displayName; + } + private String findRawContactID(String contactID) { Cursor c = getActivity().getContentResolver().query(RawContacts.CONTENT_URI, new String[]{RawContacts._ID}, @@ -321,6 +357,28 @@ public class EditContactFragment extends Fragment { return null; } + private String findContactFirstName(String contactID) { + Cursor c = getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI, + new String[]{ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME}, + RawContacts.CONTACT_ID + "=?", + new String[]{contactID}, null); + if (c != null && c.moveToFirst()) { + return c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); + } + return null; + } + + private String findContactLastName(String contactID) { + Cursor c = getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI, + new String[]{ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME}, + RawContacts.CONTACT_ID + "=?", + new String[]{contactID}, null); + if (c != null && c.moveToFirst()) { + return c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); + } + return null; + } + class NewOrUpdatedNumberOrAddress { private String oldNumberOrAddress; private String newNumberOrAddress; diff --git a/submodules/linphone b/submodules/linphone index b35e47746..2123621e5 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit b35e4774658ab2fe666c4b7ec2f93d8ebe59d91a +Subproject commit 2123621e5648cf37dce82b5bf812c167cb2b16e7