1
0
mirror of https://github.com/etesync/android synced 2024-11-29 11:28:19 +00:00

don't show calendars/address books as syncable in account when no calendars/address books were added; select only events from correct calendar when querying (fixes #37)

This commit is contained in:
rfc2822 2013-10-27 00:52:35 +02:00
parent b2ab24afd2
commit 68bd43fe6a
5 changed files with 33 additions and 8 deletions

View File

@ -4,7 +4,7 @@
<Preference android:title="DAVdroid Web site" > <Preference android:title="DAVdroid Web site" >
<intent <intent
android:action="android.intent.action.VIEW" android:action="android.intent.action.VIEW"
android:data="http://davdroid.bitfire.at/?pk_campaign=in-app" /> android:data="http://davdroid.bitfire.at/?pk_campaign=davdroid-app&amp;pk_kwd=accounts" />
</Preference> </Preference>
</PreferenceScreen> </PreferenceScreen>

View File

@ -60,6 +60,7 @@ public class LocalAddressBook extends LocalCollection<Contact> {
protected String entryColumnAccountType() { return RawContacts.ACCOUNT_TYPE; } protected String entryColumnAccountType() { return RawContacts.ACCOUNT_TYPE; }
protected String entryColumnAccountName() { return RawContacts.ACCOUNT_NAME; } protected String entryColumnAccountName() { return RawContacts.ACCOUNT_NAME; }
protected String entryColumnParentID() { return null; /* maybe use RawContacts.DATA_SET some day? */ }
protected String entryColumnID() { return RawContacts._ID; } protected String entryColumnID() { return RawContacts._ID; }
protected String entryColumnRemoteName() { return RawContacts.SOURCE_ID; } protected String entryColumnRemoteName() { return RawContacts.SOURCE_ID; }
protected String entryColumnETag() { return RawContacts.SYNC2; } protected String entryColumnETag() { return RawContacts.SYNC2; }
@ -79,6 +80,11 @@ public class LocalAddressBook extends LocalCollection<Contact> {
/* collection operations */ /* collection operations */
@Override
public long getId() {
return -1;
}
@Override @Override
public String getCTag() { public String getCTag() {
return accountManager.getUserData(account, Constants.ACCOUNT_KEY_ADDRESSBOOK_CTAG); return accountManager.getUserData(account, Constants.ACCOUNT_KEY_ADDRESSBOOK_CTAG);

View File

@ -11,6 +11,7 @@ import java.net.URISyntaxException;
import java.text.ParseException; import java.text.ParseException;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import lombok.Getter; import lombok.Getter;
import net.fortuna.ical4j.model.Parameter; import net.fortuna.ical4j.model.Parameter;
import net.fortuna.ical4j.model.ParameterList; import net.fortuna.ical4j.model.ParameterList;
@ -25,7 +26,9 @@ import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.RDate; import net.fortuna.ical4j.model.property.RDate;
import net.fortuna.ical4j.model.property.RRule; import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.model.property.Status; import net.fortuna.ical4j.model.property.Status;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import android.accounts.Account; import android.accounts.Account;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.annotation.TargetApi; import android.annotation.TargetApi;
@ -51,7 +54,7 @@ import at.bitfire.davdroid.syncadapter.ServerInfo;
public class LocalCalendar extends LocalCollection<Event> { public class LocalCalendar extends LocalCollection<Event> {
private static final String TAG = "davdroid.LocalCalendar"; private static final String TAG = "davdroid.LocalCalendar";
protected long id; @Getter protected long id;
@Getter protected String path, cTag; @Getter protected String path, cTag;
protected static String COLLECTION_COLUMN_CTAG = Calendars.CAL_SYNC1; protected static String COLLECTION_COLUMN_CTAG = Calendars.CAL_SYNC1;
@ -67,6 +70,7 @@ public class LocalCalendar extends LocalCollection<Event> {
protected String entryColumnAccountType() { return Events.ACCOUNT_TYPE; } protected String entryColumnAccountType() { return Events.ACCOUNT_TYPE; }
protected String entryColumnAccountName() { return Events.ACCOUNT_NAME; } protected String entryColumnAccountName() { return Events.ACCOUNT_NAME; }
protected String entryColumnParentID() { return Events.CALENDAR_ID; }
protected String entryColumnID() { return Events._ID; } protected String entryColumnID() { return Events._ID; }
protected String entryColumnRemoteName() { return Events._SYNC_ID; } protected String entryColumnRemoteName() { return Events._SYNC_ID; }
protected String entryColumnETag() { return Events.SYNC_DATA1; } protected String entryColumnETag() { return Events.SYNC_DATA1; }

View File

@ -39,6 +39,7 @@ public abstract class LocalCollection<ResourceType extends Resource> {
abstract protected String entryColumnAccountType(); abstract protected String entryColumnAccountType();
abstract protected String entryColumnAccountName(); abstract protected String entryColumnAccountName();
abstract protected String entryColumnParentID();
abstract protected String entryColumnID(); abstract protected String entryColumnID();
abstract protected String entryColumnRemoteName(); abstract protected String entryColumnRemoteName();
abstract protected String entryColumnETag(); abstract protected String entryColumnETag();
@ -57,6 +58,7 @@ public abstract class LocalCollection<ResourceType extends Resource> {
// collection operations // collection operations
abstract public long getId();
abstract public String getCTag(); abstract public String getCTag();
abstract public void setCTag(String cTag); abstract public void setCTag(String cTag);
@ -64,9 +66,12 @@ public abstract class LocalCollection<ResourceType extends Resource> {
// content provider (= database) querying // content provider (= database) querying
public Resource[] findDirty() throws RemoteException { public Resource[] findDirty() throws RemoteException {
String where = entryColumnDirty() + "=1";
if (entryColumnParentID() != null)
where += " AND " + entryColumnParentID() + "=" + String.valueOf(getId());
Cursor cursor = providerClient.query(entriesURI(), Cursor cursor = providerClient.query(entriesURI(),
new String[] { entryColumnID(), entryColumnRemoteName(), entryColumnETag() }, new String[] { entryColumnID(), entryColumnRemoteName(), entryColumnETag() },
entryColumnDirty() + "=1", null, null); where, null, null);
LinkedList<Resource> dirty = new LinkedList<Resource>(); LinkedList<Resource> dirty = new LinkedList<Resource>();
while (cursor.moveToNext()) while (cursor.moveToNext())
dirty.add(findById(cursor.getLong(0), cursor.getString(1), cursor.getString(2), true)); dirty.add(findById(cursor.getLong(0), cursor.getString(1), cursor.getString(2), true));
@ -74,9 +79,12 @@ public abstract class LocalCollection<ResourceType extends Resource> {
} }
public Resource[] findDeleted() throws RemoteException { public Resource[] findDeleted() throws RemoteException {
String where = entryColumnDeleted() + "=1";
if (entryColumnParentID() != null)
where += " AND " + entryColumnParentID() + "=" + String.valueOf(getId());
Cursor cursor = providerClient.query(entriesURI(), Cursor cursor = providerClient.query(entriesURI(),
new String[] { entryColumnID(), entryColumnRemoteName(), entryColumnETag() }, new String[] { entryColumnID(), entryColumnRemoteName(), entryColumnETag() },
entryColumnDeleted() + "=1", null, null); where, null, null);
LinkedList<Resource> deleted = new LinkedList<Resource>(); LinkedList<Resource> deleted = new LinkedList<Resource>();
while (cursor.moveToNext()) while (cursor.moveToNext())
deleted.add(findById(cursor.getLong(0), cursor.getString(1), cursor.getString(2), false)); deleted.add(findById(cursor.getLong(0), cursor.getString(1), cursor.getString(2), false));
@ -84,9 +92,12 @@ public abstract class LocalCollection<ResourceType extends Resource> {
} }
public Resource[] findNew() throws RemoteException { public Resource[] findNew() throws RemoteException {
String where = entryColumnDirty() + "=1 AND " + entryColumnRemoteName() + " IS NULL";
if (entryColumnParentID() != null)
where += " AND " + entryColumnParentID() + "=" + String.valueOf(getId());
Cursor cursor = providerClient.query(entriesURI(), Cursor cursor = providerClient.query(entriesURI(),
new String[] { entryColumnID() }, new String[] { entryColumnID() },
entryColumnDirty() + "=1 AND " + entryColumnRemoteName() + " IS NULL", null, null); where, null, null);
LinkedList<Resource> fresh = new LinkedList<Resource>(); LinkedList<Resource> fresh = new LinkedList<Resource>();
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
String uid = UUID.randomUUID().toString(), String uid = UUID.randomUUID().toString(),

View File

@ -141,16 +141,20 @@ public class SelectCollectionsFragment extends ListFragment {
if (!addressBooks.isEmpty()) { if (!addressBooks.isEmpty()) {
userData.putString(Constants.ACCOUNT_KEY_ADDRESSBOOK_PATH, addressBooks.get(0).getPath()); userData.putString(Constants.ACCOUNT_KEY_ADDRESSBOOK_PATH, addressBooks.get(0).getPath());
ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true); ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);
} } else
ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 0);
if (accountManager.addAccountExplicitly(account, serverInfo.getPassword(), userData)) { if (accountManager.addAccountExplicitly(account, serverInfo.getPassword(), userData)) {
// account created, now create calendars // account created, now create calendars
if (!calendars.isEmpty()) { if (!calendars.isEmpty()) {
for (ServerInfo.ResourceInfo calendar : calendars) for (ServerInfo.ResourceInfo calendar : calendars)
LocalCalendar.create(account, getActivity().getContentResolver(), calendar); LocalCalendar.create(account, getActivity().getContentResolver(), calendar);
ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, CalendarContract.AUTHORITY, true); ContentResolver.setSyncAutomatically(account, CalendarContract.AUTHORITY, true);
} } else
ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 0);
getActivity().finish(); getActivity().finish();
} else } else