diff --git a/app/src/main/java/at/bitfire/davdroid/AccountSettings.java b/app/src/main/java/at/bitfire/davdroid/AccountSettings.java index f7a0853c..a4356f7b 100644 --- a/app/src/main/java/at/bitfire/davdroid/AccountSettings.java +++ b/app/src/main/java/at/bitfire/davdroid/AccountSettings.java @@ -50,7 +50,7 @@ import lombok.Cleanup; import okhttp3.HttpUrl; public class AccountSettings { - private final static int CURRENT_VERSION = 3; + private final static int CURRENT_VERSION = 4; private final static String KEY_SETTINGS_VERSION = "version", @@ -80,10 +80,8 @@ public class AccountSettings { private final static String KEY_MANAGE_CALENDAR_COLORS = "manage_calendar_colors"; /** Contact group method: - automatic VCard4 if server supports VCard 4, VCard3 otherwise (default value) - VCard3 adds a contact's groups to its CATEGORIES / interprets a contact's CATEGORIES as groups - VCard4 uses groups as defined in VCard 4 (KIND/MEMBER properties) - Apple uses Apple-proprietary X-ADDRESSBOOK-KIND/-MEMBER properties + value = null (not existing) groups as separate VCards (default) + "CATEGORIES" groups are per-contact CATEGORIES */ private final static String KEY_CONTACT_GROUP_METHOD = "contact_group_method"; @@ -240,11 +238,11 @@ public class AccountSettings { final String name = accountManager.getUserData(account, KEY_CONTACT_GROUP_METHOD); return name != null ? GroupMethod.valueOf(name) : - GroupMethod.AUTOMATIC; + GroupMethod.GROUP_VCARDS; } public void setGroupMethod(@NonNull GroupMethod method) { - final String name = GroupMethod.AUTOMATIC.equals(method) ? null : method.name(); + final String name = method == GroupMethod.GROUP_VCARDS ? null : method.name(); accountManager.setUserData(account, KEY_CONTACT_GROUP_METHOD, name); } @@ -424,6 +422,11 @@ public class AccountSettings { accountManager.setUserData(account, KEY_SETTINGS_VERSION, "3"); } + @SuppressWarnings({ "Recycle", "unused" }) + private void update_3_4() { + setGroupMethod(GroupMethod.CATEGORIES); + } + public static class AppUpdatedReceiver extends BroadcastReceiver { diff --git a/app/src/main/java/at/bitfire/davdroid/resource/LocalAddressBook.java b/app/src/main/java/at/bitfire/davdroid/resource/LocalAddressBook.java index 0a5d224c..ce0d7289 100644 --- a/app/src/main/java/at/bitfire/davdroid/resource/LocalAddressBook.java +++ b/app/src/main/java/at/bitfire/davdroid/resource/LocalAddressBook.java @@ -164,6 +164,14 @@ public class LocalAddressBook extends AndroidAddressBook implements LocalCollect group.delete(); } + public void removeGroups() throws ContactsStorageException { + try { + provider.delete(syncAdapterURI(Groups.CONTENT_URI), null, null); + } catch(RemoteException e) { + throw new ContactsStorageException("Couldn't remove all groups", e); + } + } + // SYNC STATE diff --git a/app/src/main/java/at/bitfire/davdroid/resource/LocalGroup.java b/app/src/main/java/at/bitfire/davdroid/resource/LocalGroup.java index a083058b..88549fa4 100644 --- a/app/src/main/java/at/bitfire/davdroid/resource/LocalGroup.java +++ b/app/src/main/java/at/bitfire/davdroid/resource/LocalGroup.java @@ -19,6 +19,7 @@ import android.provider.ContactsContract.CommonDataKinds.GroupMembership; import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.RawContacts.Data; +import android.provider.ContactsContract.RawContactsEntity; import org.apache.commons.lang3.ArrayUtils; diff --git a/app/src/main/java/at/bitfire/davdroid/syncadapter/ContactsSyncManager.java b/app/src/main/java/at/bitfire/davdroid/syncadapter/ContactsSyncManager.java index 28acc634..d14a7ce1 100644 --- a/app/src/main/java/at/bitfire/davdroid/syncadapter/ContactsSyncManager.java +++ b/app/src/main/java/at/bitfire/davdroid/syncadapter/ContactsSyncManager.java @@ -83,13 +83,13 @@ import okhttp3.ResponseBody; *

Group handling differs according to the {@link #groupMethod}. There are two basic methods to * handle/manage groups:

*