diff --git a/res/layout/activity_contact_details.xml b/res/layout/activity_contact_details.xml
index cfa77a4d7..ac5f48558 100644
--- a/res/layout/activity_contact_details.xml
+++ b/res/layout/activity_contact_details.xml
@@ -88,13 +88,25 @@
android:textSize="18sp"
android:textColor="#5b5b5b" />
-
+
+
Server Info
Register new account on server
Share with
+ Click to ask again
diff --git a/src/eu/siacs/conversations/entities/Account.java b/src/eu/siacs/conversations/entities/Account.java
index 5d2e3ccc8..d9a3ef03b 100644
--- a/src/eu/siacs/conversations/entities/Account.java
+++ b/src/eu/siacs/conversations/entities/Account.java
@@ -45,6 +45,7 @@ public class Account extends AbstractEntity{
public static final int STATUS_REGISTRATION_FAILED = 7;
public static final int STATUS_REGISTRATION_CONFLICT = 8;
public static final int STATUS_REGISTRATION_SUCCESSFULL = 9;
+ public static final int STATUS_REGISTRATION_NOT_SUPPORTED = 10;
protected String username;
protected String server;
diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java
index bd23c056e..6b025d992 100644
--- a/src/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/eu/siacs/conversations/services/XmppConnectionService.java
@@ -150,7 +150,7 @@ public class XmppConnectionService extends Service {
} else {
// Log.d(LOGTAG, "unparsed message " + packet.toString());
}
- if (message == null) {
+ if ((message == null)||(message.getBody() == null)) {
return;
}
if (packet.hasChild("delay")) {
diff --git a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java
index 46e5ab327..5dc6eb3b7 100644
--- a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java
+++ b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java
@@ -42,6 +42,7 @@ public class ContactDetailsActivity extends XmppActivity {
private TextView contactJid;
private TextView accountJid;
private TextView status;
+ private TextView askAgain;
private CheckBox send;
private CheckBox receive;
private QuickContactBadge badge;
@@ -107,6 +108,7 @@ public class ContactDetailsActivity extends XmppActivity {
status = (TextView) findViewById(R.id.details_contactstatus);
send = (CheckBox) findViewById(R.id.details_send_presence);
receive = (CheckBox) findViewById(R.id.details_receive_presence);
+ askAgain = (TextView) findViewById(R.id.ask_again);
badge = (QuickContactBadge) findViewById(R.id.details_contact_badge);
keys = (LinearLayout) findViewById(R.id.details_contact_keys);
getActionBar().setHomeButtonEnabled(true);
@@ -177,7 +179,17 @@ public class ContactDetailsActivity extends XmppActivity {
if (contact.getSubscriptionOption(Contact.Subscription.TO)) {
receive.setChecked(true);
} else {
- receive.setText("Request presence updates");
+ receive.setText("Ask for presence updates");
+ askAgain.setVisibility(View.VISIBLE);
+ askAgain.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ Toast.makeText(getApplicationContext(), "Asked for presence updates",Toast.LENGTH_SHORT).show();
+ xmppConnectionService.requestPresenceUpdatesFrom(contact);
+
+ }
+ });
if (contact.getSubscriptionOption(Contact.Subscription.ASKING)) {
receive.setChecked(true);
} else {
diff --git a/src/eu/siacs/conversations/ui/ManageAccountActivity.java b/src/eu/siacs/conversations/ui/ManageAccountActivity.java
index 22f7c78fb..7cf39e783 100644
--- a/src/eu/siacs/conversations/ui/ManageAccountActivity.java
+++ b/src/eu/siacs/conversations/ui/ManageAccountActivity.java
@@ -175,6 +175,10 @@ public class ManageAccountActivity extends XmppActivity {
statusView.setText("registration completed");
statusView.setTextColor(0xFF83b600);
break;
+ case Account.STATUS_REGISTRATION_NOT_SUPPORTED:
+ statusView.setText("server does not support registration");
+ statusView.setTextColor(0xFFe92727);
+ break;
default:
statusView.setText("");
break;
diff --git a/src/eu/siacs/conversations/utils/UIHelper.java b/src/eu/siacs/conversations/utils/UIHelper.java
index 544f94298..f66cc7345 100644
--- a/src/eu/siacs/conversations/utils/UIHelper.java
+++ b/src/eu/siacs/conversations/utils/UIHelper.java
@@ -218,7 +218,7 @@ public class UIHelper {
mBuilder.setSmallIcon(R.drawable.notification);
if (notify) {
if (vibrate) {
- int dat = 110;
+ int dat = 70;
long[] pattern = {0,3*dat,dat,dat,dat,3*dat,dat,dat};
mBuilder.setVibrate(pattern);
}
diff --git a/src/eu/siacs/conversations/xmpp/XmppConnection.java b/src/eu/siacs/conversations/xmpp/XmppConnection.java
index 677c0ba66..668391adb 100644
--- a/src/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -441,42 +441,11 @@ public class XmppConnection implements Runnable {
&& account.isOptionSet(Account.OPTION_USETLS)) {
sendStartTLS();
} else if (this.streamFeatures.hasChild("register")&&(account.isOptionSet(Account.OPTION_REGISTER))) {
- IqPacket register = new IqPacket(IqPacket.TYPE_GET);
- register.query("jabber:iq:register");
- register.setTo(account.getServer());
- sendIqPacket(register, new OnIqPacketReceived() {
-
- @Override
- public void onIqPacketReceived(Account account, IqPacket packet) {
- Element instructions = packet.query().findChild("instructions");
- if (packet.query().hasChild("username")&&(packet.query().hasChild("password"))) {
- IqPacket register = new IqPacket(IqPacket.TYPE_SET);
- Element username = new Element("username").setContent(account.getUsername());
- Element password = new Element("password").setContent(account.getPassword());
- register.query("jabber:iq:register").addChild(username).addChild(password);
- sendIqPacket(register, new OnIqPacketReceived() {
-
- @Override
- public void onIqPacketReceived(Account account, IqPacket packet) {
- if (packet.getType()==IqPacket.TYPE_RESULT) {
- account.setOption(Account.OPTION_REGISTER, false);
- changeStatus(Account.STATUS_REGISTRATION_SUCCESSFULL);
- Log.d(LOGTAG,"successfull");
- } else if (packet.hasChild("error")&&(packet.findChild("error").hasChild("conflict"))){
- changeStatus(Account.STATUS_REGISTRATION_CONFLICT);
- } else {
- changeStatus(Account.STATUS_REGISTRATION_FAILED);
- Log.d(LOGTAG,packet.toString());
- }
- disconnect(true);
- }
- });
- Log.d(LOGTAG,"registering: "+register.toString());
- } else {
- Log.d(LOGTAG,account.getJid()+": could not register. instructions are"+instructions.getContent());
- }
- }
- });
+ sendRegistryRequest();
+ } else if (!this.streamFeatures.hasChild("register")&&(account.isOptionSet(Account.OPTION_REGISTER))) {
+ //Log.d(LOGTAG,"registration not supported. stream features where"+this.streamFeatures.toString());
+ changeStatus(Account.STATUS_REGISTRATION_NOT_SUPPORTED);
+ disconnect(true);
} else if (this.streamFeatures.hasChild("mechanisms")
&& shouldAuthenticate) {
sendSaslAuth();
@@ -499,6 +468,45 @@ public class XmppConnection implements Runnable {
}
}
+ private void sendRegistryRequest() {
+ IqPacket register = new IqPacket(IqPacket.TYPE_GET);
+ register.query("jabber:iq:register");
+ register.setTo(account.getServer());
+ sendIqPacket(register, new OnIqPacketReceived() {
+
+ @Override
+ public void onIqPacketReceived(Account account, IqPacket packet) {
+ Element instructions = packet.query().findChild("instructions");
+ if (packet.query().hasChild("username")&&(packet.query().hasChild("password"))) {
+ IqPacket register = new IqPacket(IqPacket.TYPE_SET);
+ Element username = new Element("username").setContent(account.getUsername());
+ Element password = new Element("password").setContent(account.getPassword());
+ register.query("jabber:iq:register").addChild(username).addChild(password);
+ sendIqPacket(register, new OnIqPacketReceived() {
+
+ @Override
+ public void onIqPacketReceived(Account account, IqPacket packet) {
+ if (packet.getType()==IqPacket.TYPE_RESULT) {
+ account.setOption(Account.OPTION_REGISTER, false);
+ changeStatus(Account.STATUS_REGISTRATION_SUCCESSFULL);
+ } else if (packet.hasChild("error")&&(packet.findChild("error").hasChild("conflict"))){
+ changeStatus(Account.STATUS_REGISTRATION_CONFLICT);
+ } else {
+ changeStatus(Account.STATUS_REGISTRATION_FAILED);
+ Log.d(LOGTAG,packet.toString());
+ }
+ disconnect(true);
+ }
+ });
+ } else {
+ changeStatus(Account.STATUS_REGISTRATION_FAILED);
+ disconnect(true);
+ Log.d(LOGTAG,account.getJid()+": could not register. instructions are"+instructions.getContent());
+ }
+ }
+ });
+ }
+
private void sendInitialPresence() {
PresencePacket packet = new PresencePacket();
packet.setAttribute("from", account.getFullJid());