[Settings] Apply ImsQueryProvisioningStat to VoLTE
1. Code refactor 2. Apply ImsQueryProvisioningStat class to VoLTE's use case Bug: 140542283 Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gLteSliceHelperTest Change-Id: Ie5a56e9b768b9abe88c635e4e5532d72c9ddd1a2
This commit is contained in:
@@ -39,9 +39,9 @@ abstract class ImsQueryController {
|
||||
/**
|
||||
* Constructor for query IMS status
|
||||
*
|
||||
* @param capability {@code MmTelFeature.MmTelCapabilities.MmTelCapability}
|
||||
* @param tech {@code @ImsRegistrationImplBase.ImsRegistrationTech}
|
||||
* @param transportType {@code @AccessNetworkConstants.TransportType}
|
||||
* @param capability {@link MmTelFeature.MmTelCapabilities#MmTelCapability}
|
||||
* @param tech {@link ImsRegistrationImplBase#ImsRegistrationTech}
|
||||
* @param transportType {@link AccessNetworkConstants#TransportType}
|
||||
*/
|
||||
ImsQueryController(
|
||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
||||
|
@@ -22,7 +22,7 @@ import android.telephony.ims.stub.ImsRegistrationImplBase;
|
||||
|
||||
|
||||
/**
|
||||
* An {@code ImsQuery} for accessing IMS provision stat
|
||||
* An {@link ImsQuery} for accessing IMS provision stat
|
||||
*/
|
||||
public class ImsQueryProvisioningStat implements ImsQuery {
|
||||
|
||||
@@ -33,8 +33,8 @@ public class ImsQueryProvisioningStat implements ImsQuery {
|
||||
/**
|
||||
* Constructor
|
||||
* @param subId subscription id
|
||||
* @param capability {@code MmTelFeature.MmTelCapabilities.MmTelCapability}
|
||||
* @param tech {@code @ImsRegistrationImplBase.ImsRegistrationTech}
|
||||
* @param capability {@link MmTelFeature.MmTelCapabilities#MmTelCapability}
|
||||
* @param tech {@link ImsRegistrationImplBase#ImsRegistrationTech}
|
||||
*/
|
||||
public ImsQueryProvisioningStat(int subId,
|
||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
||||
@@ -45,7 +45,7 @@ public class ImsQueryProvisioningStat implements ImsQuery {
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of interface {@code ImsQuery}
|
||||
* Implementation of interface {@link ImsQuery}
|
||||
*
|
||||
* @return result of query
|
||||
*/
|
||||
|
@@ -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,8 +30,6 @@ import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.ims.ImsManager;
|
||||
import com.android.settings.network.SubscriptionUtil;
|
||||
import com.android.settings.network.ims.VolteQueryImsState;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||
@@ -55,8 +50,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
||||
Preference mPreference;
|
||||
private CarrierConfigManager mCarrierConfigManager;
|
||||
private PersistableBundle mCarrierConfig;
|
||||
@VisibleForTesting
|
||||
ImsManager mImsManager;
|
||||
private PhoneCallStateListener mPhoneStateListener;
|
||||
@VisibleForTesting
|
||||
Integer mCallState;
|
||||
@@ -81,10 +74,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
||||
}
|
||||
mSubId = subId;
|
||||
mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||
if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
|
||||
mImsManager = ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(
|
||||
mContext, mSubId));
|
||||
}
|
||||
|
||||
final boolean show4GForLTE = mCarrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
|
||||
@@ -96,29 +85,26 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
||||
return this;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
ProvisioningManager getProvisioningManager(int subId) {
|
||||
return ProvisioningManager.createForSubscriptionId(subId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus(int subId) {
|
||||
init(subId);
|
||||
if (!isModeMatched()) {
|
||||
return CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
|
||||
return CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||
if ((carrierConfig == null)
|
||||
|| carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) {
|
||||
return CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
final VolteQueryImsState queryState = queryImsState(subId);
|
||||
final boolean isVisible = SubscriptionManager.isValidSubscriptionId(subId)
|
||||
&& mImsManager != null && carrierConfig != null
|
||||
&& mImsManager.isVolteEnabledByPlatform()
|
||||
&& isVolteProvisionedOnDevice(mSubId)
|
||||
&& MobileNetworkUtils.isImsServiceStateReady(mImsManager)
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
|
||||
return isVisible
|
||||
? (isUserControlAllowed() && queryState.isAllowUserControl()
|
||||
? AVAILABLE : AVAILABLE_UNSEARCHABLE)
|
||||
: CONDITIONALLY_UNAVAILABLE;
|
||||
if (!queryState.isReadyToVoLte()) {
|
||||
return CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
return (isUserControlAllowed() && queryState.isAllowUserControl())
|
||||
? AVAILABLE : AVAILABLE_UNSEARCHABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -200,19 +186,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
||||
CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
|
||||
}
|
||||
|
||||
private boolean isVolteProvisionedOnDevice(int subId) {
|
||||
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
|
||||
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 {
|
||||
|
||||
PhoneCallStateListener() {
|
||||
|
@@ -28,9 +28,6 @@ import android.os.PersistableBundle;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
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;
|
||||
@@ -40,10 +37,8 @@ import androidx.slice.builders.ListBuilder;
|
||||
import androidx.slice.builders.ListBuilder.RowBuilder;
|
||||
import androidx.slice.builders.SliceAction;
|
||||
|
||||
import com.android.ims.ImsManager;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.network.SubscriptionUtil;
|
||||
import com.android.settings.network.ims.VolteQueryImsState;
|
||||
import com.android.settings.slices.CustomSliceRegistry;
|
||||
import com.android.settings.slices.SliceBroadcastReceiver;
|
||||
@@ -112,14 +107,6 @@ public class Enhanced4gLteSliceHelper {
|
||||
return null;
|
||||
}
|
||||
|
||||
final ImsManager imsManager = getImsManager(subId);
|
||||
|
||||
if (!imsManager.isVolteEnabledByPlatform()
|
||||
|| !isVolteProvisionedOnDevice(subId)) {
|
||||
Log.d(TAG, "Setting is either not provisioned or not enabled by Platform");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (isCarrierConfigManagerKeyEnabled(
|
||||
CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL, subId, false)
|
||||
|| !isCarrierConfigManagerKeyEnabled(
|
||||
@@ -130,6 +117,11 @@ public class Enhanced4gLteSliceHelper {
|
||||
}
|
||||
|
||||
final VolteQueryImsState queryState = queryImsState(subId);
|
||||
if (!queryState.isVoLteProvisioned()) {
|
||||
Log.d(TAG, "Setting is either not provisioned or not enabled by Platform");
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return getEnhanced4gLteSlice(sliceUri,
|
||||
queryState.isEnabledByUser(), subId);
|
||||
@@ -164,15 +156,6 @@ public class Enhanced4gLteSliceHelper {
|
||||
.build();
|
||||
}
|
||||
|
||||
protected ImsManager getImsManager(int subId) {
|
||||
return ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(mContext, 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
|
||||
@@ -183,9 +166,8 @@ public class Enhanced4gLteSliceHelper {
|
||||
final int subId = getDefaultVoiceSubId();
|
||||
|
||||
if (SubscriptionManager.isValidSubscriptionId(subId)) {
|
||||
final ImsManager imsManager = getImsManager(subId);
|
||||
if (imsManager.isVolteEnabledByPlatform() && isVolteProvisionedOnDevice(subId)) {
|
||||
final VolteQueryImsState queryState = queryImsState(subId);
|
||||
final VolteQueryImsState queryState = queryImsState(subId);
|
||||
if (queryState.isVoLteProvisioned()) {
|
||||
final boolean currentValue = queryState.isEnabledByUser()
|
||||
&& queryState.isAllowUserControl();
|
||||
final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
|
||||
@@ -285,16 +267,6 @@ public class Enhanced4gLteSliceHelper {
|
||||
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);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
VolteQueryImsState queryImsState(int subId) {
|
||||
return new VolteQueryImsState(mContext, subId);
|
||||
|
Reference in New Issue
Block a user