make syncadapter set whether the account is syncable
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0c114ba..3a067e9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -27,6 +27,8 @@
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" />
<uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" />
diff --git a/src/com/android/providers/calendar/CalendarSyncAdapter.java b/src/com/android/providers/calendar/CalendarSyncAdapter.java
index 06a7ea6..77d6549 100644
--- a/src/com/android/providers/calendar/CalendarSyncAdapter.java
+++ b/src/com/android/providers/calendar/CalendarSyncAdapter.java
@@ -572,6 +572,13 @@
super.onSyncStarting(context, account, manualSync, result);
}
+ public boolean getIsSyncable(Account account)
+ throws IOException, AuthenticatorException, OperationCanceledException {
+ Account[] accounts = AccountManager.get(getContext()).getAccountsByTypeAndFeatures(
+ "com.google.GAIA", new String[]{"legacy_hosted_or_google"}, null, null).getResult();
+ return accounts.length > 0 && accounts[0].equals(account) && super.getIsSyncable(account);
+ }
+
private void deletedEntryToContentValues(Long syncLocalId, EventEntry event,
ContentValues values) {
// see #deletedCursorToEntry. this deletion cannot be an exception to a recurrence (e.g.,
@@ -1138,7 +1145,7 @@
syncExtras.clear();
syncExtras.putBoolean("moveWindow", true);
syncExtras.putString("feed", feedUrl);
- mContentResolver.startSync(Calendar.CONTENT_URI, syncExtras);
+ ContentResolver.requestSync(null /* account */, Calendar.AUTHORITY, syncExtras);
}
}
getServerDiffsForFeed(context, baseSyncData, tempProvider, feedUrl,
diff --git a/tests/src/com/android/providers/calendar/TestCalendarSyncAdapter.java b/tests/src/com/android/providers/calendar/TestCalendarSyncAdapter.java
index bcc1c73..01d969e 100644
--- a/tests/src/com/android/providers/calendar/TestCalendarSyncAdapter.java
+++ b/tests/src/com/android/providers/calendar/TestCalendarSyncAdapter.java
@@ -27,9 +27,12 @@
import android.os.Bundle;
import android.text.format.DateUtils;
import android.accounts.Account;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
import java.util.Calendar;
import java.util.TimeZone;
+import java.io.IOException;
public class TestCalendarSyncAdapter extends TempProviderSyncAdapter {
@@ -57,6 +60,11 @@
return false;
}
+ public boolean getIsSyncable(Account account)
+ throws IOException, AuthenticatorException, OperationCanceledException {
+ return true;
+ }
+
@Override
public void getServerDiffs(SyncContext context, SyncData syncData,
SyncableContentProvider tempProvider,