summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2015-10-06 13:05:17 -0700
committerTyler Gunn <tgunn@google.com>2015-10-06 13:05:17 -0700
commit7a2da71d22645d619e04b1704138f183a5e47724 (patch)
tree368978e9c27a00ef5dcf13dae18a7167ca5ca2ef
parentefabe88a8dc60d6f9187bebc4756f0bdedfcb925 (diff)
downloadInCallUI-7a2da71d22645d619e04b1704138f183a5e47724.tar.gz
Handle child number changes after the call starts.
The child number display functionality assumed that the child number for a call would only bet set at the start of the call. This change removes that assumption and supports changes to the child number at any point during the call by adding a new listener to the InCall Call List. It appears there are some instances in reality where the child number can come in after the start of a call (delayed only slightly, but enough to prevent the number from showing up). Bug: 24585039 Change-Id: I23148e8c4265f1bc16ce563f2919e9b3eb71784f
-rw-r--r--src/com/android/incallui/AnswerPresenter.java5
-rw-r--r--src/com/android/incallui/Call.java5
-rw-r--r--src/com/android/incallui/CallCardPresenter.java13
-rw-r--r--src/com/android/incallui/CallList.java20
-rw-r--r--src/com/android/incallui/StatusBarNotifier.java5
5 files changed, 46 insertions, 2 deletions
diff --git a/src/com/android/incallui/AnswerPresenter.java b/src/com/android/incallui/AnswerPresenter.java
index fc75bf03..97f60c05 100644
--- a/src/com/android/incallui/AnswerPresenter.java
+++ b/src/com/android/incallui/AnswerPresenter.java
@@ -113,6 +113,11 @@ public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
// no-op
}
+ @Override
+ public void onChildNumberChange() {
+ // no-op
+ }
+
private boolean isVideoUpgradePending(Call call) {
return call.getSessionModificationState()
== Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST;
diff --git a/src/com/android/incallui/Call.java b/src/com/android/incallui/Call.java
index 01205ff1..16a53b29 100644
--- a/src/com/android/incallui/Call.java
+++ b/src/com/android/incallui/Call.java
@@ -334,12 +334,13 @@ public class Call {
Bundle callExtras = mTelecommCall.getDetails().getExtras();
if (callExtras != null) {
- // Child address arrives when the call is first set up, so we do not need to notify the
- // UI of this.
+ // Check for a change in the child address and notify any listeners.
if (callExtras.containsKey(Connection.EXTRA_CHILD_ADDRESS)) {
String childNumber = callExtras.getString(Connection.EXTRA_CHILD_ADDRESS);
+
if (!Objects.equals(childNumber, mChildNumber)) {
mChildNumber = childNumber;
+ CallList.getInstance().onChildNumberChange(this);
}
}
diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java
index 0cc5da1c..f0193c4e 100644
--- a/src/com/android/incallui/CallCardPresenter.java
+++ b/src/com/android/incallui/CallCardPresenter.java
@@ -347,6 +347,19 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
updatePrimaryDisplayInfo();
}
+ /**
+ * Handles a change to the child number by refreshing the primary call info.
+ */
+ @Override
+ public void onChildNumberChange() {
+ Log.v(this, "onChildNumberChange");
+
+ if (mPrimary == null) {
+ return;
+ }
+ updatePrimaryDisplayInfo();
+ }
+
private String getSubscriptionNumber() {
// If it's an emergency call, and they're not populating the callback number,
// then try to fall back to the phone sub info (to hopefully get the SIM's
diff --git a/src/com/android/incallui/CallList.java b/src/com/android/incallui/CallList.java
index 666ba952..11b5914f 100644
--- a/src/com/android/incallui/CallList.java
+++ b/src/com/android/incallui/CallList.java
@@ -176,6 +176,21 @@ public class CallList {
}
}
+ /**
+ * Called when the child number changes for a call. The child number can be received after a
+ * call is initially set up, so we need to be able to inform listeners of the change.
+ *
+ * @param call The call.
+ */
+ public void onChildNumberChange(Call call) {
+ final List<CallUpdateListener> listeners = mCallUpdateListenerMap.get(call.getId());
+ if (listeners != null) {
+ for (CallUpdateListener listener : listeners) {
+ listener.onChildNumberChange();
+ }
+ }
+ }
+
public void notifyCallUpdateListeners(Call call) {
final List<CallUpdateListener> listeners = mCallUpdateListenerMap.get(call.getId());
if (listeners != null) {
@@ -632,5 +647,10 @@ public class CallList {
* Notifies of a change to the last forwarded number for a call.
*/
public void onLastForwardedNumberChange();
+
+ /**
+ * Notifies of a change to the child number for a call.
+ */
+ public void onChildNumberChange();
}
}
diff --git a/src/com/android/incallui/StatusBarNotifier.java b/src/com/android/incallui/StatusBarNotifier.java
index 3f862a24..a9b6cccb 100644
--- a/src/com/android/incallui/StatusBarNotifier.java
+++ b/src/com/android/incallui/StatusBarNotifier.java
@@ -654,4 +654,9 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener,
public void onLastForwardedNumberChange() {
// no-op
}
+
+ @Override
+ public void onChildNumberChange() {
+ // no-op
+ }
}