aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2016-02-09 21:14:07 +0100
committerDominik Schürmann <dominik@dominikschuermann.de>2016-02-09 21:14:07 +0100
commitc22e2baa793d30f2af27a2a10ab7817bdbf347ec (patch)
tree78c28991a2b650eb2c11389c4c2785ac48549e80 /OpenKeychain
parentb44f73c819861b063972f3373936c5fc769e07a2 (diff)
downloadopen-keychain-c22e2baa793d30f2af27a2a10ab7817bdbf347ec.tar.gz
open-keychain-c22e2baa793d30f2af27a2a10ab7817bdbf347ec.tar.bz2
open-keychain-c22e2baa793d30f2af27a2a10ab7817bdbf347ec.zip
Fix SecurityException on Android 6 due to remove contacts on disabled sync
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java13
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java2
3 files changed, 12 insertions, 5 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java
index 32d993e2a..976278581 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/KeychainApplication.java
@@ -129,7 +129,7 @@ public class KeychainApplication extends Application {
Account account = new Account(Constants.ACCOUNT_NAME, Constants.ACCOUNT_TYPE);
if (accounts.length == 0) {
if (!manager.addAccountExplicitly(account, null, null)) {
- Log.d(Constants.TAG, "account already exists, the account is null, or another error occured");
+ Log.d(Constants.TAG, "error when adding account via addAccountExplicitly");
return null;
} else {
return account;
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 4107e3167..cdfe2f1ce 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
@@ -17,6 +17,7 @@
package org.sufficientlysecure.keychain.service;
+import android.Manifest;
import android.accounts.Account;
import android.app.PendingIntent;
import android.app.Service;
@@ -26,12 +27,14 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SyncResult;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceActivity;
import android.provider.ContactsContract;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.content.ContextCompat;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.KeychainApplication;
@@ -152,9 +155,7 @@ public class ContactSyncAdapterService extends Service {
public static void enableContactsSync(Context context) {
Account account = KeychainApplication.createAccountIfNecessary(context);
-
if (account == null) {
- // nothing we can do
return;
}
@@ -163,12 +164,18 @@ public class ContactSyncAdapterService extends Service {
}
public static void deleteIfSyncDisabled(Context context) {
+ if (!(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
+ == PackageManager.PERMISSION_GRANTED)) {
+ return;
+ }
+
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)) {
+ if (!ContentResolver.getSyncAutomatically(account, ContactsContract.AUTHORITY)) {
new ContactHelper(context).deleteAllContacts();
}
}
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 c9aaa9da5..107c63e0b 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
@@ -67,7 +67,7 @@ public abstract class BaseActivity extends AppCompatActivity {
public static void onResumeChecks(Context context) {
KeyserverSyncAdapterService.cancelUpdates(context);
- // in case user has disabled sync from settings
+ // in case user has disabled sync from Android account settings
ContactSyncAdapterService.deleteIfSyncDisabled(context);
}