aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2016-02-06 14:17:49 +0100
committerDominik Schürmann <dominik@dominikschuermann.de>2016-02-06 14:17:49 +0100
commit2c7e5ab8df69f461758c112f0e0e8d44f479b7e8 (patch)
tree75dda98111cc15eef8fdca548bc518255f0cd705
parentcbf6f15d91f53f460584d959fcd16440c9309be1 (diff)
parentd2cf56f42ed0b37f9a51418c0eefdc951abe10e5 (diff)
downloadopen-keychain-2c7e5ab8df69f461758c112f0e0e8d44f479b7e8.tar.gz
open-keychain-2c7e5ab8df69f461758c112f0e0e8d44f479b7e8.tar.bz2
open-keychain-2c7e5ab8df69f461758c112f0e0e8d44f479b7e8.zip
Merge pull request #1713 from open-keychain/unlink-contact
Deletes linked OpenKeychain contacts if sync is disabled
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java21
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java5
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java10
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java4
5 files changed, 36 insertions, 8 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java
index 381af0af8..c9b9e305f 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java
@@ -118,8 +118,8 @@ public class KeychainApplication extends Application {
}
/**
- * @return the OpenKeychain contact/sync account if it exists or was successfully created, null
- * otherwise
+ * @return the OpenKeychain contact/keyserver sync account if it exists or was successfully
+ * created, null otherwise
*/
public static @Nullable Account createAccountIfNecessary(Context context) {
try {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
index 2985c2030..4107e3167 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
@@ -18,7 +18,6 @@
package org.sufficientlysecure.keychain.service;
import android.accounts.Account;
-import android.accounts.AccountManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.AbstractThreadedSyncAdapter;
@@ -35,6 +34,7 @@ import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.KeychainApplication;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.SettingsActivity;
import org.sufficientlysecure.keychain.util.ContactHelper;
@@ -151,10 +151,25 @@ public class ContactSyncAdapterService extends Service {
}
public static void enableContactsSync(Context context) {
- AccountManager manager = AccountManager.get(context);
- Account account = manager.getAccountsByType(Constants.ACCOUNT_TYPE)[0];
+ Account account = KeychainApplication.createAccountIfNecessary(context);
+
+ if (account == null) {
+ // nothing we can do
+ return;
+ }
ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);
}
+
+ public static void deleteIfSyncDisabled(Context context) {
+ Account account = KeychainApplication.createAccountIfNecessary(context);
+ if (account == null) {
+ return;
+ }
+ // if user has disabled automatic sync, delete linked OpenKeychain contacts
+ if(!ContentResolver.getSyncAutomatically(account, ContactsContract.AUTHORITY)) {
+ new ContactHelper(context).deleteAllContacts();
+ }
+ }
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
index 7666a230a..ea70cde2a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
@@ -51,6 +51,8 @@ import android.widget.LinearLayout;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.AppCompatPreferenceActivity;
+import org.sufficientlysecure.keychain.service.ContactSyncAdapterService;
+import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.util.Log;
@@ -79,6 +81,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
@Override
protected void onResume() {
super.onResume();
+ BaseActivity.onResumeChecks(this);
if (mThemeChanger.changeTheme()) {
Intent intent = getIntent();
@@ -463,6 +466,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
} else {
// disable syncs
ContentResolver.setSyncAutomatically(account, authority, false);
+ // immediately delete any linked contacts
+ ContactSyncAdapterService.deleteIfSyncDisabled(getActivity());
// cancel any ongoing/pending syncs
ContentResolver.cancelSync(account, authority);
setSummary(syncCheckBox, authority, false);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java
index aa4e7d840..c9aaa9da5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java
@@ -18,6 +18,7 @@
package org.sufficientlysecure.keychain.ui.base;
import android.app.Activity;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
@@ -30,6 +31,7 @@ import android.view.ViewGroup;
import android.widget.TextView;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.service.ContactSyncAdapterService;
import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
@@ -52,7 +54,7 @@ public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
- KeyserverSyncAdapterService.cancelUpdates(this);
+ onResumeChecks(this);
if (mThemeChanger.changeTheme()) {
Intent intent = getIntent();
@@ -63,6 +65,12 @@ public abstract class BaseActivity extends AppCompatActivity {
}
}
+ public static void onResumeChecks(Context context) {
+ KeyserverSyncAdapterService.cancelUpdates(context);
+ // in case user has disabled sync from settings
+ ContactSyncAdapterService.deleteIfSyncDisabled(context);
+ }
+
protected void initLayout() {
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
index ea038aa1a..29e6f4e41 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
@@ -465,7 +465,7 @@ public class ContactHelper {
*/
public void writeKeysToContacts() {
if (Constants.DEBUG_SYNC_REMOVE_CONTACTS) {
- debugDeleteRawContacts();
+ deleteAllContacts();
}
writeKeysToMainProfileContact();
@@ -671,7 +671,7 @@ public class ContactHelper {
*
* @return number of rows deleted
*/
- private int debugDeleteRawContacts() {
+ public int deleteAllContacts() {
// CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise
// would be just flagged for deletion
Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon().