Emergency redial implementation
Define connection event to notify
Telecom/InCallUi about change in
account handle after redial and extra
for emergency phone handle.
Bug: 27059146
Change-Id: Ie72ab2901ec05d972204ed11f115a05b79173c1d
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index 63772a1..d7412a7 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -806,6 +806,8 @@
public void onRttInitiationFailure(Connection c, int reason) {}
public void onRttSessionRemotelyTerminated(Connection c) {}
public void onRemoteRttRequest(Connection c) {}
+ /** @hide */
+ public void onPhoneAccountChanged(Connection c, PhoneAccountHandle pHandle) {}
}
/**
@@ -3044,6 +3046,18 @@
}
/**
+ * Notifies listeners when phone account is changed. For example, when the PhoneAccount is
+ * changed due to an emergency call being redialed.
+ * @param pHandle The new PhoneAccountHandle for this connection.
+ * @hide
+ */
+ public void notifyPhoneAccountChanged(PhoneAccountHandle pHandle) {
+ for (Listener l : mListeners) {
+ l.onPhoneAccountChanged(this, pHandle);
+ }
+ }
+
+ /**
* Sends an event associated with this {@code Connection} with associated event extras to the
* {@link InCallService}.
* <p>
diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java
index 6202d59..2faa96b 100644
--- a/telecomm/java/android/telecom/ConnectionService.java
+++ b/telecomm/java/android/telecom/ConnectionService.java
@@ -1314,6 +1314,14 @@
mAdapter.onRemoteRttRequest(id);
}
}
+
+ @Override
+ public void onPhoneAccountChanged(Connection c, PhoneAccountHandle pHandle) {
+ String id = mIdByConnection.get(c);
+ if (id != null) {
+ mAdapter.onPhoneAccountChanged(id, pHandle);
+ }
+ }
};
/** {@inheritDoc} */
diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapter.java b/telecomm/java/android/telecom/ConnectionServiceAdapter.java
index 63bdf74..111fcc7 100644
--- a/telecomm/java/android/telecom/ConnectionServiceAdapter.java
+++ b/telecomm/java/android/telecom/ConnectionServiceAdapter.java
@@ -609,4 +609,20 @@
}
}
}
+
+ /**
+ * Notifies Telecom that a call's PhoneAccountHandle has changed.
+ *
+ * @param callId The unique ID of the call.
+ * @param pHandle The new PhoneAccountHandle associated with the call.
+ */
+ void onPhoneAccountChanged(String callId, PhoneAccountHandle pHandle) {
+ for (IConnectionServiceAdapter adapter : mAdapters) {
+ try {
+ Log.d(this, "onPhoneAccountChanged %s", callId);
+ adapter.onPhoneAccountChanged(callId, pHandle, Log.getExternalSession());
+ } catch (RemoteException ignored) {
+ }
+ }
+ }
}
diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java
index 80e3c33..b1617f4 100644
--- a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java
+++ b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java
@@ -72,6 +72,7 @@
private static final int MSG_ON_RTT_INITIATION_FAILURE = 31;
private static final int MSG_ON_RTT_REMOTELY_TERMINATED = 32;
private static final int MSG_ON_RTT_UPGRADE_REQUEST = 33;
+ private static final int MSG_SET_PHONE_ACCOUNT_CHANGED = 34;
private final IConnectionServiceAdapter mDelegate;
@@ -318,6 +319,16 @@
case MSG_ON_RTT_UPGRADE_REQUEST:
mDelegate.onRemoteRttRequest((String) msg.obj, null /*Session.Info*/);
break;
+ case MSG_SET_PHONE_ACCOUNT_CHANGED: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ mDelegate.onPhoneAccountChanged((String) args.arg1,
+ (PhoneAccountHandle) args.arg2, null /*Session.Info*/);
+ } finally {
+ args.recycle();
+ }
+ break;
+ }
}
}
};
@@ -581,6 +592,15 @@
throws RemoteException {
mHandler.obtainMessage(MSG_ON_RTT_UPGRADE_REQUEST, connectionId).sendToTarget();
}
+
+ @Override
+ public void onPhoneAccountChanged(String callId, PhoneAccountHandle pHandle,
+ Session.Info sessionInfo) {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = pHandle;
+ mHandler.obtainMessage(MSG_SET_PHONE_ACCOUNT_CHANGED, args).sendToTarget();
+ }
};
public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) {
diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java
index 06cdd1a..2cc4314 100644
--- a/telecomm/java/android/telecom/RemoteConnectionService.java
+++ b/telecomm/java/android/telecom/RemoteConnectionService.java
@@ -208,6 +208,11 @@
}
@Override
+ public void onPhoneAccountChanged(String callId, PhoneAccountHandle pHandle,
+ Session.Info sessionInfo) {
+ }
+
+ @Override
public void addConferenceCall(
final String callId, ParcelableConference parcel, Session.Info sessionInfo) {
RemoteConference conference = new RemoteConference(callId,