aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-04-12 21:02:53 +0200
committerChristian Schneppe <christian@pix-art.de>2018-04-12 21:02:53 +0200
commit73f5a097dd4de8291aad7a312c78719f91bbbef5 (patch)
tree58c23146bd9f6615721c6637eac75f073c81a318
parentb1330d0f1d89a5cdd222892e508bfdf587b8e354 (diff)
sync roster to disk after roster push
-rw-r--r--src/main/java/de/pixart/messenger/generator/IqGenerator.java8
-rw-r--r--src/main/java/de/pixart/messenger/parser/IqParser.java7
-rw-r--r--src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java4
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java61
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java2
-rw-r--r--src/main/java/de/pixart/messenger/utils/Namespace.java5
6 files changed, 43 insertions, 44 deletions
diff --git a/src/main/java/de/pixart/messenger/generator/IqGenerator.java b/src/main/java/de/pixart/messenger/generator/IqGenerator.java
index 1abbed25a..6946f63f7 100644
--- a/src/main/java/de/pixart/messenger/generator/IqGenerator.java
+++ b/src/main/java/de/pixart/messenger/generator/IqGenerator.java
@@ -98,8 +98,7 @@ public class IqGenerator extends AbstractGenerator {
protected IqPacket publish(final String node, final Element item, final Bundle options) {
final IqPacket packet = new IqPacket(IqPacket.TYPE.SET);
- final Element pubsub = packet.addChild("pubsub",
- "http://jabber.org/protocol/pubsub");
+ final Element pubsub = packet.addChild("pubsub", Namespace.PUBSUB);
final Element publish = pubsub.addChild("publish");
publish.setAttribute("node", node);
publish.addChild(item);
@@ -116,8 +115,7 @@ public class IqGenerator extends AbstractGenerator {
protected IqPacket retrieve(String node, Element item) {
final IqPacket packet = new IqPacket(IqPacket.TYPE.GET);
- final Element pubsub = packet.addChild("pubsub",
- "http://jabber.org/protocol/pubsub");
+ final Element pubsub = packet.addChild("pubsub", Namespace.PUBSUB);
final Element items = pubsub.addChild("items");
items.setAttribute("node", node);
if (item != null) {
@@ -409,7 +407,7 @@ public class IqGenerator extends AbstractGenerator {
enable.setAttribute("jid", jid.toString());
enable.setAttribute("node", node);
Data data = new Data();
- data.setFormType("http://jabber.org/protocol/pubsub#publish-options");
+ data.setFormType(Namespace.PUBSUB_PUBLISH_OPTIONS);
data.put("secret", secret);
data.submit();
enable.addChild(data);
diff --git a/src/main/java/de/pixart/messenger/parser/IqParser.java b/src/main/java/de/pixart/messenger/parser/IqParser.java
index 999137a02..8f8cf9ae4 100644
--- a/src/main/java/de/pixart/messenger/parser/IqParser.java
+++ b/src/main/java/de/pixart/messenger/parser/IqParser.java
@@ -82,11 +82,11 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
mXmppConnectionService.updateConversationUi();
mXmppConnectionService.updateRosterUi();
mXmppConnectionService.getShortcutService().refresh();
+ mXmppConnectionService.syncRoster(account);
}
public String avatarData(final IqPacket packet) {
- final Element pubsub = packet.findChild("pubsub",
- "http://jabber.org/protocol/pubsub");
+ final Element pubsub = packet.findChild("pubsub", Namespace.PUBSUB);
if (pubsub == null) {
return null;
}
@@ -98,8 +98,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
}
public Element getItem(final IqPacket packet) {
- final Element pubsub = packet.findChild("pubsub",
- "http://jabber.org/protocol/pubsub");
+ final Element pubsub = packet.findChild("pubsub", Namespace.PUBSUB);
if (pubsub == null) {
return null;
}
diff --git a/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java b/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
index 6013ca7e9..152a59f94 100644
--- a/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
+++ b/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
@@ -7,6 +7,7 @@ import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
+import android.os.SystemClock;
import android.util.Base64;
import android.util.Log;
@@ -862,6 +863,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
}
public void writeRoster(final Roster roster) {
+ long start = SystemClock.elapsedRealtime();
final Account account = roster.getAccount();
final SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
@@ -878,6 +880,8 @@ public class DatabaseBackend extends SQLiteOpenHelper {
db.endTransaction();
account.setRosterVersion(roster.getVersion());
updateAccount(account);
+ long duration = SystemClock.elapsedRealtime() - start;
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": persisted roster in " + duration + "ms");
}
public void deleteMessagesInConversation(Conversation conversation) {
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 601f56e22..d83a2fd7f 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -196,37 +196,30 @@ public class XmppConnectionService extends Service {
private OnMessagePacketReceived mMessageParser = new MessageParser(this);
private OnPresencePacketReceived mPresenceParser = new PresenceParser(this);
private IqParser mIqParser = new IqParser(this);
- private OnIqPacketReceived mDefaultIqHandler = new OnIqPacketReceived() {
- @Override
- public void onIqPacketReceived(Account account, IqPacket packet) {
- if (packet.getType() != IqPacket.TYPE.RESULT) {
- Element error = packet.findChild("error");
- String text = error != null ? error.findChildContent("text") : null;
- if (text != null) {
- Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received iq error - " + text);
- }
+ private final OnIqPacketReceived mDefaultIqHandler = (account, packet) -> {
+ if (packet.getType() != IqPacket.TYPE.RESULT) {
+ Element error = packet.findChild("error");
+ String text = error != null ? error.findChildContent("text") : null;
+ if (text != null) {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received iq error - " + text);
}
}
};
private MessageGenerator mMessageGenerator = new MessageGenerator(this);
- public OnContactStatusChanged onContactStatusChanged = new OnContactStatusChanged() {
-
- @Override
- public void onContactStatusChanged(Contact contact, boolean online) {
- Conversation conversation = find(getConversations(), contact);
- if (conversation != null) {
- if (online) {
- conversation.endOtrIfNeeded();
- if (contact.getPresences().size() == 1) {
- sendUnsentMessages(conversation);
- }
- } else {
- //check if the resource we are haveing a conversation with is still online
- if (conversation.hasValidOtrSession()) {
- String otrResource = conversation.getOtrSession().getSessionID().getUserID();
- if (!(Arrays.asList(contact.getPresences().toResourceArray()).contains(otrResource))) {
- conversation.endOtrIfNeeded();
- }
+ public OnContactStatusChanged onContactStatusChanged = (contact, online) -> {
+ Conversation conversation = find(getConversations(), contact);
+ if (conversation != null) {
+ if (online) {
+ conversation.endOtrIfNeeded();
+ if (contact.getPresences().size() == 1) {
+ sendUnsentMessages(conversation);
+ }
+ } else {
+ //check if the resource we are haveing a conversation with is still online
+ if (conversation.hasValidOtrSession()) {
+ String otrResource = conversation.getOtrSession().getSessionID().getUserID();
+ if (!(Arrays.asList(contact.getPresences().toResourceArray()).contains(otrResource))) {
+ conversation.endOtrIfNeeded();
}
}
}
@@ -1102,7 +1095,7 @@ public class XmppConnectionService extends Service {
restoreFromDatabase();
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contactObserver);
- new Thread(() -> fileObserver.startWatching()).start();
+ new Thread(fileObserver::startWatching).start();
if (Config.supportOpenPgp()) {
this.pgpServiceConnection = new OpenPgpServiceConnection(this, "org.sufficientlysecure.keychain", new OpenPgpServiceConnection.OnBound() {
@Override
@@ -1642,6 +1635,10 @@ public class XmppConnectionService extends Service {
}));
}
+ public void syncRoster(final Account account) {
+ mDatabaseWriterExecutor.execute(() -> databaseBackend.writeRoster(account.getRoster()));
+ }
+
public List<Conversation> getConversations() {
return this.conversations;
}
@@ -3036,13 +3033,13 @@ public class XmppConnectionService extends Service {
iq.query(Namespace.ROSTER).addChild(contact.asElement());
account.getXmppConnection().sendIqPacket(iq, mDefaultIqHandler);
if (sendUpdates) {
- sendPresencePacket(account,
- mPresenceGenerator.sendPresenceUpdatesTo(contact));
+ sendPresencePacket(account, mPresenceGenerator.sendPresenceUpdatesTo(contact));
}
if (ask) {
- sendPresencePacket(account,
- mPresenceGenerator.requestPresenceUpdatesFrom(contact));
+ sendPresencePacket(account, mPresenceGenerator.requestPresenceUpdatesFrom(contact));
}
+ } else {
+ syncRoster(contact.getAccount());
}
}
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index 2c8d72aa0..109e0fe5f 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -873,7 +873,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
private void hidePrepareFileToast(final Toast prepareFileToast) {
- if (prepareFileToast != null) {
+ if (prepareFileToast != null && activity != null) {
activity.runOnUiThread(prepareFileToast::cancel);
}
}
diff --git a/src/main/java/de/pixart/messenger/utils/Namespace.java b/src/main/java/de/pixart/messenger/utils/Namespace.java
index 2d6b4708f..b70d8040f 100644
--- a/src/main/java/de/pixart/messenger/utils/Namespace.java
+++ b/src/main/java/de/pixart/messenger/utils/Namespace.java
@@ -14,8 +14,9 @@ public final class Namespace {
public static final String OOB = "jabber:x:oob";
public static final String SASL = "urn:ietf:params:xml:ns:xmpp-sasl";
public static final String TLS = "urn:ietf:params:xml:ns:xmpp-tls";
- public static final String PUBSUB_PUBLISH_OPTIONS = "http://jabber.org/protocol/pubsub#publish-options";
- public static final String PUBSUB_ERROR = "http://jabber.org/protocol/pubsub#errors";
+ public static final String PUBSUB = "http://jabber.org/protocol/pubsub";
+ public static final String PUBSUB_PUBLISH_OPTIONS = PUBSUB + "#publish-options";
+ public static final String PUBSUB_ERROR = PUBSUB + "#errors";
public static final String NICK = "http://jabber.org/protocol/nick";
public static final String FLEXIBLE_OFFLINE_MESSAGE_RETRIEVAL = "http://jabber.org/protocol/offline";
public static final String BIND = "urn:ietf:params:xml:ns:xmpp-bind";