diff options
| -rwxr-xr-x | api/current.txt | 2 | ||||
| -rw-r--r-- | api/system-current.txt | 2 | ||||
| -rw-r--r-- | telephony/java/android/telephony/CarrierConfigManager.java | 34 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/ProvisioningManager.java | 52 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java | 14 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/ITelephony.aidl | 18 |
6 files changed, 121 insertions, 1 deletions
diff --git a/api/current.txt b/api/current.txt index 0061b9f5cd42..49c992abdcf3 100755 --- a/api/current.txt +++ b/api/current.txt @@ -42128,7 +42128,9 @@ package android.telephony { field public static final String KEY_CARRIER_NAME_OVERRIDE_BOOL = "carrier_name_override_bool"; field public static final String KEY_CARRIER_NAME_STRING = "carrier_name_string"; field public static final String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool"; + field public static final String KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL = "carrier_supports_ss_over_ut_bool"; field public static final String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool"; + field public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL = "carrier_ut_provisioning_required_bool"; field public static final String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool"; field public static final String KEY_CARRIER_VOLTE_PROVISIONED_BOOL = "carrier_volte_provisioned_bool"; field public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL = "carrier_volte_provisioning_required_bool"; diff --git a/api/system-current.txt b/api/system-current.txt index 65a24bf1cd86..20ad25b73f8b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7204,9 +7204,11 @@ package android.telephony.ims { public class ProvisioningManager { method public static android.telephony.ims.ProvisioningManager createForSubscriptionId(android.content.Context, int); method @WorkerThread @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getProvisioningIntValue(int); + method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getProvisioningStatusForCapability(@android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability int, int); method @WorkerThread @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getProvisioningStringValue(int); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningIntValue(int, int); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setProvisioningStatusForCapability(@android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability int, int, boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, String); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.Callback); field public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27; // 0x1b diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index eb010bc6487c..26cba773c9cc 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -608,11 +608,41 @@ public class CarrierConfigManager { public static final String KEY_CARRIER_PROMOTE_WFC_ON_CALL_FAIL_BOOL = "carrier_promote_wfc_on_call_fail_bool"; - /** Flag specifying whether provisioning is required for VOLTE. */ + /** + * Flag specifying whether provisioning is required for VoLTE, Video Telephony, and WiFi + * Calling. + */ public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL = "carrier_volte_provisioning_required_bool"; /** + * Flag indicating whether or not the IMS MmTel UT capability requires carrier provisioning + * before it can be set as enabled. + * + * If true, the UT capability will be set to false for the newly loaded subscription + * and will require the carrier provisioning app to set the persistent provisioning result. + * If false, the platform will not wait for provisioning status updates for the UT capability + * and enable the UT over IMS capability for the subscription when the subscription is loaded. + * + * The default value for this key is {@code false}. + */ + public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL = + "carrier_ut_provisioning_required_bool"; + + /** + * Flag indicating whether or not the carrier supports Supplementary Services over the UT + * interface for this subscription. + * + * If true, the device will use Supplementary Services over UT when provisioned (see + * {@link #KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL}). If false, this device will fallback to + * circuit switch for supplementary services and will disable this capability for IMS entirely. + * + * The default value for this key is {@code true}. + */ + public static final String KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL = + "carrier_supports_ss_over_ut_bool"; + + /** * Flag specifying if WFC provisioning depends on VoLTE provisioning. * * {@code false}: default value; honor actual WFC provisioning state. @@ -2405,6 +2435,8 @@ public class CarrierConfigManager { sDefaults.putInt(KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT, 2); sDefaults.putBoolean(KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL, false); + sDefaults.putBoolean(KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL, false); + sDefaults.putBoolean(KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL, true); sDefaults.putBoolean(KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, true); sDefaults.putBoolean(KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL, true); diff --git a/telephony/java/android/telephony/ims/ProvisioningManager.java b/telephony/java/android/telephony/ims/ProvisioningManager.java index 210934cdda14..086a76546b2d 100644 --- a/telephony/java/android/telephony/ims/ProvisioningManager.java +++ b/telephony/java/android/telephony/ims/ProvisioningManager.java @@ -26,9 +26,12 @@ import android.content.Context; import android.os.Binder; import android.os.RemoteException; import android.os.ServiceManager; +import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.ims.aidl.IImsConfigCallback; +import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsConfigImplBase; +import android.telephony.ims.stub.ImsRegistrationImplBase; import com.android.internal.telephony.ITelephony; @@ -317,6 +320,55 @@ public class ProvisioningManager { } } + /** + * Set the provisioning status for the IMS MmTel capability using the specified subscription. + * + * Provisioning may or may not be required, depending on the carrier configuration. If + * provisioning is not required for the carrier associated with this subscription or the device + * does not support the capability/technology combination specified, this operation will be a + * no-op. + * + * @see CarrierConfigManager#KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL + * @see CarrierConfigManager#KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL + * @param isProvisioned true if the device is provisioned for UT over IMS, false otherwise. + */ + @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + public void setProvisioningStatusForCapability( + @MmTelFeature.MmTelCapabilities.MmTelCapability int capability, + @ImsRegistrationImplBase.ImsRegistrationTech int tech, boolean isProvisioned) { + try { + getITelephony().setImsProvisioningStatusForCapability(mSubId, capability, tech, + isProvisioned); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } + + /** + * Get the provisioning status for the IMS MmTel capability specified. + * + * If provisioning is not required for the queried + * {@link MmTelFeature.MmTelCapabilities.MmTelCapability} and + * {@link ImsRegistrationImplBase.ImsRegistrationTech} combination specified, this method will + * always return {@code true}. + * + * @see CarrierConfigManager#KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL + * @see CarrierConfigManager#KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL + * @return true if the device is provisioned for the capability or does not require + * provisioning, false if the capability does require provisioning and has not been + * provisioned yet. + */ + @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + public boolean getProvisioningStatusForCapability( + @MmTelFeature.MmTelCapabilities.MmTelCapability int capability, + @ImsRegistrationImplBase.ImsRegistrationTech int tech) { + try { + return getITelephony().getImsProvisioningStatusForCapability(mSubId, capability, tech); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } + private static SubscriptionManager getSubscriptionManager(Context context) { SubscriptionManager manager = context.getSystemService(SubscriptionManager.class); if (manager == null) { diff --git a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java index 7c793a5c18ac..1ee85633c6dc 100644 --- a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java +++ b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java @@ -97,6 +97,13 @@ public final class CapabilityChangeRequest implements Parcelable { public @ImsRegistrationImplBase.ImsRegistrationTech int getRadioTech() { return radioTech; } + + @Override + public String toString() { + return "CapabilityPair{" + + "mCapability=" + mCapability + + ", radioTech=" + radioTech + '}'; + } } // Pair contains <radio tech, mCapability> @@ -212,6 +219,13 @@ public final class CapabilityChangeRequest implements Parcelable { } } + @Override + public String toString() { + return "CapabilityChangeRequest{" + + "mCapabilitiesToEnable=" + mCapabilitiesToEnable + + ", mCapabilitiesToDisable=" + mCapabilitiesToDisable + '}'; + } + /** * @hide */ diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index db76e9ed27bb..26fcf8344921 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1756,6 +1756,24 @@ interface ITelephony { void unregisterImsProvisioningChangedCallback(int subId, IImsConfigCallback callback); /** + * Set the provisioning status for the IMS MmTel capability using the specified subscription. + */ + void setImsProvisioningStatusForCapability(int subId, int capability, int tech, + boolean isProvisioned); + + /** + * Get the provisioning status for the IMS MmTel capability specified. + */ + boolean getImsProvisioningStatusForCapability(int subId, int capability, int tech); + + /** Is the capability and tech flagged as provisioned in the cache */ + boolean isMmTelCapabilityProvisionedInCache(int subId, int capability, int tech); + + /** Set the provisioning for the capability and tech in the cache */ + void cacheMmTelCapabilityProvisioning(int subId, int capability, int tech, + boolean isProvisioned); + + /** * Return an integer containing the provisioning value for the specified provisioning key. */ int getImsProvisioningInt(int subId, int key); |