diff options
author | Christian Schneppe <christian@pix-art.de> | 2018-11-23 08:30:12 +0100 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2018-11-23 08:51:39 +0100 |
commit | 35d5d97544cd6abc45809a19324898dfbf457467 (patch) | |
tree | 0d358bcb048a3de2aa99f18d1baa71d71b0c29de /src/main/java/de/pixart/messenger/services | |
parent | 9ec0a87cc28d134c974e8ca0e0b3fda3d89bca7a (diff) |
refactored phone contact loading in preperation for sync
Diffstat (limited to 'src/main/java/de/pixart/messenger/services')
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() { |