Merge "Integrate IMS single registration feature into APIs" am: a271c76c47
Original change: https://android-review.googlesource.com/c/platform/packages/services/Telephony/+/1564733
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I63df15ff0d2b0bc6bd6c65d6f6d6d14571fc25cd
diff --git a/res/values/config.xml b/res/values/config.xml
index 0fd9b4b..7ce141e 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -304,9 +304,6 @@
positive n - release in n milliseconds -->
<integer name="config_gba_release_time">0</integer>
- <!-- Whether or not to support RCS VoLTE single registration -->
- <bool name="config_rcsVolteSingleRegistrationEnabled">true</bool>
-
<!-- Whether or not to support RCS User Capability Exchange -->
<bool name="config_rcs_user_capability_exchange_enabled">true</bool>
diff --git a/src/com/android/phone/ImsRcsController.java b/src/com/android/phone/ImsRcsController.java
index 2c87f7c..c91cc3b 100644
--- a/src/com/android/phone/ImsRcsController.java
+++ b/src/com/android/phone/ImsRcsController.java
@@ -67,6 +67,8 @@
private PhoneGlobals mApp;
private TelephonyRcsService mRcsService;
private ImsResolver mImsResolver;
+ // set by shell cmd phone src set-device-enabled true/false
+ private Boolean mSingleRegistrationOverride;
/**
* Initialize the singleton ImsRcsController instance.
@@ -386,6 +388,9 @@
@Override
public boolean isSipDelegateSupported(int subId) {
enforceReadPrivilegedPermission("isSipDelegateSupported");
+ if (!isImsSingleRegistrationSupportedOnDevice()) {
+ return false;
+ }
final long token = Binder.clearCallingIdentity();
try {
SipTransportController transport = getRcsFeatureController(subId).getFeature(
@@ -411,6 +416,11 @@
ISipDelegateConnectionStateCallback delegateState,
ISipDelegateMessageCallback delegateMessage) {
enforceModifyPermission();
+ if (!isImsSingleRegistrationSupportedOnDevice()) {
+ throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
+ "SipDelegate creation is only supported for devices supporting IMS single "
+ + "registration");
+ }
if (!UserHandle.getUserHandleForUid(Binder.getCallingUid()).isSystem()) {
throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
"SipDelegate creation is only available to primary user.");
@@ -586,7 +596,21 @@
return c;
}
+ private boolean isImsSingleRegistrationSupportedOnDevice() {
+ return mSingleRegistrationOverride != null ? mSingleRegistrationOverride
+ : mApp.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION);
+ }
+
void setRcsService(TelephonyRcsService rcsService) {
mRcsService = rcsService;
}
+
+ /**
+ * Override device RCS single registration support check for CTS testing or remove override
+ * if the Boolean is set to null.
+ */
+ void setDeviceSingleRegistrationSupportOverride(Boolean deviceOverrideValue) {
+ mSingleRegistrationOverride = deviceOverrideValue;
+ }
}
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 486021d..f1be951 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -9757,6 +9757,7 @@
Boolean enabled = "NULL".equalsIgnoreCase(enabledStr) ? null
: Boolean.parseBoolean(enabledStr);
RcsProvisioningMonitor.getInstance().overrideDeviceSingleRegistrationEnabled(enabled);
+ mApp.imsRcsController.setDeviceSingleRegistrationSupportOverride(enabled);
}
/**
diff --git a/src/com/android/phone/RcsProvisioningMonitor.java b/src/com/android/phone/RcsProvisioningMonitor.java
index 7b51eeb..79310ef 100644
--- a/src/com/android/phone/RcsProvisioningMonitor.java
+++ b/src/com/android/phone/RcsProvisioningMonitor.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
@@ -543,7 +544,8 @@
boolean isSingleRegistrationEnabledOnDevice =
mDeviceSingleRegistrationEnabledOverride != null
? mDeviceSingleRegistrationEnabledOverride
- : mPhone.getResources().getBoolean(R.bool.config_rcsVolteSingleRegistrationEnabled);
+ : mPhone.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION);
int value = (isSingleRegistrationEnabledOnDevice ? 0
: ProvisioningManager.STATUS_DEVICE_NOT_CAPABLE) | (
diff --git a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
index 02d2f8a..6c36c2c 100644
--- a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
+++ b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
@@ -38,6 +38,7 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
@@ -138,6 +139,8 @@
private PhoneGlobals mPhone;
@Mock
private IRcsConfigCallback mCallback;
+ @Mock
+ private PackageManager mPackageManager;
private Executor mExecutor = new Executor() {
@Override
@@ -181,8 +184,9 @@
MockitoAnnotations.initMocks(this);
when(mPhone.getResources()).thenReturn(mResources);
- when(mResources.getBoolean(
- eq(R.bool.config_rcsVolteSingleRegistrationEnabled))).thenReturn(true);
+ when(mPhone.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION))).thenReturn(true);
when(mPhone.getMainExecutor()).thenReturn(mExecutor);
when(mPhone.getSystemServiceName(eq(CarrierConfigManager.class)))
.thenReturn(Context.CARRIER_CONFIG_SERVICE);
@@ -361,8 +365,8 @@
@SmallTest
public void testCarrierConfigChanged() throws Exception {
createMonitor(1);
- when(mResources.getBoolean(
- eq(R.bool.config_rcsVolteSingleRegistrationEnabled))).thenReturn(true);
+ when(mPackageManager.hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION))).thenReturn(true);
ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class);
mBundle.putBoolean(
CarrierConfigManager.Ims.KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL, true);
@@ -391,8 +395,8 @@
capturedIntent.getIntExtra(ProvisioningManager.EXTRA_STATUS, -1));
- when(mResources.getBoolean(
- eq(R.bool.config_rcsVolteSingleRegistrationEnabled))).thenReturn(false);
+ when(mPackageManager.hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION))).thenReturn(false);
broadcastCarrierConfigChange(FAKE_SUB_ID_BASE);
processAllMessages();
verify(mPhone, atLeastOnce()).sendBroadcast(captorIntent.capture());
@@ -441,8 +445,8 @@
public void testIsRcsVolteSingleRegistrationEnabled() throws Exception {
createMonitor(1);
- when(mResources.getBoolean(
- eq(R.bool.config_rcsVolteSingleRegistrationEnabled))).thenReturn(true);
+ when(mPackageManager.hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION))).thenReturn(true);
mBundle.putBoolean(
CarrierConfigManager.Ims.KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL, true);
broadcastCarrierConfigChange(FAKE_SUB_ID_BASE);
@@ -456,8 +460,8 @@
assertFalse(mRcsProvisioningMonitor.isRcsVolteSingleRegistrationEnabled(FAKE_SUB_ID_BASE));
- when(mResources.getBoolean(
- eq(R.bool.config_rcsVolteSingleRegistrationEnabled))).thenReturn(false);
+ when(mPackageManager.hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION))).thenReturn(false);
mBundle.putBoolean(
CarrierConfigManager.Ims.KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL, true);
broadcastCarrierConfigChange(FAKE_SUB_ID_BASE);