[Settings] Add ImsQueryProvisioningStat for VT

1. Code refactor
2. Add ImsQueryProvisioningStat class for VT's use case

Bug: 140542283
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=VideoCallingPreferenceControllerTest
Change-Id: I40ec5df00d02e71cb8ae78d4f81c71c5e354515a
This commit is contained in:
Bonian Chen
2020-01-22 16:42:27 +08:00
parent 7bf8fb5c85
commit 319cc7bc1c
10 changed files with 362 additions and 68 deletions

View File

@@ -23,9 +23,6 @@ import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsMmTelManager;
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;
@@ -33,9 +30,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import com.android.ims.ImsManager;
import com.android.settings.network.MobileDataEnabledListener;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.VolteQueryImsState;
import com.android.settings.network.ims.VtQueryImsState;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -54,8 +49,6 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
private Preference mPreference;
private CarrierConfigManager mCarrierConfigManager;
@VisibleForTesting
ImsManager mImsManager;
private PhoneCallStateListener mPhoneStateListener;
@VisibleForTesting
Integer mCallState;
@@ -101,7 +94,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
return;
}
final SwitchPreference switchPreference = (SwitchPreference) preference;
final boolean videoCallEnabled = isVideoCallEnabled(mSubId, mImsManager);
final boolean videoCallEnabled = isVideoCallEnabled(mSubId);
switchPreference.setVisible(videoCallEnabled);
if (videoCallEnabled) {
final boolean videoCallEditable = queryVoLteState(mSubId).isEnabledByUser()
@@ -138,53 +131,29 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
public VideoCallingPreferenceController init(int subId) {
mSubId = subId;
if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
mImsManager = ImsManager.getInstance(mContext,
SubscriptionUtil.getPhoneId(mContext, mSubId));
}
return this;
}
private boolean isVideoCallEnabled(int subId) {
final ImsManager imsManager = SubscriptionManager.isValidSubscriptionId(subId)
? ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(mContext, subId))
: null;
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;
boolean isVideoCallEnabled(int subId) {
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
return false;
}
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);
if (SubscriptionManager.isValidSubscriptionId(subId)) {
telephonyManager = telephonyManager.createForSubscriptionId(subId);
if (carrierConfig == null) {
return false;
}
return carrierConfig != null && imsManager != null
&& imsManager.isVtEnabledByPlatform()
&& isVtProvisionedOnDevice(subId)
&& MobileNetworkUtils.isImsServiceStateReady(imsManager)
&& (carrierConfig.getBoolean(
if (!carrierConfig.getBoolean(
CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
|| telephonyManager.isDataEnabled());
&& (!mContext.getSystemService(TelephonyManager.class)
.createForSubscriptionId(subId).isDataEnabled())) {
return false;
}
return queryImsState(subId).isReadyToVideoCall();
}
@Override