Improve display name to avoid callback when it did not change

Update the caller display name only if the name actually changed.
This avoids excessive computations on the receiver end as apps such
as dialer listen to these changes and rebuild UI models when they
change.

Defer-CP-To-TM: 240341306
Bug: 240341306
Test: Manual logs to verify callback triggers only when changed.
Test: atest CallDetailsTest

Change-Id: I1c81049240042232ca5c3efa9a75ce2ef2de1829
This commit is contained in:
Edgar Arriaga
2022-10-14 14:25:14 -07:00
parent 489bdd0de4
commit 2db19d26c9

View File

@@ -66,6 +66,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -2531,11 +2532,21 @@ public abstract class Connection extends Conferenceable {
*/
public final void setCallerDisplayName(String callerDisplayName, int presentation) {
checkImmutable();
Log.d(this, "setCallerDisplayName %s", callerDisplayName);
mCallerDisplayName = callerDisplayName;
mCallerDisplayNamePresentation = presentation;
for (Listener l : mListeners) {
l.onCallerDisplayNameChanged(this, callerDisplayName, presentation);
boolean nameChanged = !Objects.equals(mCallerDisplayName, callerDisplayName);
boolean presentationChanged = mCallerDisplayNamePresentation != presentation;
if (nameChanged) {
// Ensure the new name is not clobbering the old one with a null value due to the caller
// wanting to only set the presentation and not knowing the display name.
mCallerDisplayName = callerDisplayName;
}
if (presentationChanged) {
mCallerDisplayNamePresentation = presentation;
}
if (nameChanged || presentationChanged) {
for (Listener l : mListeners) {
l.onCallerDisplayNameChanged(this, mCallerDisplayName,
mCallerDisplayNamePresentation);
}
}
}