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());