Adds speakerphone extra to ACTION_DIAL (1/2).
If optional extra EXTRA_SPEAKERPHONE_ON is added
to an ACTION_DIAL intent, the speakerphone will turn
on automatically once the call is connected.
Bug: 6810980
Change-Id: I37ac7737e3b85fa3c8e2d5a87a5a1de157f2da08
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 104ff4e..bf0f349 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -141,6 +141,8 @@
private boolean mIsEmergencyCall;
+ private boolean mSpeakerphoneOn;
+
/**
* Disconnect cause for the call. Only valid if the state of the call is DISCONNECTED.
* See {@link android.telephony.DisconnectCause}.
@@ -1037,4 +1039,20 @@
Log.d(this, "maybeLoadCannedSmsResponses: doing nothing");
}
}
+
+ /**
+ * Sets speakerphone option on when call begins.
+ */
+ public void setStartWithSpeakerphoneOn(boolean startWithSpeakerphone) {
+ mSpeakerphoneOn = startWithSpeakerphone;
+ }
+
+ /**
+ * Returns speakerphone option.
+ *
+ * @return Whether or not speakerphone should be set automatically when call begins.
+ */
+ public boolean getStartWithSpeakerphoneOn() {
+ return mSpeakerphoneOn;
+ }
}
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 5e5f710..5753d18 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -278,8 +278,10 @@
* @param contactInfo Information about the entity being called.
* @param gatewayInfo Optional gateway information that can be used to route the call to the
* actual dialed handle via a gateway provider. May be null.
+ * @param speakerphoneOn Whether or not to turn the speakerphone on once the call connects.
*/
- void placeOutgoingCall(Uri handle, ContactInfo contactInfo, GatewayInfo gatewayInfo) {
+ void placeOutgoingCall(Uri handle, ContactInfo contactInfo, GatewayInfo gatewayInfo,
+ boolean speakerphoneOn) {
final Uri uriHandle = (gatewayInfo == null) ? handle : gatewayInfo.getGatewayHandle();
if (gatewayInfo == null) {
@@ -291,6 +293,7 @@
Call call = new Call(
uriHandle, gatewayInfo, false /* isIncoming */, false /* isConference */);
+ call.setStartWithSpeakerphoneOn(speakerphoneOn);
// TODO(santoscordon): Move this to be a part of addCall()
call.addListener(this);
@@ -505,6 +508,9 @@
if (mPendingHandoffCalls.contains(call)) {
completeHandoff(call, true);
}
+ if (call.getStartWithSpeakerphoneOn()) {
+ setAudioRoute(CallAudioState.ROUTE_SPEAKER);
+ }
}
void markCallAsOnHold(Call call) {
diff --git a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
index a0a7c00..c40fde5 100644
--- a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
@@ -132,7 +132,9 @@
}
GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
- mCallsManager.placeOutgoingCall(resultHandleUri, mContactInfo, gatewayInfo);
+ mCallsManager.placeOutgoingCall(resultHandleUri, mContactInfo, gatewayInfo,
+ mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
+ false));
}
}
@@ -199,7 +201,9 @@
+ " OutgoingCallBroadcastReceiver: %s", intent);
String scheme = isUriNumber ? SCHEME_SIP : SCHEME_TEL;
mCallsManager.placeOutgoingCall(
- Uri.fromParts(scheme, handle, null), mContactInfo, null);
+ Uri.fromParts(scheme, handle, null), mContactInfo, null,
+ mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
+ false));
// Don't return but instead continue and send the ACTION_NEW_OUTGOING_CALL broadcast
// so that third parties can still inspect (but not intercept) the outgoing call. When