aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-06-18 20:56:38 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-06-18 20:56:38 +0200
commit8ffc959f073c5ebd657c00a148606aa528a0caa0 (patch)
tree4fe3751a615579a86ec864ffe0112087d8208ac4 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service
parentf8d895dea4ba1a5133107474410813f4128176ef (diff)
parenta1c3c41073d283dc951e50199d409e28ee4a2ee8 (diff)
downloadopen-keychain-8ffc959f073c5ebd657c00a148606aa528a0caa0.tar.gz
open-keychain-8ffc959f073c5ebd657c00a148606aa528a0caa0.tar.bz2
open-keychain-8ffc959f073c5ebd657c00a148606aa528a0caa0.zip
Merge pull request #661 from mar-v-in/improve-contacts
Improve contact sync
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java22
1 files changed, 20 insertions, 2 deletions
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 8db9294df..6c4d59a77 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ContactSyncAdapterService.java
@@ -30,10 +30,14 @@ import org.sufficientlysecure.keychain.helper.ContactHelper;
import org.sufficientlysecure.keychain.helper.EmailKeyHelper;
import org.sufficientlysecure.keychain.util.Log;
+import java.util.concurrent.atomic.AtomicBoolean;
+
public class ContactSyncAdapterService extends Service {
private class ContactSyncAdapter extends AbstractThreadedSyncAdapter {
+ private final AtomicBoolean importDone = new AtomicBoolean(false);
+
public ContactSyncAdapter() {
super(ContactSyncAdapterService.this, true);
}
@@ -41,6 +45,8 @@ public class ContactSyncAdapterService extends Service {
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider,
final SyncResult syncResult) {
+ importDone.set(false);
+ KeychainApplication.setupAccountAsNeeded(ContactSyncAdapterService.this);
EmailKeyHelper.importContacts(getContext(), new Messenger(new Handler(Looper.getMainLooper(),
new Handler.Callback() {
@Override
@@ -48,11 +54,16 @@ public class ContactSyncAdapterService extends Service {
Bundle data = msg.getData();
switch (msg.arg1) {
case KeychainIntentServiceHandler.MESSAGE_OKAY:
+ Log.d(Constants.TAG, "Syncing... Done.");
+ synchronized (importDone) {
+ importDone.set(true);
+ importDone.notifyAll();
+ }
return true;
case KeychainIntentServiceHandler.MESSAGE_UPDATE_PROGRESS:
if (data.containsKey(KeychainIntentServiceHandler.DATA_PROGRESS) &&
data.containsKey(KeychainIntentServiceHandler.DATA_PROGRESS_MAX)) {
- Log.d(Constants.TAG, "Progress: " +
+ Log.d(Constants.TAG, "Syncing... Progress: " +
data.getInt(KeychainIntentServiceHandler.DATA_PROGRESS) + "/" +
data.getInt(KeychainIntentServiceHandler.DATA_PROGRESS_MAX));
return false;
@@ -63,7 +74,14 @@ public class ContactSyncAdapterService extends Service {
}
}
})));
- KeychainApplication.setupAccountAsNeeded(ContactSyncAdapterService.this);
+ synchronized (importDone) {
+ try {
+ if (!importDone.get()) importDone.wait();
+ } catch (InterruptedException e) {
+ Log.w(Constants.TAG, e);
+ return;
+ }
+ }
ContactHelper.writeKeysToContacts(ContactSyncAdapterService.this);
}
}