/** * Set a ack-user update listener. * * @param msg * @param listener Nullable, if this is null, will remove this msg's listener from listener map. */ public void setUserUpdateListener(EMMessage msg, @Nullable IAckUserUpdateListener listener) { if (!validateMessage(msg)) { return; } String key = msg.getMsgId(); if (listener == null) { listenerMap.remove(key); } else { listenerMap.put(key, new WeakReference<>(listener)); } }
/** * Delete the native stored acked users if this message deleted. * * @param message */ public void delete(EMMessage message) { if (!validateMessage(message)) { return; } String conversationId = message.getTo(); String msgId = message.getMsgId(); // Remove the memory data. LruCache<String, List<String>> msgCache = dataCache.get(conversationId); if (msgCache != null) { msgCache.remove(msgId); } // Delete the data in preferences. String key = generateKey(conversationId, msgId); if (dataPrefs.contains(key)) { prefsEditor.remove(key).commit(); } }
if (!validateMessage(message)) { return null;
public void sendAckMessage(EMMessage message) { if (!validateMessage(message)) { return; } if (message.isAcked()) { return; } // May a user login from multiple devices, so do not need to send the ack msg. if (EMClient.getInstance().getCurrentUser().equalsIgnoreCase(message.getFrom())) { return; } try { // cmd-type message will not store in native database. EMMessage msg = EMMessage.createSendMessage(EMMessage.Type.CMD); msg.setTo(message.getFrom()); msg.setAttribute(KEY_CONVERSATION_ID, message.getTo()); msg.setAttribute(KEY_DING_ACK, true); msg.addBody(new EMCmdMessageBody(message.getMsgId())); EMClient.getInstance().chatManager().sendMessage(msg); message.setAcked(true); EMLog.i(TAG, "Send the group ack cmd-type message."); } catch (Exception e) { } }