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:
parent
b2ab24afd2
commit
68bd43fe6a
@ -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&pk_kwd=accounts" />
|
||||||
</Preference>
|
</Preference>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@ -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);
|
||||||
|
@ -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; }
|
||||||
|
@ -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(),
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user