fixed problem with null messages. added ask again button

This commit is contained in:
Daniel Gultsch 2014-03-14 18:56:52 +01:00
parent 71cb5548eb
commit 4e20b81bd9
8 changed files with 78 additions and 40 deletions

View file

@ -95,6 +95,18 @@
android:text="Receive presence updates" android:text="Receive presence updates"
android:textSize="18sp" android:textSize="18sp"
android:textColor="#5b5b5b" /> android:textColor="#5b5b5b" />
<TextView
android:id="@+id/ask_again"
android:paddingTop="8dp"
android:paddingLeft="32dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ask_again"
android:textColor="#33B5E5"
android:textSize="18sp"
android:visibility="gone"
/>
<TextView <TextView
style="@style/sectionHeader" style="@style/sectionHeader"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -26,4 +26,5 @@
<string name="account_info">Server Info</string> <string name="account_info">Server Info</string>
<string name="register_account">Register new account on server</string> <string name="register_account">Register new account on server</string>
<string name="share_with">Share with</string> <string name="share_with">Share with</string>
<string name="ask_again"><u>Click to ask again</u></string>
</resources> </resources>

View file

@ -45,6 +45,7 @@ public class Account extends AbstractEntity{
public static final int STATUS_REGISTRATION_FAILED = 7; public static final int STATUS_REGISTRATION_FAILED = 7;
public static final int STATUS_REGISTRATION_CONFLICT = 8; public static final int STATUS_REGISTRATION_CONFLICT = 8;
public static final int STATUS_REGISTRATION_SUCCESSFULL = 9; public static final int STATUS_REGISTRATION_SUCCESSFULL = 9;
public static final int STATUS_REGISTRATION_NOT_SUPPORTED = 10;
protected String username; protected String username;
protected String server; protected String server;

View file

@ -150,7 +150,7 @@ public class XmppConnectionService extends Service {
} else { } else {
// Log.d(LOGTAG, "unparsed message " + packet.toString()); // Log.d(LOGTAG, "unparsed message " + packet.toString());
} }
if (message == null) { if ((message == null)||(message.getBody() == null)) {
return; return;
} }
if (packet.hasChild("delay")) { if (packet.hasChild("delay")) {

View file

@ -42,6 +42,7 @@ public class ContactDetailsActivity extends XmppActivity {
private TextView contactJid; private TextView contactJid;
private TextView accountJid; private TextView accountJid;
private TextView status; private TextView status;
private TextView askAgain;
private CheckBox send; private CheckBox send;
private CheckBox receive; private CheckBox receive;
private QuickContactBadge badge; private QuickContactBadge badge;
@ -107,6 +108,7 @@ public class ContactDetailsActivity extends XmppActivity {
status = (TextView) findViewById(R.id.details_contactstatus); status = (TextView) findViewById(R.id.details_contactstatus);
send = (CheckBox) findViewById(R.id.details_send_presence); send = (CheckBox) findViewById(R.id.details_send_presence);
receive = (CheckBox) findViewById(R.id.details_receive_presence); receive = (CheckBox) findViewById(R.id.details_receive_presence);
askAgain = (TextView) findViewById(R.id.ask_again);
badge = (QuickContactBadge) findViewById(R.id.details_contact_badge); badge = (QuickContactBadge) findViewById(R.id.details_contact_badge);
keys = (LinearLayout) findViewById(R.id.details_contact_keys); keys = (LinearLayout) findViewById(R.id.details_contact_keys);
getActionBar().setHomeButtonEnabled(true); getActionBar().setHomeButtonEnabled(true);
@ -177,7 +179,17 @@ public class ContactDetailsActivity extends XmppActivity {
if (contact.getSubscriptionOption(Contact.Subscription.TO)) { if (contact.getSubscriptionOption(Contact.Subscription.TO)) {
receive.setChecked(true); receive.setChecked(true);
} else { } 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)) { if (contact.getSubscriptionOption(Contact.Subscription.ASKING)) {
receive.setChecked(true); receive.setChecked(true);
} else { } else {

View file

@ -175,6 +175,10 @@ public class ManageAccountActivity extends XmppActivity {
statusView.setText("registration completed"); statusView.setText("registration completed");
statusView.setTextColor(0xFF83b600); statusView.setTextColor(0xFF83b600);
break; break;
case Account.STATUS_REGISTRATION_NOT_SUPPORTED:
statusView.setText("server does not support registration");
statusView.setTextColor(0xFFe92727);
break;
default: default:
statusView.setText(""); statusView.setText("");
break; break;

View file

@ -218,7 +218,7 @@ public class UIHelper {
mBuilder.setSmallIcon(R.drawable.notification); mBuilder.setSmallIcon(R.drawable.notification);
if (notify) { if (notify) {
if (vibrate) { if (vibrate) {
int dat = 110; int dat = 70;
long[] pattern = {0,3*dat,dat,dat,dat,3*dat,dat,dat}; long[] pattern = {0,3*dat,dat,dat,dat,3*dat,dat,dat};
mBuilder.setVibrate(pattern); mBuilder.setVibrate(pattern);
} }

View file

@ -441,42 +441,11 @@ public class XmppConnection implements Runnable {
&& account.isOptionSet(Account.OPTION_USETLS)) { && account.isOptionSet(Account.OPTION_USETLS)) {
sendStartTLS(); sendStartTLS();
} else if (this.streamFeatures.hasChild("register")&&(account.isOptionSet(Account.OPTION_REGISTER))) { } else if (this.streamFeatures.hasChild("register")&&(account.isOptionSet(Account.OPTION_REGISTER))) {
IqPacket register = new IqPacket(IqPacket.TYPE_GET); sendRegistryRequest();
register.query("jabber:iq:register"); } else if (!this.streamFeatures.hasChild("register")&&(account.isOptionSet(Account.OPTION_REGISTER))) {
register.setTo(account.getServer()); //Log.d(LOGTAG,"registration not supported. stream features where"+this.streamFeatures.toString());
sendIqPacket(register, new OnIqPacketReceived() { changeStatus(Account.STATUS_REGISTRATION_NOT_SUPPORTED);
@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); disconnect(true);
}
});
Log.d(LOGTAG,"registering: "+register.toString());
} else {
Log.d(LOGTAG,account.getJid()+": could not register. instructions are"+instructions.getContent());
}
}
});
} else if (this.streamFeatures.hasChild("mechanisms") } else if (this.streamFeatures.hasChild("mechanisms")
&& shouldAuthenticate) { && shouldAuthenticate) {
sendSaslAuth(); 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() { private void sendInitialPresence() {
PresencePacket packet = new PresencePacket(); PresencePacket packet = new PresencePacket();
packet.setAttribute("from", account.getFullJid()); packet.setAttribute("from", account.getFullJid());