aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/services
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-11-23 08:30:12 +0100
committerChristian Schneppe <christian@pix-art.de>2018-11-23 08:51:39 +0100
commit35d5d97544cd6abc45809a19324898dfbf457467 (patch)
tree0d358bcb048a3de2aa99f18d1baa71d71b0c29de /src/main/java/de/pixart/messenger/services
parent9ec0a87cc28d134c974e8ca0e0b3fda3d89bca7a (diff)
refactored phone contact loading in preperation for sync
Diffstat (limited to 'src/main/java/de/pixart/messenger/services')
-rw-r--r--src/main/java/de/pixart/messenger/services/AbstractQuickConversationsService.java26
-rw-r--r--src/main/java/de/pixart/messenger/services/QuickConversationsService.java28
-rw-r--r--src/main/java/de/pixart/messenger/services/ShortcutService.java2
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java68
4 files changed, 85 insertions, 39 deletions
diff --git a/src/main/java/de/pixart/messenger/services/AbstractQuickConversationsService.java b/src/main/java/de/pixart/messenger/services/AbstractQuickConversationsService.java
new file mode 100644
index 000000000..f5647bd60
--- /dev/null
+++ b/src/main/java/de/pixart/messenger/services/AbstractQuickConversationsService.java
@@ -0,0 +1,26 @@
+package de.pixart.messenger.services;
+
+public abstract class AbstractQuickConversationsService {
+
+ protected final XmppConnectionService service;
+
+ public AbstractQuickConversationsService(XmppConnectionService service) {
+ this.service = service;
+ }
+
+ public abstract void considerSync();
+
+ public static boolean isQuicksy() {
+ return false;
+ }
+
+ public static boolean isConversations() {
+ return true;
+ }
+
+ public abstract void signalAccountStateChange();
+
+ public abstract boolean isSynchronizing();
+
+ public abstract void considerSyncBackground(boolean force);
+} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/services/QuickConversationsService.java b/src/main/java/de/pixart/messenger/services/QuickConversationsService.java
new file mode 100644
index 000000000..e268ac856
--- /dev/null
+++ b/src/main/java/de/pixart/messenger/services/QuickConversationsService.java
@@ -0,0 +1,28 @@
+package de.pixart.messenger.services;
+
+public class QuickConversationsService extends AbstractQuickConversationsService {
+
+ QuickConversationsService(XmppConnectionService xmppConnectionService) {
+ super(xmppConnectionService);
+ }
+
+ @Override
+ public void considerSync() {
+
+ }
+
+ @Override
+ public void signalAccountStateChange() {
+
+ }
+
+ @Override
+ public boolean isSynchronizing() {
+ return false;
+ }
+
+ @Override
+ public void considerSyncBackground(boolean force) {
+
+ }
+} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/services/ShortcutService.java b/src/main/java/de/pixart/messenger/services/ShortcutService.java
index 0578a8ce5..8051c8849 100644
--- a/src/main/java/de/pixart/messenger/services/ShortcutService.java
+++ b/src/main/java/de/pixart/messenger/services/ShortcutService.java
@@ -24,7 +24,7 @@ import rocks.xmpp.addr.Jid;
public class ShortcutService {
private final XmppConnectionService xmppConnectionService;
- private final ReplacingSerialSingleThreadExecutor replacingSerialSingleThreadExecutor = new ReplacingSerialSingleThreadExecutor(false);
+ private final ReplacingSerialSingleThreadExecutor replacingSerialSingleThreadExecutor = new ReplacingSerialSingleThreadExecutor(ShortcutService.class.getSimpleName());
public ShortcutService(XmppConnectionService xmppConnectionService) {
this.xmppConnectionService = xmppConnectionService;
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index bb704c6b6..7238beec2 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -81,6 +81,7 @@ import java.util.concurrent.atomic.AtomicLong;
import de.pixart.messenger.BuildConfig;
import de.pixart.messenger.Config;
import de.pixart.messenger.R;
+import de.pixart.messenger.android.JabberIdContact;
import de.pixart.messenger.crypto.OmemoSetting;
import de.pixart.messenger.crypto.PgpDecryptionService;
import de.pixart.messenger.crypto.PgpEngine;
@@ -243,7 +244,7 @@ public class XmppConnectionService extends Service {
}
};
public HttpConnectionManager mHttpConnectionManager = new HttpConnectionManager(this);
- private ReplacingSerialSingleThreadExecutor mContactMergerExecutor = new ReplacingSerialSingleThreadExecutor(true);
+ private ReplacingSerialSingleThreadExecutor mContactMergerExecutor = new ReplacingSerialSingleThreadExecutor("ContactMerger");
private long mLastActivity = 0;
private MemorizingTrustManager mMemorizingTrustManager;
private NotificationService mNotificationService = new NotificationService(this);
@@ -286,6 +287,7 @@ public class XmppConnectionService extends Service {
private AvatarService mAvatarService = new AvatarService(this);
private MessageArchiveService mMessageArchiveService = new MessageArchiveService(this);
private PushManagementService mPushManagementService = new PushManagementService(this);
+ private QuickConversationsService mQuickConversationsService = new QuickConversationsService(this);
private final OnBindListener mOnBindListener = new OnBindListener() {
@Override
@@ -1720,45 +1722,35 @@ public class XmppConnectionService extends Service {
}
public void loadPhoneContacts() {
- mContactMergerExecutor.execute(() -> PhoneHelper.loadPhoneContacts(XmppConnectionService.this, new OnPhoneContactsLoadedListener() {
- @Override
- public void onPhoneContactsLoaded(List<Bundle> phoneContacts) {
- Log.d(Config.LOGTAG, "start merging phone contacts with roster");
- for (Account account : accounts) {
- List<Contact> withSystemAccounts = account.getRoster().getWithSystemAccounts();
- for (Bundle phoneContact : phoneContacts) {
- Jid jid;
- try {
- jid = Jid.of(phoneContact.getString("jid"));
- } catch (final IllegalArgumentException e) {
- continue;
- }
- final Contact contact = account.getRoster().getContact(jid);
- String systemAccount = phoneContact.getInt("phoneid")
- + "#"
- + phoneContact.getString("lookup");
- contact.setSystemAccount(systemAccount);
- boolean needsCacheClean = contact.setPhotoUri(phoneContact.getString("photouri"));
- needsCacheClean |= contact.setSystemName(phoneContact.getString("displayname"));
- if (needsCacheClean) {
- getAvatarService().clear(contact);
- }
- withSystemAccounts.remove(contact);
+ mContactMergerExecutor.execute(() -> {
+ Map<Jid, JabberIdContact> contacts = JabberIdContact.load(this);
+ Log.d(Config.LOGTAG, "start merging phone contacts with roster");
+ for (Account account : accounts) {
+ List<Contact> withSystemAccounts = account.getRoster().getWithSystemAccounts();
+ for (JabberIdContact jidContact : contacts.values()) {
+ final Contact contact = account.getRoster().getContact(jidContact.getJid());
+ contact.setSystemAccount(jidContact.getLookupUri());
+ boolean needsCacheClean = contact.setPhotoUri(jidContact.getPhotoUri());
+ needsCacheClean |= contact.setSystemName(jidContact.getDisplayName());
+ if (needsCacheClean) {
+ getAvatarService().clear(contact);
}
- for (Contact contact : withSystemAccounts) {
- contact.setSystemAccount(null);
- boolean needsCacheClean = contact.setPhotoUri(null);
- needsCacheClean |= contact.setSystemName(null);
- if (needsCacheClean) {
- getAvatarService().clear(contact);
- }
+ withSystemAccounts.remove(contact);
+ }
+ for (Contact contact : withSystemAccounts) {
+ contact.setSystemAccount(null);
+ boolean needsCacheClean = contact.setPhotoUri(null);
+ needsCacheClean |= contact.setSystemName(null);
+ if (needsCacheClean) {
+ getAvatarService().clear(contact);
}
}
- Log.d(Config.LOGTAG, "finished merging phone contacts");
- mShortcutService.refresh(mInitialAddressbookSyncCompleted.compareAndSet(false, true));
- updateRosterUi();
}
- }));
+ Log.d(Config.LOGTAG, "finished merging phone contacts");
+ mShortcutService.refresh(mInitialAddressbookSyncCompleted.compareAndSet(false, true));
+ updateRosterUi();
+ mQuickConversationsService.considerSync();
+ });
}
public void syncRoster(final Account account) {
@@ -3683,11 +3675,11 @@ public class XmppConnectionService extends Service {
}
public boolean useTorToConnect() {
- return Config.FORCE_ORBOT || getBooleanPreference("use_tor", R.bool.use_tor);
+ return QuickConversationsService.isConversations() && getBooleanPreference("use_tor", R.bool.use_tor);
}
public boolean showExtendedConnectionOptions() {
- return getBooleanPreference("show_connection_options", R.bool.show_connection_options);
+ return QuickConversationsService.isConversations() && getBooleanPreference("show_connection_options", R.bool.show_connection_options);
}
public boolean warnUnecryptedChat() {