diff --git a/app/src/main/java/de/wikilab/android/ldapsync/client/Contact.java b/app/src/main/java/de/wikilab/android/ldapsync/client/Contact.java index a5c5162..26501b4 100644 --- a/app/src/main/java/de/wikilab/android/ldapsync/client/Contact.java +++ b/app/src/main/java/de/wikilab/android/ldapsync/client/Contact.java @@ -35,6 +35,7 @@ public class Contact { private String dn = ""; private String firstName = ""; private String lastName = ""; + private String nickname = ""; private String cellWorkPhone = ""; private String workPhone = ""; private String homePhone = ""; @@ -62,10 +63,18 @@ public String getLastName() { return lastName; } + public String getNickname() { + return nickname; + } + public void setLastName(String lastName) { this.lastName = lastName; } + public void setNickname(String nickname) { + this.nickname = nickname; + } + public void setCellWorkPhone(String cellWorkPhone) { this.cellWorkPhone = cellWorkPhone; } @@ -132,6 +141,7 @@ public static Contact valueOf(ReadOnlyEntry user, SharedPreferences preferences) if (getAttributevalue(user, preferences, "last_name") == null || getAttributevalue(user, preferences, "first_name") == null) { return null; } + c.setNickname(getAttributevalue(user, preferences, "nickname")); c.setWorkPhone(getAttributevalue(user, preferences, "office_phone")); c.setCellWorkPhone(getAttributevalue(user, preferences, "cell_phone")); c.setHomePhone(getAttributevalue(user, preferences, "home_phone")); diff --git a/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactManager.java b/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactManager.java index f51cd2a..128d230 100644 --- a/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactManager.java +++ b/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactManager.java @@ -41,6 +41,7 @@ import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.Settings; import android.provider.ContactsContract.CommonDataKinds.Email; +import android.provider.ContactsContract.CommonDataKinds.Nickname; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.Photo; import android.provider.ContactsContract.CommonDataKinds.StructuredName; @@ -117,6 +118,8 @@ private void mapCursorToContact(final Cursor c, Contact existingContact) { //existingContact.setDisplayName(c.getString(c.getColumnIndex(Data.DATA1))); existingContact.setFirstName(c.getString(c.getColumnIndex(Data.DATA2))); existingContact.setLastName(c.getString(c.getColumnIndex(Data.DATA3))); + } else if (mimetype.equals(Nickname.CONTENT_ITEM_TYPE)) { + existingContact.setNickname(c.getString(c.getColumnIndex(Data.DATA1))); } else if (mimetype.equals(Email.CONTENT_ITEM_TYPE)) { int type = c.getInt(c.getColumnIndex(Data.DATA2)); if (type == Email.TYPE_WORK) { @@ -212,6 +215,8 @@ private void updateContact(ContentResolver resolver, long rawContactId, Contact if (mimetype.equals(StructuredName.CONTENT_ITEM_TYPE)) { existingContact.setFirstName(c.getString(c.getColumnIndex(Data.DATA2))); existingContact.setLastName(c.getString(c.getColumnIndex(Data.DATA3))); + } else if (mimetype.equals(Nickname.CONTENT_ITEM_TYPE)) { + existingContact.setNickname(c.getString(c.getColumnIndex(Data.DATA1))); } else if (mimetype.equals(Email.CONTENT_ITEM_TYPE)) { int type = c.getInt(c.getColumnIndex(Data.DATA2)); if (type == Email.TYPE_WORK) { @@ -335,6 +340,7 @@ private void addContact(ContentResolver resolver, String accountName, Contact co private void prepareFields(long rawContactId, Contact newC, Contact existingC, ArrayList ops, boolean isNew) { ContactMerger contactMerger = new ContactMerger(rawContactId, newC, existingC, ops, l); contactMerger.updateName(); + contactMerger.updateNickname(); contactMerger.updateMail(Email.TYPE_WORK); contactMerger.updatePhone(Phone.TYPE_WORK_MOBILE); diff --git a/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactMerger.java b/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactMerger.java index 482b3b8..5fe24af 100644 --- a/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactMerger.java +++ b/app/src/main/java/de/wikilab/android/ldapsync/platform/ContactMerger.java @@ -26,6 +26,7 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.CommonDataKinds.Email; +import android.provider.ContactsContract.CommonDataKinds.Nickname; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.Photo; import android.provider.ContactsContract.CommonDataKinds.StructuredName; @@ -77,6 +78,27 @@ public void updateName() { } } + public void updateNickname() { + String selection = Data.RAW_CONTACT_ID + "=? AND " + Nickname.MIMETYPE + "=?"; + if (TextUtils.isEmpty(newC.getNickname()) && !TextUtils.isEmpty(existingC.getNickname())) { + l.d("Delete nickname (" + existingC.getNickname() + ")"); + ops.add(ContentProviderOperation.newDelete(addCallerIsSyncAdapterFlag(Data.CONTENT_URI)).withSelection(selection, + new String[] { rawContactId + "", Nickname.CONTENT_ITEM_TYPE }).build()); + } else if (!TextUtils.isEmpty(newC.getNickname()) && TextUtils.isEmpty(existingC.getNickname())) { + l.d("Add nickname (" + newC.getNickname() + ")"); + ContentValues cv = new ContentValues(); + cv.put(Nickname.NAME, newC.getNickname()); + cv.put(Nickname.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); + Builder insertOp = createInsert(rawContactId, cv); + ops.add(insertOp.build()); + } else if (!TextUtils.isEmpty(newC.getNickname()) && !newC.getNickname().equals(existingC.getNickname())) { + l.d("Update nickname (" + existingC.getNickname() + " => " + newC.getNickname() + ")"); + Builder updateOp = ContentProviderOperation.newUpdate(addCallerIsSyncAdapterFlag(Data.CONTENT_URI)).withSelection(selection, + new String[] { rawContactId + "", Nickname.CONTENT_ITEM_TYPE }).withValue(Nickname.NAME, newC.getNickname()); + ops.add(updateOp.build()); + } + } + private Builder createInsert(long rawContactId, ContentValues cv) { Builder insertOp = ContentProviderOperation.newInsert(addCallerIsSyncAdapterFlag(Data.CONTENT_URI)).withValues(cv); if (rawContactId == -1) { diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9febc50..0202a1b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -38,6 +38,7 @@ LDAP Zuordnungen Vorname Nachname + Spitzname Geschäftsnummer Mobilnummer Heimnummer diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 158a451..4046b1a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,6 +38,7 @@ LDAP Mappings First Name Last Name + Nickname Office Phone Cell Phone Home Phone diff --git a/app/src/main/res/xml/preference_resources.xml b/app/src/main/res/xml/preference_resources.xml index fea19fa..8028b10 100644 --- a/app/src/main/res/xml/preference_resources.xml +++ b/app/src/main/res/xml/preference_resources.xml @@ -25,6 +25,10 @@ android:defaultValue="sn" android:key="last_name" android:title="Last Name"/> +