fixed two rare npe

iNPUTmice created

Change summary

src/eu/siacs/conversations/parser/PresenceParser.java     |  5 
src/eu/siacs/conversations/ui/ContactDetailsActivity.java | 88 ++++----
2 files changed, 49 insertions(+), 44 deletions(-)

Detailed changes

src/eu/siacs/conversations/parser/PresenceParser.java 🔗

@@ -37,7 +37,10 @@ public class PresenceParser extends AbstractParser {
 	}
 
 	public void parseContactPresence(PresencePacket packet, Account account) {
-		String[] fromParts = packet.getAttribute("from").split("/");
+		if (packet.getFrom()==null) {
+			return;
+		}
+		String[] fromParts = packet.getFrom().split("/");
 		String type = packet.getAttribute("type");
 		if (fromParts[0].equals(account.getJid())) {
 			if (fromParts.length == 2) {

src/eu/siacs/conversations/ui/ContactDetailsActivity.java 🔗

@@ -305,68 +305,70 @@ public class ContactDetailsActivity extends XmppActivity {
 	protected void onStop() {
 		super.onStop();
 		boolean updated = false;
-		boolean online = contact.getAccount().getStatus() == Account.STATUS_ONLINE;
-		if (contact.getOption(Contact.Options.FROM)) {
-			if (!send.isChecked()) {
-				if (online) {
-					contact.resetOption(Contact.Options.FROM);
-					contact.resetOption(Contact.Options.PREEMPTIVE_GRANT);
-					activity.xmppConnectionService.stopPresenceUpdatesTo(contact);
-				}
-				updated = true;
-			}
-		} else {
-			if (contact
-					.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
+		if (contact!=null) {
+			boolean online = contact.getAccount().getStatus() == Account.STATUS_ONLINE;
+			if (contact.getOption(Contact.Options.FROM)) {
 				if (!send.isChecked()) {
 					if (online) {
+						contact.resetOption(Contact.Options.FROM);
 						contact.resetOption(Contact.Options.PREEMPTIVE_GRANT);
+						activity.xmppConnectionService.stopPresenceUpdatesTo(contact);
 					}
 					updated = true;
 				}
 			} else {
-				if (send.isChecked()) {
-					if (online) {
-						contact.setOption(Contact.Options.PREEMPTIVE_GRANT);
+				if (contact
+						.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
+					if (!send.isChecked()) {
+						if (online) {
+							contact.resetOption(Contact.Options.PREEMPTIVE_GRANT);
+						}
+						updated = true;
+					}
+				} else {
+					if (send.isChecked()) {
+						if (online) {
+							contact.setOption(Contact.Options.PREEMPTIVE_GRANT);
+						}
+						updated = true;
 					}
-					updated = true;
-				}
-			}
-		}
-		if (contact.getOption(Contact.Options.TO)) {
-			if (!receive.isChecked()) {
-				if (online) {
-					contact.resetOption(Contact.Options.TO);
-					activity.xmppConnectionService.stopPresenceUpdatesFrom(contact);
 				}
-				updated = true;
 			}
-		} else {
-			if (contact.getOption(Contact.Options.ASKING)) {
+			if (contact.getOption(Contact.Options.TO)) {
 				if (!receive.isChecked()) {
 					if (online) {
-						contact.resetOption(Contact.Options.ASKING);
-						activity.xmppConnectionService
-							.stopPresenceUpdatesFrom(contact);
+						contact.resetOption(Contact.Options.TO);
+						activity.xmppConnectionService.stopPresenceUpdatesFrom(contact);
 					}
 					updated = true;
 				}
 			} else {
-				if (receive.isChecked()) {
-					if (online) {
-						contact.setOption(Contact.Options.ASKING);
-						activity.xmppConnectionService
-							.requestPresenceUpdatesFrom(contact);
+				if (contact.getOption(Contact.Options.ASKING)) {
+					if (!receive.isChecked()) {
+						if (online) {
+							contact.resetOption(Contact.Options.ASKING);
+							activity.xmppConnectionService
+								.stopPresenceUpdatesFrom(contact);
+						}
+						updated = true;
+					}
+				} else {
+					if (receive.isChecked()) {
+						if (online) {
+							contact.setOption(Contact.Options.ASKING);
+							activity.xmppConnectionService
+								.requestPresenceUpdatesFrom(contact);
+						}
+						updated = true;
 					}
-					updated = true;
 				}
 			}
-		}
-		if (updated) {
-			if (online) {
-				Toast.makeText(getApplicationContext(), getString(R.string.subscription_updated), Toast.LENGTH_SHORT).show();
-			} else {
-				Toast.makeText(getApplicationContext(), getString(R.string.subscription_not_updated_offline), Toast.LENGTH_SHORT).show();
+			if (updated) {
+				if (online) {
+					Toast.makeText(getApplicationContext(), getString(R.string.subscription_updated), Toast.LENGTH_SHORT).show();
+				} else {
+					Toast.makeText(getApplicationContext(), getString(R.string.subscription_not_updated_offline), Toast.LENGTH_SHORT).show();
+				}
 			}
 		}
 	}