From 1b3a4bf318f85034d383a8df3aa23cc74ee82ed1 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Wed, 8 Mar 2017 11:08:23 +0000 Subject: [PATCH] Add a way to count calendar events/contacts. --- .../resource/LocalAddressBook.java | 16 +++++++++++++-- .../syncadapter/resource/LocalCalendar.java | 20 +++++++++++++++++-- .../syncadapter/resource/LocalCollection.java | 2 ++ .../syncadapter/resource/LocalTaskList.java | 18 ++++++++++++++++- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.java b/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.java index 2d02bab3..83798399 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.java +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.java @@ -23,14 +23,14 @@ import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.RawContacts; import android.support.annotation.NonNull; +import com.etesync.syncadapter.App; + import java.io.FileNotFoundException; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.logging.Level; -import com.etesync.syncadapter.App; - import at.bitfire.vcard4android.AndroidAddressBook; import at.bitfire.vcard4android.AndroidContact; import at.bitfire.vcard4android.AndroidGroup; @@ -158,6 +158,18 @@ public class LocalAddressBook extends AndroidAddressBook implements LocalCollect } } + @Override + public long count() throws ContactsStorageException { + try { + @Cleanup Cursor cursor = provider.query(syncAdapterURI(RawContacts.CONTENT_URI), + null, + null, null, null); + + return cursor.getCount(); + } catch (RemoteException e) { + throw new ContactsStorageException("Couldn't query contacts", e); + } + } @NonNull public LocalContact[] getDeletedContacts() throws ContactsStorageException { diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.java b/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.java index 4d91c1a5..5abfc128 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.java +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.java @@ -23,6 +23,9 @@ import android.provider.CalendarContract.Reminders; import android.support.annotation.NonNull; import android.text.TextUtils; +import com.etesync.syncadapter.App; +import com.etesync.syncadapter.model.CollectionInfo; + import net.fortuna.ical4j.model.component.VTimeZone; import org.apache.commons.lang3.StringUtils; @@ -31,8 +34,6 @@ import java.io.FileNotFoundException; import java.util.LinkedList; import java.util.List; -import com.etesync.syncadapter.App; -import com.etesync.syncadapter.model.CollectionInfo; import at.bitfire.ical4android.AndroidCalendar; import at.bitfire.ical4android.AndroidCalendarFactory; import at.bitfire.ical4android.BatchOperation; @@ -239,6 +240,21 @@ public class LocalCalendar extends AndroidCalendar implements LocalCollection { } } + @Override + public long count() throws CalendarStorageException { + String where = Events.CALENDAR_ID + "=?"; + String whereArgs[] = {String.valueOf(id)}; + + try { + @Cleanup Cursor cursor = provider.query( + syncAdapterURI(Events.CONTENT_URI), + null, + where, whereArgs, null); + return cursor.getCount(); + } catch (RemoteException e) { + throw new CalendarStorageException("Couldn't query calendar events", e); + } + } public static class Factory implements AndroidCalendarFactory { public static final Factory INSTANCE = new Factory(); diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.java b/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.java index 0ac24d0f..a17a5d77 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.java +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.java @@ -24,4 +24,6 @@ public interface LocalCollection { String getCTag() throws CalendarStorageException, ContactsStorageException; void setCTag(String cTag) throws CalendarStorageException, ContactsStorageException; + + long count() throws CalendarStorageException, ContactsStorageException; } diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.java b/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.java index c8d78ad1..b7ee9852 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.java +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.java @@ -19,12 +19,13 @@ import android.os.Build; import android.os.RemoteException; import android.support.annotation.NonNull; +import com.etesync.syncadapter.model.CollectionInfo; + import org.dmfs.provider.tasks.TaskContract.TaskLists; import org.dmfs.provider.tasks.TaskContract.Tasks; import java.io.FileNotFoundException; -import com.etesync.syncadapter.model.CollectionInfo; import at.bitfire.ical4android.AndroidTaskList; import at.bitfire.ical4android.AndroidTaskListFactory; import at.bitfire.ical4android.CalendarStorageException; @@ -109,6 +110,21 @@ public class LocalTaskList extends AndroidTaskList implements LocalCollection { return tasks; } + @Override + public long count() throws CalendarStorageException { + String where = Tasks.LIST_ID + "=?"; + String whereArgs[] = {String.valueOf(getId())}; + + try { + @Cleanup Cursor cursor = provider.client.query( + syncAdapterURI(provider.tasksUri()), + null, + where, whereArgs, null); + return cursor.getCount(); + } catch (RemoteException e) { + throw new CalendarStorageException("Couldn't query calendar events", e); + } + } @Override @SuppressWarnings("Recycle")