conversation: fix the historyCall display
Since the a316216 commit, the call messages could be displayed several
times. This commit checks if a call message is already displayed.
Change-Id: I72b74ccd9e9d454d603009de4de1595a6f89279f
Tuleap: #1470
diff --git a/ring-android/app/src/main/java/cx/ring/service/LocalService.java b/ring-android/app/src/main/java/cx/ring/service/LocalService.java
index f2e9a3a..81e55e8 100644
--- a/ring-android/app/src/main/java/cx/ring/service/LocalService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/LocalService.java
@@ -909,27 +909,11 @@
for (HistoryCall call : history) {
CallContact contact = getCreateContact(call.getContactID(), call.getContactKey(), call.getNumber());
- Map.Entry<String, Conversation> merge = null;
- for (Map.Entry<String, Conversation> ce : conversations.entrySet()) {
- Conversation conversation = ce.getValue();
- if ((contact.getId() > 0 && contact.getId() == conversation.getContact().getId()) || conversation.getContact().hasNumber(call.getNumber())) {
- merge = ce;
- break;
- }
- }
- if (merge != null) {
- Conversation conversation = merge.getValue();
- if (conversation.getContact().getId() <= 0 && contact.getId() > 0) {
- conversation.setContact(contact);
- conversations.remove(merge.getKey());
- conversations.put(contact.getIds().get(0), conversation);
- }
- conversation.addHistoryCall(call);
- continue;
- }
String key = contact.getIds().get(0);
if (conversations.containsKey(key)) {
- conversations.get(key).addHistoryCall(call);
+ if (!conversations.get(key).getHistoryCalls().contains(call)) {
+ conversations.get(key).addHistoryCall(call);
+ }
} else {
Conversation conversation = new Conversation(contact);
conversation.addHistoryCall(call);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java b/ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java
index de2abd2..8a7e57f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java
@@ -238,6 +238,14 @@
return texts.values();
}
+ public Collection<HistoryCall> getHistoryCalls() {
+ TreeMap<Long, HistoryCall> calls = new TreeMap<>();
+ for (HistoryEntry historyEntry : mHistory.values()) {
+ calls.putAll(historyEntry.getCalls());
+ }
+ return calls.values();
+ }
+
public TreeMap<Long, TextMessage> getUnreadTextMessages() {
TreeMap<Long, TextMessage> texts = new TreeMap<>();
for (HistoryEntry h : mHistory.values()) {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/HistoryCall.java b/ring-android/libringclient/src/main/java/cx/ring/model/HistoryCall.java
index 31854fc..e9120f0 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/HistoryCall.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/model/HistoryCall.java
@@ -169,4 +169,30 @@
return callID;
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ HistoryCall that = (HistoryCall) o;
+
+ if (call_start != that.call_start || call_end != that.call_end || contactID != that.contactID) {
+ return false;
+ }
+ return callID != null ? callID.equals(that.callID) : that.callID == null;
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (call_start ^ (call_start >>> 32));
+ result = 31 * result + (int) (call_end ^ (call_end >>> 32));
+ result = 31 * result + (int) (contactID ^ (contactID >>> 32));
+ result = 31 * result + (callID != null ? callID.hashCode() : 0);
+ return result;
+ }
}
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/HistoryEntry.java b/ring-android/libringclient/src/main/java/cx/ring/model/HistoryEntry.java
index 36dce4d..18cd946 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/HistoryEntry.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/model/HistoryEntry.java
@@ -80,7 +80,7 @@
* @param linkedTo The associated CallContact
*/
public void addHistoryCall(HistoryCall historyCall, CallContact linkedTo) {
- mCalls.put(historyCall.call_start, historyCall);
+ mCalls.put(historyCall.call_end, historyCall);
if (historyCall.isIncoming()) {
++mIncomingCount;
} else {