Merge changes from topics "ut_provision_api", "ims_prov_api_defs"

* changes:
  Add new UT provisioning CarrierConfig options
  Define a subset of provisioning integers as public
This commit is contained in:
Brad Ebinger
2019-01-24 18:09:14 +00:00
committed by Gerrit Code Review
8 changed files with 217 additions and 14 deletions

View File

@@ -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";

View File

@@ -7203,12 +7203,20 @@ package android.telephony.ims {
public class ProvisioningManager {
method public static android.telephony.ims.ProvisioningManager createForSubscriptionId(android.content.Context, int);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getProvisioningIntValue(int);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getProvisioningStringValue(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) public int setProvisioningIntValue(int, int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setProvisioningStringValue(int, String);
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
field public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26; // 0x1a
field public static final int PROVISIONING_VALUE_DISABLED = 0; // 0x0
field public static final int PROVISIONING_VALUE_ENABLED = 1; // 0x1
field public static final String STRING_QUERY_RESULT_ERROR_GENERIC = "STRING_QUERY_RESULT_ERROR_GENERIC";
field public static final String STRING_QUERY_RESULT_ERROR_NOT_READY = "STRING_QUERY_RESULT_ERROR_NOT_READY";
}
public static class ProvisioningManager.Callback {

View File

@@ -608,10 +608,40 @@ 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.
*
@@ -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);

View File

@@ -86,9 +86,7 @@ public class ImsMmTelManager {
/**
* Prefer registering for IMS over IWLAN if possible if WiFi signal quality is high enough.
* @hide
*/
@SystemApi
public static final int WIFI_MODE_WIFI_PREFERRED = 2;
/**

View File

@@ -21,13 +21,17 @@ import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.WorkerThread;
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;
@@ -38,12 +42,67 @@ import java.util.concurrent.Executor;
* to changes in these configurations.
*
* Note: IMS provisioning keys are defined per carrier or OEM using OMA-DM or other provisioning
* applications and may vary.
* applications and may vary. For compatibility purposes, the first 100 integer values used in
* {@link #setProvisioningIntValue(int, int)} have been reserved for existing provisioning keys
* previously defined in the Android framework. Some common constants have been defined in this
* class to make integrating with other system apps easier. USE WITH CARE!
*
* To avoid collisions, please use String based configurations when possible:
* {@link #setProvisioningStringValue(int, String)} and {@link #getProvisioningStringValue(int)}.
* @hide
*/
@SystemApi
public class ProvisioningManager {
/**
* The query from {@link #getProvisioningStringValue(int)} has resulted in an unspecified error.
*/
public static final String STRING_QUERY_RESULT_ERROR_GENERIC =
"STRING_QUERY_RESULT_ERROR_GENERIC";
/**
* The query from {@link #getProvisioningStringValue(int)} has resulted in an error because the
* ImsService implementation was not ready for provisioning queries.
*/
public static final String STRING_QUERY_RESULT_ERROR_NOT_READY =
"STRING_QUERY_RESULT_ERROR_NOT_READY";
/**
* The integer result of provisioning for the queried key is disabled.
*/
public static final int PROVISIONING_VALUE_DISABLED = 0;
/**
* The integer result of provisioning for the queried key is enabled.
*/
public static final int PROVISIONING_VALUE_ENABLED = 1;
/**
* Override the user-defined WiFi Roaming enabled setting for this subscription, defined in
* {@link SubscriptionManager#WFC_ROAMING_ENABLED_CONTENT_URI}, for the purposes of provisioning
* the subscription for WiFi Calling.
*
* @see #getProvisioningIntValue(int)
* @see #setProvisioningIntValue(int, int)
*/
public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26;
/**
* Override the user-defined WiFi mode for this subscription, defined in
* {@link SubscriptionManager#WFC_MODE_CONTENT_URI}, for the purposes of provisioning
* this subscription for WiFi Calling.
*
* Valid values for this key are:
* {@link ImsMmTelManager#WIFI_MODE_WIFI_ONLY},
* {@link ImsMmTelManager#WIFI_MODE_CELLULAR_PREFERRED}, or
* {@link ImsMmTelManager#WIFI_MODE_WIFI_PREFERRED}.
*
* @see #getProvisioningIntValue(int)
* @see #setProvisioningIntValue(int, int)
*/
public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27;
/**
* Callback for IMS provisioning changes.
*/
@@ -180,10 +239,15 @@ public class ProvisioningManager {
/**
* Query for the integer value associated with the provided key.
*
* This operation is blocking and should not be performed on the UI thread.
*
* @param key An integer that represents the provisioning key, which is defined by the OEM.
* @return an integer value for the provided key.
* @return an integer value for the provided key, or
* {@link ImsConfigImplBase#CONFIG_RESULT_UNKNOWN} if the key doesn't exist.
* @throws IllegalArgumentException if the key provided was invalid.
*/
@WorkerThread
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public int getProvisioningIntValue(int key) {
try {
@@ -195,10 +259,16 @@ public class ProvisioningManager {
/**
* Query for the String value associated with the provided key.
* @param key An integer that represents the provisioning key, which is defined by the OEM.
* @return a String value for the provided key, or {@code null} if the key doesn't exist.
*
* This operation is blocking and should not be performed on the UI thread.
*
* @param key A String that represents the provisioning key, which is defined by the OEM.
* @return a String value for the provided key, {@code null} if the key doesn't exist, or one
* of the following error codes: {@link #STRING_QUERY_RESULT_ERROR_GENERIC},
* {@link #STRING_QUERY_RESULT_ERROR_NOT_READY}.
* @throws IllegalArgumentException if the key provided was invalid.
*/
@WorkerThread
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public String getProvisioningStringValue(int key) {
try {
@@ -210,10 +280,16 @@ public class ProvisioningManager {
/**
* Set the integer value associated with the provided key.
*
* This operation is blocking and should not be performed on the UI thread.
*
* Use {@link #setProvisioningStringValue(int, String)} with proper namespacing (to be defined
* per OEM or carrier) when possible instead to avoid key collision if needed.
* @param key An integer that represents the provisioning key, which is defined by the OEM.
* @param value a integer value for the provided key.
* @return the result of setting the configuration value.
*/
@WorkerThread
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public @ImsConfigImplBase.SetConfigResult int setProvisioningIntValue(int key, int value) {
try {
@@ -226,10 +302,14 @@ public class ProvisioningManager {
/**
* Set the String value associated with the provided key.
*
* @param key An integer that represents the provisioning key, which is defined by the OEM.
* This operation is blocking and should not be performed on the UI thread.
*
* @param key A String that represents the provisioning key, which is defined by the OEM and
* should be appropriately namespaced to avoid collision.
* @param value a String value for the provided key.
* @return the result of setting the configuration value.
*/
@WorkerThread
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public @ImsConfigImplBase.SetConfigResult int setProvisioningStringValue(int key,
String value) {
@@ -240,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) {

View File

@@ -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
*/

View File

@@ -277,12 +277,14 @@ public class ImsConfig {
* Wi-Fi calling roaming status.
* Value is in Integer format. ON (1), OFF(0).
*/
public static final int VOICE_OVER_WIFI_ROAMING = 26;
public static final int VOICE_OVER_WIFI_ROAMING =
ProvisioningManager.KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE;
/**
* Wi-Fi calling modem - WfcModeFeatureValueConstants.
* Value is in Integer format.
*/
public static final int VOICE_OVER_WIFI_MODE = 27;
public static final int VOICE_OVER_WIFI_MODE =
ProvisioningManager.KEY_VOICE_OVER_WIFI_MODE_OVERRIDE;
/**
* VOLTE Status for voice over wifi status of Enabled (1), or Disabled (0).
* Value is in Integer format.

View File

@@ -1755,6 +1755,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.
*/