Merge "nit: Add @AudioDeviceType @IntDef to enhance type check" into main
diff --git a/flags/telecom_call_flags.aconfig b/flags/telecom_call_flags.aconfig
index 2c53938..634d7a3 100644
--- a/flags/telecom_call_flags.aconfig
+++ b/flags/telecom_call_flags.aconfig
@@ -54,4 +54,15 @@
metadata {
purpose: PURPOSE_BUGFIX
}
+}
+
+# OWNER=tjstuart TARGET=25Q1
+flag {
+ name: "remap_transactional_capabilities"
+ namespace: "telecom"
+ description: "Transactional call capabilities need to be remapped to Connection capabilities"
+ bug: "366063695"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
\ No newline at end of file
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index ba371f1..dcd9486 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -2331,6 +2331,25 @@
setConnectionCapabilities(connectionCapabilities, false /* forceUpdate */);
}
+ public void setTransactionalCapabilities(Bundle extras) {
+ if (!mFlags.remapTransactionalCapabilities()) {
+ setConnectionCapabilities(
+ extras.getInt(CallAttributes.CALL_CAPABILITIES_KEY,
+ CallAttributes.SUPPORTS_SET_INACTIVE), true);
+ return;
+ }
+ int connectionCapabilitesBitmap = 0;
+ int transactionalCapabilitiesBitmap = extras.getInt(
+ CallAttributes.CALL_CAPABILITIES_KEY,
+ CallAttributes.SUPPORTS_SET_INACTIVE);
+ if ((transactionalCapabilitiesBitmap & CallAttributes.SUPPORTS_SET_INACTIVE)
+ == CallAttributes.SUPPORTS_SET_INACTIVE) {
+ connectionCapabilitesBitmap = connectionCapabilitesBitmap | Connection.CAPABILITY_HOLD
+ | Connection.CAPABILITY_SUPPORT_HOLD;
+ }
+ setConnectionCapabilities(connectionCapabilitesBitmap, true);
+ }
+
void setConnectionCapabilities(int connectionCapabilities, boolean forceUpdate) {
Log.v(this, "setConnectionCapabilities: %s", Connection.capabilitiesToString(
connectionCapabilities));
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 04f93fc..a1b8a50 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -1563,9 +1563,7 @@
if (extras.containsKey(TelecomManager.TRANSACTION_CALL_ID_KEY)) {
call.setIsTransactionalCall(true);
call.setCallingPackageIdentity(extras);
- call.setConnectionCapabilities(
- extras.getInt(CallAttributes.CALL_CAPABILITIES_KEY,
- CallAttributes.SUPPORTS_SET_INACTIVE), true);
+ call.setTransactionalCapabilities(extras);
call.setTargetPhoneAccount(phoneAccountHandle);
if (extras.containsKey(CallAttributes.DISPLAY_NAME_KEY)) {
CharSequence displayName = extras.getCharSequence(CallAttributes.DISPLAY_NAME_KEY);
@@ -1917,9 +1915,7 @@
if (extras.containsKey(TelecomManager.TRANSACTION_CALL_ID_KEY)) {
call.setIsTransactionalCall(true);
call.setCallingPackageIdentity(extras);
- call.setConnectionCapabilities(
- extras.getInt(CallAttributes.CALL_CAPABILITIES_KEY,
- CallAttributes.SUPPORTS_SET_INACTIVE), true);
+ call.setTransactionalCapabilities(extras);
if (extras.containsKey(CallAttributes.DISPLAY_NAME_KEY)) {
CharSequence displayName = extras.getCharSequence(
CallAttributes.DISPLAY_NAME_KEY);
diff --git a/tests/src/com/android/server/telecom/tests/CallTest.java b/tests/src/com/android/server/telecom/tests/CallTest.java
index fa7d21a..3a7a822 100644
--- a/tests/src/com/android/server/telecom/tests/CallTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallTest.java
@@ -152,6 +152,32 @@
}
/**
+ * Verify that transactional calls remap the [CallAttributes#CallCapability]s to
+ * Connection capabilities.
+ */
+ @Test
+ @SmallTest
+ public void testTransactionalCallCapabilityRemapping() {
+ // ensure when the flag is disabled, the old behavior is unchanged
+ Bundle disabledFlagExtras = new Bundle();
+ Call call = createCall("1", Call.CALL_DIRECTION_INCOMING);
+ disabledFlagExtras.putInt(CallAttributes.CALL_CAPABILITIES_KEY,
+ Connection.CAPABILITY_MERGE_CONFERENCE);
+ when(mFeatureFlags.remapTransactionalCapabilities()).thenReturn(false);
+ call.setTransactionalCapabilities(disabledFlagExtras);
+ assertTrue(call.can(Connection.CAPABILITY_MERGE_CONFERENCE));
+ // enable the bug fix flag and ensure the transactional capabilities are remapped
+ Bundle enabledFlagExtras = new Bundle();
+ Call call2 = createCall("2", Call.CALL_DIRECTION_INCOMING);
+ enabledFlagExtras.putInt(CallAttributes.CALL_CAPABILITIES_KEY,
+ CallAttributes.SUPPORTS_SET_INACTIVE);
+ when(mFeatureFlags.remapTransactionalCapabilities()).thenReturn(true);
+ call2.setTransactionalCapabilities(enabledFlagExtras);
+ assertTrue(call2.can(Connection.CAPABILITY_HOLD));
+ assertTrue(call2.can(Connection.CAPABILITY_SUPPORT_HOLD));
+ }
+
+ /**
* Verify Call#setVideoState will only upgrade to video if the PhoneAccount supports video
* state capabilities
*/