answer to xep 184 message receipts. fixes #95
This commit is contained in:
		
							parent
							
								
									99793fa909
								
							
						
					
					
						commit
						cedc1f40b3
					
				| @ -1,12 +1,12 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <resources> | <resources> | ||||||
|     <array name="resources"> |     <string-array name="resources"> | ||||||
|         <item>Mobile</item> |         <item>Mobile</item> | ||||||
|         <item>Phone</item> |         <item>Phone</item> | ||||||
|         <item>Tablet</item> |         <item>Tablet</item> | ||||||
|         <item>Conversations</item> |         <item>Conversations</item> | ||||||
|         <item>Android</item> |         <item>Android</item> | ||||||
|     </array> |     </string-array> | ||||||
|     <string-array name="filesizes"> |     <string-array name="filesizes"> | ||||||
|         <item>never</item> |         <item>never</item> | ||||||
|         <item>256 KB</item> |         <item>256 KB</item> | ||||||
| @ -19,4 +19,16 @@ | |||||||
|         <item>524288</item> |         <item>524288</item> | ||||||
|         <item>1048576</item> |         <item>1048576</item> | ||||||
|     </string-array> |     </string-array> | ||||||
|  |     <string-array name="message_acks"> | ||||||
|  |         <item>never</item> | ||||||
|  |         <item>when received</item> | ||||||
|  |         <item>when read</item> | ||||||
|  |         <item>when received and when read</item> | ||||||
|  |     </string-array> | ||||||
|  |     <string-array name="message_acks_values"> | ||||||
|  | 		<item>0</item> | ||||||
|  | 		<item>1</item> | ||||||
|  | 		<item>2</item> | ||||||
|  | 		<item>3</item>         | ||||||
|  |     </string-array> | ||||||
| </resources> | </resources> | ||||||
|  | |||||||
| @ -145,6 +145,8 @@ | |||||||
|     <string name="pref_advanced_options">Advanced Options</string> |     <string name="pref_advanced_options">Advanced Options</string> | ||||||
|     <string name="pref_never_send_crash">Never send crash reports</string> |     <string name="pref_never_send_crash">Never send crash reports</string> | ||||||
|     <string name="pref_never_send_crash_summary">By sending in stack traces you are helping the ongoing development of Conversations</string> |     <string name="pref_never_send_crash_summary">By sending in stack traces you are helping the ongoing development of Conversations</string> | ||||||
|  |     <string name="pref_auto_acknowledge_messages">Acknowledge Messages</string> | ||||||
|  |     <string name="pref_auto_acknowledge_messages_summary">Allows your contact to know whether or not you have received or read a specific message</string> | ||||||
|     <string name="openpgp_error">OpenKeychain reporeted an error</string> |     <string name="openpgp_error">OpenKeychain reporeted an error</string> | ||||||
|     <string name="error_decrypting_file">I/O Error decrypting file</string> |     <string name="error_decrypting_file">I/O Error decrypting file</string> | ||||||
|     <string name="error_copying_image_file">Error copying image file.</string> |     <string name="error_copying_image_file">Error copying image file.</string> | ||||||
|  | |||||||
| @ -22,6 +22,14 @@ | |||||||
|             android:entries="@array/filesizes" |             android:entries="@array/filesizes" | ||||||
|             android:entryValues="@array/filesizes_values" |             android:entryValues="@array/filesizes_values" | ||||||
|             android:defaultValue="524288"/> |             android:defaultValue="524288"/> | ||||||
|  |         <ListPreference  | ||||||
|  |             android:key="auto_acknowledge_messages" | ||||||
|  |             android:title="@string/pref_auto_acknowledge_messages" | ||||||
|  |             android:summary="@string/pref_auto_acknowledge_messages_summary" | ||||||
|  |             android:entries="@array/message_acks" | ||||||
|  |             android:entryValues="@array/message_acks_values" | ||||||
|  |             android:defaultValue="2" | ||||||
|  |             /> | ||||||
|     </PreferenceCategory> |     </PreferenceCategory> | ||||||
|     <PreferenceCategory  |     <PreferenceCategory  | ||||||
|         android:title="@string/pref_notification_settings"> |         android:title="@string/pref_notification_settings"> | ||||||
|  | |||||||
| @ -140,6 +140,7 @@ public class XmppConnectionService extends Service { | |||||||
| 				notify = (SystemClock.elapsedRealtime() - lastCarbonMessageReceived) > CARBON_GRACE_PERIOD; | 				notify = (SystemClock.elapsedRealtime() - lastCarbonMessageReceived) > CARBON_GRACE_PERIOD; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
|  | 
 | ||||||
| 			if ((packet.getType() == MessagePacket.TYPE_CHAT)) { | 			if ((packet.getType() == MessagePacket.TYPE_CHAT)) { | ||||||
| 				String pgpBody = mMessageParser.getPgpBody(packet); | 				String pgpBody = mMessageParser.getPgpBody(packet); | ||||||
| 				if (pgpBody != null) { | 				if (pgpBody != null) { | ||||||
| @ -217,6 +218,25 @@ public class XmppConnectionService extends Service { | |||||||
| 					Log.d(LOGTAG, "error trying to parse date" + e.getMessage()); | 					Log.d(LOGTAG, "error trying to parse date" + e.getMessage()); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 			if ((confirmReception()) && ((packet.getId() != null))) { | ||||||
|  | 				MessagePacket receivedPacket = new MessagePacket(); | ||||||
|  | 				receivedPacket.setType(MessagePacket.TYPE_UNKNOWN); | ||||||
|  | 				receivedPacket.setTo(message.getCounterpart()); | ||||||
|  | 				receivedPacket.setFrom(account.getFullJid()); | ||||||
|  | 				if (packet.hasChild("markable", "urn:xmpp:chat-markers:0")) { | ||||||
|  | 					Element received = receivedPacket.addChild("received", | ||||||
|  | 							"urn:xmpp:chat-markers:0"); | ||||||
|  | 					received.setAttribute("id", packet.getId()); | ||||||
|  | 					account.getXmppConnection().sendMessagePacket( | ||||||
|  | 							receivedPacket); | ||||||
|  | 				} else if (packet.hasChild("request", "urn:xmpp:receipts")) { | ||||||
|  | 					Element received = receivedPacket.addChild("received", | ||||||
|  | 							"urn:xmpp:receipts"); | ||||||
|  | 					received.setAttribute("id", packet.getId()); | ||||||
|  | 					account.getXmppConnection().sendMessagePacket( | ||||||
|  | 							receivedPacket); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 			Conversation conversation = message.getConversation(); | 			Conversation conversation = message.getConversation(); | ||||||
| 			conversation.getMessages().add(message); | 			conversation.getMessages().add(message); | ||||||
| 			if (packet.getType() != MessagePacket.TYPE_ERROR) { | 			if (packet.getType() != MessagePacket.TYPE_ERROR) { | ||||||
| @ -336,7 +356,8 @@ public class XmppConnectionService extends Service { | |||||||
| 											msg, x.getContent())); | 											msg, x.getContent())); | ||||||
| 								} | 								} | ||||||
| 							} | 							} | ||||||
| 							onContactStatusChanged.onContactStatusChanged(contact); | 							onContactStatusChanged | ||||||
|  | 									.onContactStatusChanged(contact); | ||||||
| 						} | 						} | ||||||
| 					} else if (type.equals("unavailable")) { | 					} else if (type.equals("unavailable")) { | ||||||
| 						if (fromParts.length != 2) { | 						if (fromParts.length != 2) { | ||||||
| @ -400,6 +421,9 @@ public class XmppConnectionService extends Service { | |||||||
| 						"urn:xmpp:jingle:transports:s5b:1"); | 						"urn:xmpp:jingle:transports:s5b:1"); | ||||||
| 				query.addChild("feature").setAttribute("var", | 				query.addChild("feature").setAttribute("var", | ||||||
| 						"urn:xmpp:jingle:transports:ibb:1"); | 						"urn:xmpp:jingle:transports:ibb:1"); | ||||||
|  | 				if (confirmReception()) { | ||||||
|  | 					query.addChild("feature").setAttribute("var", "urn:xmpp:receipts"); | ||||||
|  | 				} | ||||||
| 				account.getXmppConnection().sendIqPacket(iqResponse, null); | 				account.getXmppConnection().sendIqPacket(iqResponse, null); | ||||||
| 			} else { | 			} else { | ||||||
| 				if ((packet.getType() == IqPacket.TYPE_GET) | 				if ((packet.getType() == IqPacket.TYPE_GET) | ||||||
| @ -868,6 +892,7 @@ public class XmppConnectionService extends Service { | |||||||
| 				packet.setTo(message.getCounterpart()); | 				packet.setTo(message.getCounterpart()); | ||||||
| 				packet.setFrom(account.getJid()); | 				packet.setFrom(account.getJid()); | ||||||
| 			} | 			} | ||||||
|  | 			packet.addChild("markable", "urn:xmpp:chat-markers:0"); | ||||||
| 		} else if (message.getConversation().getMode() == Conversation.MODE_MULTI) { | 		} else if (message.getConversation().getMode() == Conversation.MODE_MULTI) { | ||||||
| 			packet.setType(MessagePacket.TYPE_GROUPCHAT); | 			packet.setType(MessagePacket.TYPE_GROUPCHAT); | ||||||
| 			packet.setBody(message.getBody()); | 			packet.setBody(message.getBody()); | ||||||
| @ -1133,8 +1158,7 @@ public class XmppConnectionService extends Service { | |||||||
| 			x.addChild("history").setAttribute("seconds", diff + ""); | 			x.addChild("history").setAttribute("seconds", diff + ""); | ||||||
| 		} | 		} | ||||||
| 		packet.addChild(x); | 		packet.addChild(x); | ||||||
| 		account.getXmppConnection() | 		account.getXmppConnection().sendPresencePacket(packet); | ||||||
| 				.sendPresencePacket(packet); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private OnRenameListener renameListener = null; | 	private OnRenameListener renameListener = null; | ||||||
| @ -1424,6 +1448,18 @@ public class XmppConnectionService extends Service { | |||||||
| 				.getDefaultSharedPreferences(getApplicationContext()); | 				.getDefaultSharedPreferences(getApplicationContext()); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | 	private boolean confirmReception() { | ||||||
|  | 		String autoAcks = getPreferences().getString( | ||||||
|  | 				"auto_acknowledge_messages", "2"); | ||||||
|  | 		int autoAcksValue; | ||||||
|  | 		try { | ||||||
|  | 			autoAcksValue = Integer.parseInt(autoAcks); | ||||||
|  | 		} catch (NumberFormatException e) { | ||||||
|  | 			autoAcksValue = 0; | ||||||
|  | 		} | ||||||
|  | 		return autoAcksValue == 1 || autoAcksValue == 3; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public void updateUi(Conversation conversation, boolean notify) { | 	public void updateUi(Conversation conversation, boolean notify) { | ||||||
| 		if (convChangedListener != null) { | 		if (convChangedListener != null) { | ||||||
| 			convChangedListener.onConversationListChanged(); | 			convChangedListener.onConversationListChanged(); | ||||||
|  | |||||||
| @ -37,6 +37,8 @@ public class MessagePacket extends AbstractStanza { | |||||||
| 		case TYPE_GROUPCHAT: | 		case TYPE_GROUPCHAT: | ||||||
| 			this.setAttribute("type", "groupchat"); | 			this.setAttribute("type", "groupchat"); | ||||||
| 			break; | 			break; | ||||||
|  | 		case TYPE_UNKNOWN: | ||||||
|  | 			break; | ||||||
| 		default: | 		default: | ||||||
| 			this.setAttribute("type","chat"); | 			this.setAttribute("type","chat"); | ||||||
| 			break; | 			break; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 iNPUTmice
						iNPUTmice