[Settings] Replace VT and VOLTE provisioning API
Replace isVtProvisionedOnDevice() and isVolteProvisionedOnDevice()
by android.telephony.ims.ProvisioningManager.
Bug: 140542283
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest
make RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gLteSliceHelper
make RunSettingsRoboTests -j ROBOTEST_FILTER=VideoCallingPreferenceController
Change-Id: Ie92794b794a6b9f2d9e161ca5f328cd9fa01064a
diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java
index 25eefdf..869091a 100644
--- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java
+++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java
@@ -23,6 +23,9 @@
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -50,6 +53,8 @@
@VisibleForTesting
ImsManager mImsManager;
private PhoneCallStateListener mPhoneStateListener;
+ @VisibleForTesting
+ Integer mCallState;
private final List<On4gLteUpdateListener> m4gLteListeners;
protected static final int MODE_NONE = -1;
@@ -70,7 +75,8 @@
return this;
}
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
@@ -86,6 +92,11 @@
return this;
}
+ @VisibleForTesting
+ ProvisioningManager getProvisioningManager(int subId) {
+ return ProvisioningManager.createForSubscriptionId(subId);
+ }
+
@Override
public int getAvailabilityStatus(int subId) {
init(subId);
@@ -96,7 +107,7 @@
final boolean isVisible = subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& mImsManager != null && carrierConfig != null
&& mImsManager.isVolteEnabledByPlatform()
- && mImsManager.isVolteProvisionedOnDevice()
+ && isVolteProvisionedOnDevice(mSubId)
&& MobileNetworkUtils.isImsServiceStateReady(mImsManager)
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
return isVisible
@@ -159,13 +170,26 @@
private boolean isPrefEnabled() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
- && mTelephonyManager.getCallState(mSubId) == TelephonyManager.CALL_STATE_IDLE
+ && (mCallState != null) && (mCallState == TelephonyManager.CALL_STATE_IDLE)
&& mImsManager != null
&& mImsManager.isNonTtyOrTtyOnVolteEnabled()
&& mCarrierConfig.getBoolean(
CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
}
+ private boolean isVolteProvisionedOnDevice(int subId) {
+ if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ return true;
+ }
+ final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
+ if (provisioningMgr == null) {
+ return true;
+ }
+ return provisioningMgr.getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+ }
+
private class PhoneCallStateListener extends PhoneStateListener {
public PhoneCallStateListener(Looper looper) {
@@ -174,15 +198,17 @@
@Override
public void onCallStateChanged(int state, String incomingNumber) {
+ mCallState = state;
updateState(mPreference);
}
public void register(int subId) {
- mSubId = subId;
+ Enhanced4gBasePreferenceController.this.mSubId = subId;
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
}
public void unregister() {
+ mCallState = null;
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
}
}
diff --git a/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java b/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java
index be5d948..c03f942 100644
--- a/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java
+++ b/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java
@@ -27,6 +27,9 @@
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -122,7 +125,7 @@
final ImsManager imsManager = getImsManager(subId);
if (!imsManager.isVolteEnabledByPlatform()
- || !imsManager.isVolteProvisionedOnDevice()) {
+ || !isVolteProvisionedOnDevice(subId)) {
Log.d(TAG, "Setting is either not provisioned or not enabled by Platform");
return null;
}
@@ -188,6 +191,11 @@
return ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(subId));
}
+ @VisibleForTesting
+ ProvisioningManager getProvisioningManager(int subId) {
+ return ProvisioningManager.createForSubscriptionId(subId);
+ }
+
/**
* Handles Enhanced 4G LTE mode setting change from Enhanced 4G LTE slice and posts
* notification. Should be called when intent action is ACTION_ENHANCED_4G_LTE_CHANGED
@@ -199,8 +207,7 @@
if (subId > SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
final ImsManager imsManager = getImsManager(subId);
- if (imsManager.isVolteEnabledByPlatform()
- && imsManager.isVolteProvisionedOnDevice()) {
+ if (imsManager.isVolteEnabledByPlatform() && isVolteProvisionedOnDevice(subId)) {
final boolean currentValue = imsManager.isEnhanced4gLteModeSettingEnabledByUser()
&& imsManager.isNonTtyOrTtyOnVolteEnabled();
final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
@@ -278,5 +285,15 @@
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */);
}
+
+ private boolean isVolteProvisionedOnDevice(int subId) {
+ final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
+ if (provisioningMgr == null) {
+ return true;
+ }
+ return provisioningMgr.getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+ }
}
diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java
index 692a7e1..22a3b7c 100644
--- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java
@@ -23,6 +23,9 @@
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -134,6 +137,24 @@
}
@VisibleForTesting
+ ProvisioningManager getProvisioningManager(int subId) {
+ return ProvisioningManager.createForSubscriptionId(subId);
+ }
+
+ private boolean isVtProvisionedOnDevice(int subId) {
+ if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ return true;
+ }
+ final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
+ if (provisioningMgr == null) {
+ return true;
+ }
+ return provisioningMgr.getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+ }
+
+ @VisibleForTesting
boolean isVideoCallEnabled(int subId, ImsManager imsManager) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class);
@@ -142,7 +163,7 @@
}
return carrierConfig != null && imsManager != null
&& imsManager.isVtEnabledByPlatform()
- && imsManager.isVtProvisionedOnDevice()
+ && isVtProvisionedOnDevice(subId)
&& MobileNetworkUtils.isImsServiceStateReady(imsManager)
&& (carrierConfig.getBoolean(
CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
@@ -167,7 +188,7 @@
}
public void register(int subId) {
- mSubId = subId;
+ VideoCallingPreferenceController.this.mSubId = subId;
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java
index e4eac68..9c1dc4f 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java
@@ -26,6 +26,9 @@
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
import androidx.preference.SwitchPreference;
@@ -55,6 +58,8 @@
private CarrierConfigManager mCarrierConfigManager;
@Mock
private ImsManager mImsManager;
+ @Mock
+ private ProvisioningManager mProvisioningManager;
private Enhanced4gLtePreferenceController mController;
private SwitchPreference mPreference;
@@ -77,7 +82,12 @@
doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
mPreference = new RestrictedSwitchPreference(mContext);
- mController = new Enhanced4gLtePreferenceController(mContext, "roaming");
+ mController = new Enhanced4gLtePreferenceController(mContext, "roaming") {
+ @Override
+ ProvisioningManager getProvisioningManager(int subId) {
+ return mProvisioningManager;
+ }
+ };
mController.init(SUB_ID);
mController.mImsManager = mImsManager;
mPreference.setKey(mController.getPreferenceKey());
@@ -94,7 +104,9 @@
@Test
public void getAvailabilityStatus_volteDisabled_returnUnavailable() {
doReturn(false).when(mImsManager).isVolteEnabledByPlatform();
- doReturn(true).when(mImsManager).isVolteProvisionedOnDevice();
+ doReturn(true).when(mProvisioningManager).getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
@@ -104,7 +116,7 @@
public void updateState_configEnabled_prefEnabled() {
mPreference.setEnabled(false);
mCarrierConfig.putInt(CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT, 1);
- doReturn(TelephonyManager.CALL_STATE_IDLE).when(mTelephonyManager).getCallState(SUB_ID);
+ mController.mCallState = TelephonyManager.CALL_STATE_IDLE;
doReturn(true).when(mImsManager).isNonTtyOrTtyOnVolteEnabled();
mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java
index a9882d9..b61504a 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java
@@ -31,6 +31,9 @@
import android.content.Context;
import android.content.Intent;
import android.telephony.CarrierConfigManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
import androidx.slice.Slice;
import androidx.slice.SliceItem;
@@ -67,6 +70,8 @@
@Mock
private ImsManager mMockImsManager;
+ @Mock
+ private ProvisioningManager mProvisioningManager;
private Context mContext;
private FakeEnhanced4gLteSliceHelper mEnhanced4gLteSliceHelper;
@@ -121,7 +126,9 @@
@Test
public void test_CreateEnhanced4gLteSlice_success() {
when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true);
- when(mMockImsManager.isVolteProvisionedOnDevice()).thenReturn(true);
+ when(mProvisioningManager.getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true);
when(mMockImsManager.isEnhanced4gLteModeSettingEnabledByUser()).thenReturn(true);
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -136,7 +143,9 @@
@Test
public void test_SettingSliceProvider_getsRightSliceEnhanced4gLte() {
when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true);
- when(mMockImsManager.isVolteProvisionedOnDevice()).thenReturn(true);
+ when(mProvisioningManager.getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true);
when(mMockImsManager.isEnhanced4gLteModeSettingEnabledByUser()).thenReturn(true);
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -152,17 +161,19 @@
@Test
public void test_SliceBroadcastReceiver_toggleOffEnhanced4gLte() {
when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true);
- when(mMockImsManager.isVolteProvisionedOnDevice()).thenReturn(true);
+ when(mProvisioningManager.getProvisioningStatusForCapability(
+ MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+ ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true);
when(mMockImsManager.isEnhanced4gLteModeSettingEnabledByUser()).thenReturn(false);
when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
when(mSlicesFeatureProvider.getNewEnhanced4gLteSliceHelper(mContext))
.thenReturn(mEnhanced4gLteSliceHelper);
- ArgumentCaptor<Boolean> mEnhanced4gLteSettingCaptor = ArgumentCaptor.forClass(
+ final ArgumentCaptor<Boolean> mEnhanced4gLteSettingCaptor = ArgumentCaptor.forClass(
Boolean.class);
// turn on Enhanced4gLte setting
- Intent intent = new Intent(Enhanced4gLteSliceHelper.ACTION_ENHANCED_4G_LTE_CHANGED);
+ final Intent intent = new Intent(Enhanced4gLteSliceHelper.ACTION_ENHANCED_4G_LTE_CHANGED);
intent.putExtra(EXTRA_TOGGLE_STATE, true);
// change the setting
@@ -234,7 +245,7 @@
private void assertTitle(List<SliceItem> sliceItems, String title) {
boolean hasTitle = false;
for (SliceItem item : sliceItems) {
- List<SliceItem> titleItems = SliceQuery.findAll(item, FORMAT_TEXT, HINT_TITLE,
+ final List<SliceItem> titleItems = SliceQuery.findAll(item, FORMAT_TEXT, HINT_TITLE,
null /* non-hints */);
if (titleItems == null) {
continue;
@@ -265,6 +276,11 @@
return mMockImsManager;
}
+ @Override
+ ProvisioningManager getProvisioningManager(int subId) {
+ return mProvisioningManager;
+ }
+
protected int getDefaultVoiceSubId() {
return mSubId;
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java
index 7b71565..7bbca28 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java
@@ -18,14 +18,18 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.ImsFeature;
+import android.telephony.ims.feature.MmTelFeature;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
@@ -49,6 +53,8 @@
@Mock
private ImsManager mImsManager;
@Mock
+ private ProvisioningManager mProvisioningManager;
+ @Mock
private CarrierConfigManager mCarrierConfigManager;
@Mock
private PreferenceScreen mPreferenceScreen;
@@ -65,7 +71,8 @@
mContext = spy(RuntimeEnvironment.application);
doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
doReturn(mTelephonyManager).when(mContext).getSystemService(TelephonyManager.class);
- doReturn(mCarrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class);
+ doReturn(mCarrierConfigManager).when(mContext)
+ .getSystemService(CarrierConfigManager.class);
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
mCarrierConfig = new PersistableBundle();
@@ -74,13 +81,20 @@
doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
mPreference = new SwitchPreference(mContext);
- mController = new VideoCallingPreferenceController(mContext, "wifi_calling");
+ mController = new VideoCallingPreferenceController(mContext, "wifi_calling") {
+ @Override
+ ProvisioningManager getProvisioningManager(int subId) {
+ return mProvisioningManager;
+ }
+ };
mController.init(SUB_ID);
mController.mImsManager = mImsManager;
mPreference.setKey(mController.getPreferenceKey());
doReturn(true).when(mImsManager).isVtEnabledByPlatform();
- doReturn(true).when(mImsManager).isVtProvisionedOnDevice();
+ doReturn(true).when(mProvisioningManager)
+ .getProvisioningStatusForCapability(
+ eq(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO), anyInt());
doReturn(ImsFeature.STATE_READY).when(mImsManager).getImsServiceState();
doReturn(true).when(mTelephonyManager).isDataEnabled();
@@ -123,7 +137,7 @@
doReturn(true).when(mImsManager).isVtEnabledByUser();
doReturn(true).when(mImsManager).isEnhanced4gLteModeSettingEnabledByUser();
doReturn(true).when(mImsManager).isNonTtyOrTtyOnVolteEnabled();
- doReturn(TelephonyManager.CALL_STATE_IDLE).when(mTelephonyManager).getCallState(SUB_ID);
+ mController.mCallState = TelephonyManager.CALL_STATE_IDLE;
mController.updateState(mPreference);