From 5ed22a06e3996ec36b6f39a208de5d98a3e3289a Mon Sep 17 00:00:00 2001 From: Aline Bonnet <aline.bonnet@savoirfairelinux.com> Date: Thu, 19 Jan 2017 13:58:46 -0500 Subject: [PATCH] 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 --- .../java/cx/ring/service/LocalService.java | 22 +++------------- .../main/java/cx/ring/model/Conversation.java | 8 ++++++ .../main/java/cx/ring/model/HistoryCall.java | 26 +++++++++++++++++++ .../main/java/cx/ring/model/HistoryEntry.java | 2 +- 4 files changed, 38 insertions(+), 20 deletions(-) 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 f2e9a3aa8..81e55e89b 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 @@ public class LocalService extends Service implements Observer<DaemonEvent> { 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 de2abd272..8a7e57fd7 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 @@ public class Conversation { 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 31854fcf4..e9120f081 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 @@ public class HistoryCall implements Serializable { 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 36dce4db3..18cd946a8 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 @@ public class HistoryEntry { * @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 { -- GitLab