Merge "Fixing issue where DTMF tones were not issued through to the IMS framework once a conference is established." into lmp-mr1-dev
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index c673b05..0baa3cc 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -135,6 +135,20 @@
super.onAnswer();
}
+ /**
+ * Clones the current {@link CdmaConnection}.
+ * <p>
+ * Listeners are not copied to the new instance.
+ *
+ * @return The cloned connection.
+ */
+ @Override
+ public TelephonyConnection cloneConnection() {
+ CdmaConnection cdmaConnection = new CdmaConnection(getOriginalConnection(),
+ mEmergencyTonePlayer, mAllowMute, mIsOutgoing);
+ return cdmaConnection;
+ }
+
@Override
public void onStateChanged(int state) {
Connection originalConnection = getOriginalConnection();
diff --git a/src/com/android/services/telephony/GsmConnection.java b/src/com/android/services/telephony/GsmConnection.java
index 6b995a8..1273c60 100644
--- a/src/com/android/services/telephony/GsmConnection.java
+++ b/src/com/android/services/telephony/GsmConnection.java
@@ -26,6 +26,19 @@
super(connection);
}
+ /**
+ * Clones the current {@link GsmConnection}.
+ * <p>
+ * Listeners are not copied to the new instance.
+ *
+ * @return The cloned connection.
+ */
+ @Override
+ public TelephonyConnection cloneConnection() {
+ GsmConnection gsmConnection = new GsmConnection(getOriginalConnection());
+ return gsmConnection;
+ }
+
/** {@inheritDoc} */
@Override
public void onPlayDtmfTone(char digit) {
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index f6947a1..2870481 100644
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -53,16 +53,6 @@
public class ImsConference extends Conference {
/**
- * TelephonyConnection class used to represent the connection to the conference server.
- */
- private class ConferenceHostConnection extends TelephonyConnection {
- protected ConferenceHostConnection(
- com.android.internal.telephony.Connection originalConnection) {
- super(originalConnection);
- }
- }
-
- /**
* Listener used to respond to changes to conference participants. At the conference level we
* are most concerned with handling destruction of a conference participant.
*/
@@ -180,10 +170,10 @@
*
* @param telephonyConnectionService The connection service responsible for adding new
* conferene participants.
- * @param conferenceHost The IMS radio connection hosting the conference.
+ * @param conferenceHost The telephony connection hosting the conference.
*/
public ImsConference(TelephonyConnectionService telephonyConnectionService,
- com.android.internal.telephony.Connection conferenceHost) {
+ TelephonyConnection conferenceHost) {
super(null);
mTelephonyConnectionService = telephonyConnectionService;
@@ -345,12 +335,12 @@
*
* @param conferenceHost The connection hosting the conference.
*/
- private void setConferenceHost(com.android.internal.telephony.Connection conferenceHost) {
+ private void setConferenceHost(TelephonyConnection conferenceHost) {
if (Log.VERBOSE) {
Log.v(this, "setConferenceHost " + conferenceHost);
}
- mConferenceHost = new ConferenceHostConnection(conferenceHost);
+ mConferenceHost = conferenceHost;
mConferenceHost.addConnectionListener(mConferenceHostListener);
mConferenceHost.addTelephonyConnectionListener(mTelephonyConnectionListener);
}
diff --git a/src/com/android/services/telephony/ImsConferenceController.java b/src/com/android/services/telephony/ImsConferenceController.java
index e924687..5df7ea0 100644
--- a/src/com/android/services/telephony/ImsConferenceController.java
+++ b/src/com/android/services/telephony/ImsConferenceController.java
@@ -251,14 +251,17 @@
* @param connection The connection to the Ims server.
*/
private void startConference(TelephonyConnection connection) {
- com.android.internal.telephony.Connection originalConnection =
- connection.getOriginalConnection();
if (Log.VERBOSE) {
Log.v(this, "Start new ImsConference - connection: %s", connection);
}
+ // Make a clone of the connection which will become the Ims conference host connection.
+ // This is necessary since the Connection Service does not support removing a connection
+ // from Telecom. Instead we create a new instance and remove the old one from telecom.
+ TelephonyConnection conferenceHostConnection = connection.cloneConnection();
+
// Create conference and add to telecom
- ImsConference conference = new ImsConference(mConnectionService, originalConnection);
+ ImsConference conference = new ImsConference(mConnectionService, conferenceHostConnection);
conference.setState(connection.getState());
mConnectionService.addConference(conference);
conference.addListener(mConferenceListener);
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 5095db1..f551eca 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -208,6 +208,13 @@
}
}
+ /**
+ * Creates a clone of the current {@link TelephonyConnection}.
+ *
+ * @return The clone.
+ */
+ public abstract TelephonyConnection cloneConnection();
+
@Override
public void onAudioStateChanged(AudioState audioState) {
// TODO: update TTY mode.