[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
This commit is contained in:
Bonian Chen
2019-11-13 23:55:04 +08:00
parent d5bb245f99
commit 65817204e6
6 changed files with 128 additions and 22 deletions

View File

@@ -23,6 +23,9 @@ import android.telephony.CarrierConfigManager;
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 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
@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 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
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 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
return this;
}
@VisibleForTesting
ProvisioningManager getProvisioningManager(int subId) {
return ProvisioningManager.createForSubscriptionId(subId);
}
@Override
public int getAvailabilityStatus(int subId) {
init(subId);
@@ -96,7 +107,7 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
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 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
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 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
@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);
}
}

View File

@@ -27,6 +27,9 @@ import android.net.Uri;
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 @@ public class Enhanced4gLteSliceHelper {
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 @@ public class Enhanced4gLteSliceHelper {
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 @@ public class Enhanced4gLteSliceHelper {
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 @@ public class Enhanced4gLteSliceHelper {
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);
}
}

View File

@@ -23,6 +23,9 @@ import android.telephony.CarrierConfigManager;
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;
@@ -133,6 +136,24 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
return isVideoCallEnabled(subId, imsManager);
}
@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);
@@ -142,7 +163,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
}
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 class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
}
public void register(int subId) {
mSubId = subId;
VideoCallingPreferenceController.this.mSubId = subId;
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
}

View File

@@ -26,6 +26,9 @@ import android.os.PersistableBundle;
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 @@ public class Enhanced4gBasePreferenceControllerTest {
private CarrierConfigManager mCarrierConfigManager;
@Mock
private ImsManager mImsManager;
@Mock
private ProvisioningManager mProvisioningManager;
private Enhanced4gLtePreferenceController mController;
private SwitchPreference mPreference;
@@ -77,7 +82,12 @@ public class Enhanced4gBasePreferenceControllerTest {
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 @@ public class Enhanced4gBasePreferenceControllerTest {
@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 class Enhanced4gBasePreferenceControllerTest {
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);

View File

@@ -31,6 +31,9 @@ import android.app.PendingIntent;
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 @@ public class Enhanced4gLteSliceHelperTest {
@Mock
private ImsManager mMockImsManager;
@Mock
private ProvisioningManager mProvisioningManager;
private Context mContext;
private FakeEnhanced4gLteSliceHelper mEnhanced4gLteSliceHelper;
@@ -121,7 +126,9 @@ public class Enhanced4gLteSliceHelperTest {
@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 @@ public class Enhanced4gLteSliceHelperTest {
@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 @@ public class Enhanced4gLteSliceHelperTest {
@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 @@ public class Enhanced4gLteSliceHelperTest {
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 @@ public class Enhanced4gLteSliceHelperTest {
return mMockImsManager;
}
@Override
ProvisioningManager getProvisioningManager(int subId) {
return mProvisioningManager;
}
protected int getDefaultVoiceSubId() {
return mSubId;
}

View File

@@ -18,14 +18,18 @@ package com.android.settings.network.telephony;
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 @@ public class VideoCallingPreferenceControllerTest {
@Mock
private ImsManager mImsManager;
@Mock
private ProvisioningManager mProvisioningManager;
@Mock
private CarrierConfigManager mCarrierConfigManager;
@Mock
private PreferenceScreen mPreferenceScreen;
@@ -65,7 +71,8 @@ public class VideoCallingPreferenceControllerTest {
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 @@ public class VideoCallingPreferenceControllerTest {
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 @@ public class VideoCallingPreferenceControllerTest {
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);